C++ Builder
| Главная | Уроки | Статьи | FAQ | Форум | Downloads | Литература | Ссылки | RXLib | Диски |

 
закрытие формы
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



Дык я про это и говорю! biggrin.gif
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



smile.gif
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() нет.

Вернуться в Вопросы программирования в C++Builder