noname |
Отправлено: 18.09.2004, 19:35 |
|
Не зарегистрирован
|
Проблема такая: при создании формы (В событие OnCreate) проверяется условие. Если false, то необходимо закрыть форму(не приложение). Однако, Close() не работает. Как закрыть форму?
|
|
Konstantine |
Отправлено: 20.09.2004, 08:29 |
|
Мастер участка
Группа: Модератор
Сообщений: 545
|
проверяй в OnShow, или проверяй там, а закрывай — здесь
|
|
Doga |
Отправлено: 20.09.2004, 13:07 |
|
Мастер участка
Группа: Участник
Сообщений: 575
|
Проще и, я считаю, более грамотно проверить это условие ДО создания формы!
|
|
Konstantine |
Отправлено: 20.09.2004, 13:23 |
|
Мастер участка
Группа: Модератор
Сообщений: 545
|
а какое условие? может его можно проверить и в главном файле проекта Project1.cpp? и не вызывать создание формы?
|
|
Doga |
Отправлено: 20.09.2004, 13:27 |
|
Мастер участка
Группа: Участник
Сообщений: 575
|
Дык я про это и говорю!
|
|
Konstantine |
Отправлено: 20.09.2004, 13:47 |
|
Мастер участка
Группа: Модератор
Сообщений: 545
|
Это Я понял, а noname — может и нет!!!
|
|
xim |
Отправлено: 20.09.2004, 14:12 |
|
Станционный диспетчер
Группа: Участник
Сообщений: 143
|
... OnCreate(TObject *Sender)
{
if(<надо вывалиться>)
{
SendMessage(Form<#>.Handle,WM_SYSCOMMAND,(WPARAM)SC_CLOSE,(LPARAM)0);
return;
}
} |
|
Doga |
Отправлено: 20.09.2004, 14:22 |
|
Мастер участка
Группа: Участник
Сообщений: 575
|
|
|
Gedeon |
Отправлено: 20.09.2004, 15:45 |
|
Ветеран
Группа: Модератор
Сообщений: 1742
|
QUOTE (xim @ 20/09/2004, 15:14) | SendMessage(Form<#>.Handle,WM_SYSCOMMAND,(WPARAM)SC_CLOSE,(LPARAM)0);
|
Тогда уж
CODE |
PostMessage(Handle,WM_SYSCOMMAND,(WPARAM)SC_CLOSE,(LPARAM)0); |
|
|
avtoritet |
Отправлено: 20.09.2004, 15:58 |
|
Ученик-кочегар
Группа: Участник
Сообщений: 15
|
try{
Application->CreateForm(__classid(TfrmX),&frmX);
}catch(...){
ShowMessage("Error: not create form frmX");
} |
|
xim |
Отправлено: 22.09.2004, 10:01 |
|
Станционный диспетчер
Группа: Участник
Сообщений: 143
|
Дело в том, что данный вызов SendMessage / PostMessage создаст первое сообщение в очереди обработки для хендла закреатированной формы (до WM_SHOWWINDOW) . Соответственно он будет обработан первым. Винде по барабану визибильность того или иного собственника HWND, а создание формы в CBuilder (точнее — Delphi) происходит еще до обработки событий для данной формы. Поэтому вышеприведенный сендмессэдж срабатывает (и срабатывает нормально, за много лет работы ни разу сбоя не давал), а метод Close() нет.
|
|