link7810 link7811 link7812 link7813 link7814 link7815 link7816 link7817 link7818 link7819 link7820 link7821 link7822 link7823 link7824 link7825 link7826 link7827 link7828 link7829 link7830 link7831 link7832 link7833 link7834 link7835 link7836 link7837 link7838 link7839 link7840 link7841 link7842 link7843 link7844 link7845 link7846 link7847 link7848 link7849 link7850 link7851 link7852 link7853 link7854 link7855 link7856 link7857 link7858 link7859 link7860 link7861 link7862 link7863 link7864 link7865 link7866 link7867 link7868 link7869 link7870 link7871 link7872 link7873 link7874 link7875 link7876 link7877 link7878 link7879 link7880 link7881 link7882 link7883 link7884 link7885 link7886 link7887 link7888 link7889 link7890 link7891 link7892 link7893 link7894 link7895 link7896 link7897 link7898 link7899 link7900 link7901 link7902 link7903 link7904 link7905 link7906 link7907 link7908 link7909 link7910 link7911 link7912 link7913 link7914 link7915 link7916 link7917 link7918 link7919 link7920 link7921 link7922 link7923 link7924 link7925 link7926 link7927 link7928 link7929 link7930 link7931 link7932 link7933 link7934 link7935 link7936 link7937 link7938 link7939 link7940 link7941 link7942 link7943 link7944 link7945 link7946 link7947 link7948 link7949 link7950 link7951
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