Отправляет email-рассылки с помощью сервиса Sendsay
  Все выпуски  

RusFAQ.ru: Программирование на Delphi


РАССЫЛКИ ПОРТАЛА RUSFAQ.RU

/ КОМПЬЮТЕРЫ И ПО / Языки программирования / Delphi

Выпуск № 506
от 18.06.2006, 09:35

Администратор:Калашников О.А.
В рассылке:Подписчиков: 356, Экспертов: 65
В номере:Вопросов: 11, Ответов: 18


Вопрос № 45995: Здравствуйте эксперты подскажите пожалуйста как можно заблокировать CDRom например на время записи диска....
Вопрос № 45998: Здравствуйте!!! Имеется БД Microsoft Access в БД 2 поля 'Фамилия' и 'Количество правильных ответов' и переменные string f:='Петров' и K:='3' Можно ли как нибудь программно записать значения этих переменных в соответствующие поля БД. ...
Вопрос № 46007: Здравствуйте Эксперты. Попробуйте обьяснить мне такую ситуацию: У меня Delfi 7. Я устанавливаю на форму компонент RichEdit и загружаю в него файл в rtf формате, используя метод RichEdit1.Lines.LoadFromFile(). Иногда ( здесь самое главное слово ...
Вопрос № 46008: Доброе время суток... 1. Не могу найти описание функций CreateEllipticRgn, CreateEllipticRgnIndirect. Желательно на русском языке... 2. А может есть более удобные функции для рисования заставок?...
Вопрос № 46018: Может есть какая-то стандартная функция, которая возвращает true или false в зависимости от того, переменная (string) это IP адрес или адрес сервера ? Пример : 127.0.0.1 – true localhost - false
Вопрос № 46021: Добрый вечер, уважаемые! Скажите, как переопределить реакцию приложения на нажатие кнопок системного меню? В частности нужно, чтобы при нажатии на кнопки "свернуть" и "закрыть" приложение делалось бы просто невидимым....
Вопрос № 46026: Здравствуйте! А вот в продолжение вопроса 46021 еще вопрос - как зделать, чтобы у свернутого приложения не было видно кнопочки в панели задач , чтобы разворачивалось только из трея?...
Вопрос № 46033: Добрый вечер подскажите пожалуйста при завершении работы какое сообщение посылает программам Windows мне его нада обработать. Не могли бы вы описать....
Вопрос № 46036: вы не подсажете какой код на дельфи надо поставить, чтобы программа генерировала разный набор чисел(только чисел)....
Вопрос № 46056: Здравствуйте уважаемые эксперты! Каким образом можно обрабатывать двоичные числа, например деление или сложение по модулю 2? Заранее благодарен....
Вопрос № 46063: Здравствуйте уважаемые эксперты! Не могли бы помочь при решении одной задачи. Если упрощённо, то....Необходимо построить график зависимости A и B от C. При этом по определённой формуле рассчитываются эти A и B. Расчёт идёт A1, A2,...A10 и также ддля ...

Вопрос № 45.995
Здравствуйте эксперты подскажите пожалуйста как можно заблокировать CDRom например на время записи диска.
Отправлен: 12.06.2006, 15:29
Вопрос задал: Sergei__2006 (статус: Посетитель)
Всего ответов: 1
Мини-форум вопроса >>> (сообщений: 0)

Отвечает: Устинов Сергей Евгеньевич
Здравствуйте, Sergei__2006!
Читай тут:
http://delphiworld.narod.ru/base/cdrom_block.html
---------
Ответы на все вопросы - на сайте www.ya.ru :)
Ответ отправил: Устинов Сергей Евгеньевич (статус: Студент)
Ответ отправлен: 12.06.2006, 15:45
Оценка за ответ: 5


Вопрос № 45.998
Здравствуйте!!! Имеется БД Microsoft Access в БД 2 поля 'Фамилия' и 'Количество правильных ответов'
и переменные string f:='Петров' и K:='3'
Можно ли как нибудь программно записать значения этих переменных в соответствующие поля БД.
Отправлен: 12.06.2006, 15:45
Вопрос задал: Rewer8 (статус: Посетитель)
Всего ответов: 1
Мини-форум вопроса >>> (сообщений: 0)

