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

 
Кста, а как правильно перехватить, WM_CLOSE почему-то не работает...
Halold
Отправлено: 19.03.2005, 22:42


Не зарегистрирован







ПраваяКонпка->Закрыть по приложению, "лежащем" в (забыл, как правильно называется) одной горизонтальной "полоске" с кнопкой ПУСК...
При том, что имеющийся обработчик WM_CLOSE (из книжки Архангельского) по Alt+F4 работает и ловит...?
Или, может, менюшку по "ПраваяКонпка->Закрыть" можно вообще запретить? Как обходитесь-то?
Harold.
Gal
Отправлено: 22.03.2005, 15:30


Станционный диспетчер

Группа: Участник
Сообщений: 124



Запрет закрытия формы по кнопке [X]

void __fastcall TForm1::Button1Click(TObject *Sender)
{
HMENU MenuHandle = GetSystemMenu(Handle, false);
if(MenuHandle)
DeleteMenu(MenuHandle, SC_CLOSE, MF_BYCOMMAND);
}

Запрет закрытия формы по Alt+F4


//В обpаботчике FormKeyDown пишешь:
if (Shift.Contains(ssAlt)&&Key==VK_F4) Tag=1;

//В обpаботчике FormCloseQuery:
if(Tag)
{
CanClose=false;
Tag=0;
}

** Harold
Отправлено: 22.03.2005, 16:21


Не зарегистрирован







Большое человеческое Спасибо.
Да... "вот так за спасибо и работаем...." (с) smile.gif
62316e
Отправлено: 22.03.2005, 17:09


Дежурный стрелочник

Группа: Участник
Сообщений: 38



Встречный вопрос: Как перехватить WM_CLOSE (точнее QEventType_Сlose, вроди) под CLX???
Gal
Отправлено: 22.03.2005, 18:48


Станционный диспетчер

Группа: Участник
Сообщений: 124



извините под CLX пока не пишу. Хотя мне кажется тот код должен работать. Хотя ... Не знаю.
62316e
Отправлено: 22.03.2005, 19:53


Дежурный стрелочник

Группа: Участник
Сообщений: 38



Тот код роботать точно не будет. Тот код на WinAPI.
Gal
Отправлено: 28.03.2005, 14:27


Станционный диспетчер

Группа: Участник
Сообщений: 124



// Чтобы форма не закрывалась при нажатии комбинации клавиш
// Alt+F4, разместите на форме компонент TActionList(ActionList1),
// создайте новый TAction(Action1), и в свойстве ShortCut у Action1
// пропишите комбинацию клавиш Alt+F4, а обработчик события
// OnExecute должен выглядеть следующим образом
// (Form1- ваша форма):
void __fastcall TForm1::Action1Execute(TObject *Sender)
{
// чтобы при сохранении C++Builder не уничтожил обработчик
}


Кстати ActionList в CLX есть (у меня стоит Delph7)

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