![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Не получается послать post-сообщение окну [Delphi, Windows]
-=Mike=- © (2005-11-10 12:21:00)В VCL для работы с БД использовал следующий механизм:
в событии OnCreate посылаю главному окну свое (т.е. пользовательское) сообщение с помощью функции PostMessage. Далее обработчик этого события осуществляет вывод диалога запроса пароля и затем открытие БД. Получалось очень хорошо - пользователь видит полностью сформированное и отрисованное главное окно.
Подскажите, как подобное сделать на KOL????
-=Mike=- (2005-11-10 17:02:00) [1]Действительно! Пашет! Как все просто оказалось.
Спасибо!
ECM (2005-11-10 15:00:00) [2]Проверил у себя:
procedure TMainForm.KOLForm1FormCreate(Sender: PObj);
...
PostMessage(Form.Handle,WM_NULL,0,0);
end;
function TMainForm.KOLForm1Message(var Msg: tagMSG;
var Rslt: Integer): Boolean;
begin
Result := FALSE;
if Msg.message = WM_NULL then asm int 3 end;
...
Всё работает.
-=Mike=- (2005-11-10 14:33:00) [3]это я понимаю. так в общем-то и делается.
единственное что код по созданию и открытию формы запроса пароля, чтения БД переносится в отдельную процедуру, которая вызывается отдельно от FormCreate, но сразу же после нее. Такого я добиваюсь помещением вызова этой процедуры в обработчик своего сообщения. А в конце FormCreate просто делаю вызов PostMessage(Form.Handle, WM_MYMESSAGE, 0, 0);
Т.о. образом получается что приложение полностью проинициализоровалось, создало все свои структуры данных, обработало все сообщения, которые появились при запуске, и только после этого начало открывать БД.
Т.е. нужно добиться эффекта как будто пользователь после запуска программы нажимает на кнопку "Открыть БД", но это мы делаем за него.
ECM (2005-11-10 12:29:00) [4]Один из возможных вариантов:
1)
Projects->Options->Forms убрать PassForm из списка "Auto-create forms"
2)
procedure TForm1.KOLForm1FormCreate(Sender: PObj);
...
Form.Show;
NewPassForm(PassForm,Applet);
Ret := PassForm.Form.ShowModal;
PassForm.Form.Hide;
if Ret = 1 then begin
....