Отвечает: Проходящий Мимо
Здравствуйте, Rewer8!
Для этого Вам нужно знать, с какой таблицей базы данных будем работать. С вопроса этого не ясно.
Бросаем на форму компоненты доступа к базе данных ADOTable и ADOConnection1 с закладки ADO палитры компонентов Delphi. В ADOConnection1 заполняем значениями, например:
ADOConnection1.ConnectionString:=
'Provider=MSDataShape.1;Persist Security Info=False;Data Source=c:data.mdb;Data Provider=Microsoft.Jet.OLEDB.4.0';
ADOConnection1.LoginPrompt:=false;
ADOTable1.Connection:=ADOConnection1;
ADOTable1.TableName:='Student'; //название таблицы

Далее делаем так:
procedure TForm1.Button1Click(Sender: TObject);
var
f: string;
K: byte;
begin
try
//коннектимся к базе
ADOConnection1.Connected := true;
ADOTable1.Active := true;
except
//если не получилось, то прощаемся
Application.MessageBox('Невозможно подключиться к базе',
'Ошибка!', MB_ICONERROR);
exit;
end;

f := 'Петров';
K := 3;

//добавляем запись в таблицу
ADOTable1.Insert;
//или редактируем существующую запись ADOTable1.Edit;
//записываем значение в поля
ADOTable1.FieldByName('Фамилия').AsString := f;
ADOTable1.FieldByName('Количество правильных ответов').AsInteger := K;
//по этой команде запись пишеться в таблицу
ADOTable1.Post;
end;

Приблизительно так. Можно использовать другие компоненты, иной метод нахождения полей (например по индексу, если название полей состоит с русских букв), но суть проста: открыть базу, указать таблицу, сказать, что с ней будем делать, задать значение для полей, сделать post. Рекомендую Вам почитать что-то о теории баз данных и работе с ними. Удачи!
---------
Carpe diem!
Ответ отправил: Проходящий Мимо (статус: 5-ый класс)
Ответ отправлен: 13.06.2006, 10:42
Оценка за ответ: 5


Вопрос № 46.007
Здравствуйте Эксперты. Попробуйте обьяснить мне такую ситуацию:
У меня Delfi 7. Я устанавливаю на форму компонент RichEdit и загружаю в него файл в rtf формате, используя метод RichEdit1.Lines.LoadFromFile(). Иногда ( здесь самое главное слово иногда, не должна же существовать неопределеность при выполнении одних и тех же операций) текст отображается как положено, а иногда вместо форматированного текста выскакивает обычный текст с видимыми тэгами форматирования, т.е. RichEdit ведет себя как обычный Memo. При том, если-даже, текст загрузился правильно, при попытке любой операции требующей перерисовки компонента RichEdit, например RichEdit1.Refresh или RichEdit1.WordWrap, текст по-любому станет отображаться неправильно.
Заранее спасибо.
Отправлен: 12.06.2006, 17:06
Вопрос задал: KEOs (статус: Посетитель)
Всего ответов: 1
Мини-форум вопроса >>> (сообщений: 3)

Отвечает: Ерёмин Андрей
Здравствуйте, KEOs!
Попробуйте установить свойство PlainText в False - именно оно отвечает за то, будет ли отображаться оформление. Другого здесь ничего быть не может, разве что загружаемый файл имеет не rtf, а какой-то другой формат. Если первое не помогло, попробуйте пересохранить rtf через Wordpad.
---------
Нет правила без исключений. Правило без исключений - исключение из правил.
Ответ отправил: Ерёмин Андрей (статус: Профессор)
Россия, Тула
WWW: Программирование на DELPHI: Всё для программиста.
ICQ: 286837644
----
Ответ отправлен: 12.06.2006, 17:12


Вопрос № 46.008
Доброе время суток...
1. Не могу найти описание функций CreateEllipticRgn, CreateEllipticRgnIndirect. Желательно на русском языке...
2. А может есть более удобные функции для рисования заставок?
Отправлен: 12.06.2006, 17:06
Вопрос задал: FausTT (статус: Посетитель)
Всего ответов: 2
Мини-форум вопроса >>> (сообщений: 0)

Отвечает: Ерёмин Андрей
Здравствуйте, FausTT!
Можете попробовать сделать splash screen с помощью Shaped Form: компонент для создания региона по маске и присвоения этого региона форме. Скачать >>
---------
Нет правила без исключений. Правило без исключений - исключение из правил.
Ответ отправил: Ерёмин Андрей (статус: Профессор)
Россия, Тула
WWW: Программирование на DELPHI: Всё для программиста.
ICQ: 286837644
----
Ответ отправлен: 12.06.2006, 17:14
Оценка за ответ: 5

Отвечает: Устинов Сергей Евгеньевич
Здравствуйте, FausTT!
Яндекс.ру Вам в помощь!

Функция CreateEllipticRgn
Описание:
function CreateEllipticRgn(X1, Y1, X2, Y2: Integer): HRgn;

Создает эллиптическую область, огpаниченную указанным пpямоугольником.
Паpаметpы:
X1, Y1: Веpхний левый угол огpаничивающего пpямоугольника.
X2, Y2: Пpавый нижний угол огpаничивающего пpямоугольника.
Возвpащаемое значение:
В случае успешного завеpшения - идентификатоp новой области; 0 - в пpотивном случае.
функция находится в файле gdi32.dll

Функция CreateEllipticRgnIndirect
Описание:
function CreateEllipticRgnIndirect(var Rect: TRect): HRgn;
Создает эллиптическую область, огpаниченную пpямоугольником, указанным в ARect.
Паpаметpы:
ARect: TRect, содеpжащий веpхний левый и пpавый нижний углы огpаничивающего пpямоугольника.
Возвpащаемое значение:
В случае успешного завеpшения - идентификатоp новой области; 0 - в пpотивном случае.
функция находится в файле gdi32.dll

Взято отсюда:
http://delphiworld.narod.ru/base/api_functions_c.html
Тут http://delphiworld.narod.ru/_syntax_.html
Есть справочник по API-функциям - [23]
---------
Ответы на все вопросы - на сайте www.ya.ru :)
Ответ отправил: Устинов Сергей Евгеньевич (статус: Студент)
Ответ отправлен: 12.06.2006, 17:17
Оценка за ответ: 5


Вопрос № 46.018
Может есть какая-то стандартная функция, которая возвращает true или false в зависимости от того, переменная (string) это IP адрес или адрес сервера ?

Пример :
127.0.0.1 – true
localhost - false
Отправлен: 12.06.2006, 18:30
Вопрос задал: source (статус: 1-ый класс)
Всего ответов: 2
Мини-форум вопроса >>> (сообщений: 0)

Отвечает: Сухомлин Кирилл Владимирович
Здравствуйте, source!
Адрес сервера тоже может быть IP адресом.
Предположу, что вы имели ввиду, доменное имя и IP-адрес.
Я думаю, их можно отличить по наличию или отсутствию латинских букв в имени.
Ответ отправил: Сухомлин Кирилл Владимирович (статус: 10-ый класс)
Ответ отправлен: 12.06.2006, 19:06

Отвечает: Caleb
Здравствуйте, source!

У меня есть такая функция. Я ее писал для других целей, но вам она подойдёт.

Просто вставляету функцию в программу. Кидаете любой TEDIT на форму а потом ставите его в функцию как входной пораметр.

пример:

if not isip(myedit) then exit; //MyEdit:TEdit;

если нужно то входной параметр вы и сами замените на нужный.

Приложение:

Ответ отправил: Caleb (статус: 1-ый класс)
Ответ отправлен: 12.06.2006, 22:45
Оценка за ответ: 5


Вопрос № 46.021
Добрый вечер, уважаемые! Скажите, как переопределить реакцию приложения на нажатие кнопок системного меню? В частности нужно, чтобы при нажатии на кнопки "свернуть" и "закрыть" приложение делалось бы просто невидимым.
Отправлен: 12.06.2006, 20:01
Вопрос задал: Савенко Вадим Иванович (статус: 2-ой класс)
Всего ответов: 3
Мини-форум вопроса >>> (сообщений: 8)

Отвечает: Татьяна
Здравствуйте, Савенко Вадим Иванович!
Для этого необходимо не перехватывать кнопки, а перехватывать сообщение WM_SYSCOMMAND
Пример в приложении

Приложение:

---------
Возможно все. И ничего возможно тоже.

Ответ отправила: Татьяна (статус: Студент)
Ответ отправлен: 12.06.2006, 20:28
Оценка за ответ: 5

Отвечает: Устинов Сергей Евгеньевич
Здравствуйте, Савенко Вадим Иванович!

Насчет перехвата нажатия на системные кнопки читай тут:
http://delphiworld.narod.ru/base/sys_buttons_down.html

От себя добавлю:
При попытке закрыть окно (не обязательно кнопкой закрытия окна, а также с помощью Alt+F4 и т.д.) возникает CloseQuery, поэтому Вы в процедуру Form OnCloseQuery можете написать CanClose:=false (т.е. запретить окну закрываться) и далее делать то, что Вам нужно, т.е. делать окно невидимым.

procedure TForm1.FormCloseQuery(Sender: TObject; var CanClose: Boolean);
begin
CanСlose:=false;
end;

---------
Ответы на все вопросы - на сайте www.ya.ru :)
Ответ отправил: Устинов Сергей Евгеньевич (статус: Студент)
Ответ отправлен: 12.06.2006, 20:50
Оценка за ответ: 5

Отвечает: chikanok
Здравствуйте, Савенко Вадим Иванович!
Вот вам рабочая ваша процедура! По крайней мере у меня работает!

Удачи!

Приложение:

---------
Главное желание,а там разберёмся!

Ответ отправил: chikanok (статус: 2-ой класс)
Ответ отправлен: 13.06.2006, 08:34


Вопрос № 46.026
Здравствуйте! А вот в продолжение вопроса 46021 еще вопрос - как зделать, чтобы у свернутого приложения не было видно кнопочки в панели задач , чтобы разворачивалось только из трея?
Отправлен: 12.06.2006, 21:30
Вопрос задал: Савенко Вадим Иванович (статус: 2-ой класс)
Всего ответов: 2
Мини-форум вопроса >>> (сообщений: 0)

Отвечает: Устинов Сергей Евгеньевич
Здравствуйте, Савенко Вадим Иванович!
Скрыть кнопочку из панели задач:
ShowWindow(Application.Handle, sw_Hide);
Для восстановления видимости кнопки:
ShowWindow(Application.Handle, sw_Show);

Удачи!
---------
Ответы на все вопросы - на сайте www.ya.ru :)
Ответ отправил: Устинов Сергей Евгеньевич (статус: Студент)
Ответ отправлен: 12.06.2006, 21:34

Отвечает: chikanok
Здравствуйте, Савенко Вадим Иванович!
Хех! Зачем вам это?! Ваша процедура из вопроса 46021 вполне может это сделать!
Надо только её немного подправить!Смотрите мой ответ на вопрос 46021 :) или в приложение!

Приложение:

---------
Главное желание,а там разберёмся!

Ответ отправил: chikanok (статус: 2-ой класс)
Ответ отправлен: 13.06.2006, 08:37


Вопрос № 46.033
Добрый вечер подскажите пожалуйста при завершении работы какое сообщение посылает программам Windows мне его нада обработать. Не могли бы вы описать.
Отправлен: 12.06.2006, 22:05
Вопрос задал: Sergei__2006 (статус: Посетитель)
Всего ответов: 1
Мини-форум вопроса >>> (сообщений: 0)

Отвечает: Jadd
Здравствуйте, Sergei__2006!
Там их несколько. Все зависит от того, что Вам необходимо. Думаю, что WM_QUERYENDSESSION вполне достаточно. Обработчик сообщения в программе должен вернуть true, если программа готова к завершению и false - если нет. В параметре сообщения lParam возвращается параметры выхода из системы:
ENDSESSION_LOGOFF, если просто пользователь просто закрывает свою сессию и 0, если выключает комп.

Удачи.

---------
Если в сердце дверь закрыта, нужно в печень постучаться
Ответ отправил: Jadd (статус: Профессионал)
Адрес: Санкт-Петербург
WWW: http://www.sport-diary.ru
ICQ: 28260749
----
Ответ отправлен: 12.06.2006, 22:20


Вопрос № 46.036
вы не подсажете какой код на дельфи надо поставить, чтобы программа генерировала разный набор чисел(только чисел).
Отправлен: 12.06.2006, 22:08
Вопрос задал: Ghora (статус: Посетитель)
Всего ответов: 2
Мини-форум вопроса >>> (сообщений: 1)

Отвечает: Ерёмин Андрей
Здравствуйте, Ghora!
За генерацию случайных чисел в Delphi отвечает функция Random(a). В данном случае будет сгенерировано число в интервале от 0 до a. Однако, перед первым использованием этой функции рекомендуется вызывать процедуру Randomize (без параметров), иначе каждый раз генерируемые числа будут одинаковыми. Для генерации числа в определённом диапазоне можно использовать сдвиг, например: A:=Random(10)+20; выдаст число в интервале от 20 до 30.
---------
Нет правила без исключений. Правило без исключений - исключение из правил.
Ответ отправил: Ерёмин Андрей (статус: Профессор)
Россия, Тула
WWW: Программирование на DELPHI: Всё для программиста.
ICQ: 286837644
----
Ответ отправлен: 12.06.2006, 22:32

Отвечает: Злоумышленник
Здравствуйте, Ghora!
{Любое ЧИСЛО от 7 до 13}
procedure TForm1.Button1Click(Sender: TObject);
var
i: Integer;
begin
Randomize;//Инициализация генератора случ. величин
i := RandomRange(7,13);
Edit1.Text := IntToStr(i);
end;
//-------------------------------------
{В примере ниже СТРОКА из 14 цифр}
function Rand(MaxSimbols: Integer): String;
var
i: Integer;
s: String;
begin
If MaxSimbols < 1 then Exit;
Randomize;
for i := 1 to MaxSimbols do
S := S + IntTostr(RandomRange(0,9));
Result := s;
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
Edit1.Text := Rand(14);
end;
//-----------------------------------
Желаю успеха.
Ответ отправил: Злоумышленник (статус: 9-ый класс)
Ответ отправлен: 12.06.2006, 22:39


Вопрос № 46.056
Здравствуйте уважаемые эксперты! Каким образом можно обрабатывать двоичные числа, например деление или сложение по модулю 2?
Заранее благодарен.
Отправлен: 13.06.2006, 00:09
Вопрос задал: Bober (статус: Посетитель)
Всего ответов: 1
Мини-форум вопроса >>> (сообщений: 0)

Отвечает: Сухомлин Кирилл Владимирович
Здравствуйте, Bober!
В Delphi нет специального типа "двоичное число", но все побитовые операции можно применять ко всем целым числам (перечислимые типы типа char в них не входят).

Основные побитовые операции: and, or, not, xor (логические) shl, shr (побитовые сдвиги). Приоритеты и их описания смотрите в справочной системе Delphi. Отдельно скажу только, что надо помнить, о том, что приоритет у побитовых сдвигов самый низкий. По-моему, даже ниже, чем у сложения и вычитания.

Приложение:

Ответ отправил: Сухомлин Кирилл Владимирович (статус: 10-ый класс)
Ответ отправлен: 13.06.2006, 01:20
Оценка за ответ: 5
Комментарий оценки:
Большое спасибо


Вопрос № 46.063
Здравствуйте уважаемые эксперты! Не могли бы помочь при решении одной задачи. Если упрощённо, то....Необходимо построить график зависимости A и B от C. При этом по определённой формуле рассчитываются эти A и B. Расчёт идёт A1, A2,...A10 и также ддля B1, B2...B10. Как лучше это рассчитать? Циклом? И как связать эту кучу получившихся формул с графиком?
Заранее спасибо...
Отправлен: 13.06.2006, 02:16
Вопрос задал: Pakxapo (статус: Посетитель)
Всего ответов: 2
Мини-форум вопроса >>> (сообщений: 2)

Отвечает: sir henry
Здравствуйте, Pakxapo!
Фактически у Вас два малосвязанных друг с другом вопроса:
1. Каким образом хранить данные для графика,
2. Как строить график.
----------------------------------------
1. Если данных не сильно много, количество их заранее определено и все они однотипны, то для этого идеально подходит массив. Например:
var
TheData: array[0..1, 0..9] of integer;
Здесь объявляется двумерный массив целых чисел. Соответственно в первом измерении [0, 0..9] у Вас будет храниться 10 значениq А, а во втором измерении [1, 0..9] - 10 значений В.
В этом случае подставлять свои значения в формулу Вы можете в цикле:
For i:=0 To 9 Do
C:=TheData[0, i]+TheData[1,i]; {Что соответсвует формуле C = A + B}
Если количесвто данных заранее неопределено, но всетаки они однотипны, то можно для их хранения использовать динамический массив, а далее, когда в программе Вы определитесь с количеством данных, задаете размер этого массива и осуществляете ввод данных.
Если значения А и В разных типов, то можно использовать два массива, но идекс при подстановку данных из массива в формулу будет одни на всех.
При невозможности однозначно определиться с типом или количеством данных, лучше использовать какую-либо динамическую структуру с пошаговым добавлением значений, например TList. В этом случае цикл подстановки данных будет выглядеть так:
For i:=0 To TList.Count-1 Do
C:=List1.Items[i]+List2.Items[i];
Преобразование типов (т.к. в Items хранятся указатели) будет происходить Вами вручную в зависимости от того, какой тип данных Вы будете использовать.
2. Графика - это слишком обширный материал, чтобы отвечать на него здесь. Лучше бы Вам книжку купить. :)
Есть два способа построить график - использовать компонент TChart (будет как в Excel) и использовать компонент TImage (на его канве рисуются всевозможные примитивы - точки, линии, кружки и т.д.)
Ответ отправил: sir henry (статус: Академик)
Россия, Красноярск
----
Ответ отправлен: 13.06.2006, 06:42

Отвечает: Олекса aka SoW
Здравствуйте, Pakxapo!
А и B лучше рассчитать в цикле, например

for i:=1 to 10 do
begin
А[i]:=cos(i); //A=cos C
B[i]:=i+3; //B=C+3
end;

Но если рассчитанных значений A и B не нужно хранить, то их можно вычислять при создании графика, так, как показано дальше.

Чтобы потом построить эту зависимость в виде графика, нужно сделать такую последовательность действий:
1) поставить на форму компонент TChart, дважды по нему щелкнуть
2) На закладке Series щелкнуть кнопку Add... и выбрать тип графика, например Line. Так нужно сделать дважды, поскольку нам нужны два графика: A(C) и B(C)
3) Дальше поданный пример, который строит графики функций синуса и косинуса. На его основе можно понять принцип работы с компонентом:

var i:real;
begin
Chart1.BottomAxis.Maximum:=100; //максимальноезначение по оси X
Chart1.BottomAxis.Minimum:=0; //минимальное значение по оси X
Chart1.LeftAxis.Maximum:=5; //максимальное значение по оси Y
Chart1.LeftAxis.Minimum:=-5; //минимальное значение по оси Y
i:=-10;
while i<=10 do
begin
Chart1.Series[0].AddXY(і,cos(i)); //прибавить точку с координатами (i, cos i)
Chart1.Series[1].AddXY(і,sin(i));
i:=i+0.1;
end;
end;

В Вашем случае нужно сделать, чтобы 'i' изменялось от минимального к максимальному значению 'С'.
В компонента TChart есть еще много параметров. Поексперементуйте с ими, и тогда все станет понятно.
---------
Вік живи - вік учись.
Ответ отправил: Олекса aka SoW (статус: 1-ый класс)
Ответ отправлен: 13.06.2006, 17:18


Отправить вопрос экспертам этой рассылки

Приложение (если необходимо):

* Код программы, выдержки из закона и т.п. дополнение к вопросу.
Эта информация будет отображена в аналогичном окне как есть.

Обратите внимание!
Вопрос будет отправлен всем экспертам данной рассылки!

Для того, чтобы отправить вопрос выбранным экспертам этой рассылки или
экспертам другой рассылки портала RusFAQ.ru, зайдите непосредственно на RusFAQ.ru.


Форма НЕ работает в почтовых программах The BAT! и MS Outlook (кроме версии 2003+)!
Чтобы отправить вопрос, откройте это письмо в браузере или зайдите на сайт RusFAQ.ru.


© 2001-2006, Портал RusFAQ.ru, Россия, Москва.
Идея, дизайн, программирование: Калашников О.А.
Email: adm@rusfaq.ru, Тел.: +7 (926) 535-23-31
Авторские права | Реклама на портале
Версия системы: 4.34 от 01.06.2006
Яндекс Rambler's Top100

В избранное