Kate |
Отправлено: 26.11.2003, 11:02 |
|
Ученик-кочегар
Группа: Участник
Сообщений: 9
|
Помогите, пожалуйста, решить такую, вроде бы, простую проблемку:
Неглавные формы приложения (не MDI) минимизируются в нижнюю часть десктопа, а не в панель задач. Хотелось бы минимизировать все приложение. Где это отлавливать? |
|
Guest |
Отправлено: 26.11.2003, 13:19 |
|
Не зарегистрирован
|
Application->Minimize();
отлавливать в событии onMinimize
компонента ApplicationEvents
CODE | void __fastcall TForm1::Button1Click(TObject *Sender)
{
Application->Minimize();
}
//---------------------------------------------------------------------------
void __fastcall TForm1::ApplicationEvents1Minimize(TObject *Sender)
{
ShowMessage("Minimize !");
} | |
|
Kate |
Отправлено: 27.11.2003, 10:29 |
|
Ученик-кочегар
Группа: Участник
Сообщений: 9
|
Это я как раз пробовала, но событие OnMinimize возникает только при закрытии Главной формы (даже когда компонент ApplicationEvents лежит на другой форме). Еще есть идеи? |
|
Guest |
Отправлено: 27.11.2003, 13:09 |
|
Не зарегистрирован
|
Можете воспользоваться компонентом AppEvents из библиотеки RXLib
Разместите его на Form2 и проверяйте событие onActiveFormChange
CODE |
void __fastcall TForm2::AppEvents1ActiveFormChange(TObject *Sender)
{
if(Form2->WindowState == wsMinimized)
Form1->Caption = "Form2 minimized !";
}
| |
|
Kate |
Отправлено: 27.11.2003, 13:25 |
|
Ученик-кочегар
Группа: Участник
Сообщений: 9
|
Вы будете смеяться, но опять не то. Дело в том, что, когда я открываю вторую форму, то главной делаю Hide и у меня получается одна форма, так что при ее минимизации переключения между формами не происходит. Хочется, чтобы в этот момент минимизировалось все приложение. Это можно сделать Application->Minimize(), вот только куда вставить вызов? |
|
Guest |
Отправлено: 27.11.2003, 15:49 |
|
Не зарегистрирован
|
CODE |
void __fastcall TForm2::ApplicationEvents1Message(tagMSG &Msg,
bool &Handled)
{
if(Msg.hwnd == Form2->Handle &&
!Form2->WindowState == wsMinimized &&
Msg.message == WM_NCLBUTTONDOWN &&
Msg.wParam == 8)
{
Application->Minimize();
}
}
| |
|
Kate |
Отправлено: 28.11.2003, 12:53 |
|
Ученик-кочегар
Группа: Участник
Сообщений: 9
|
УРА-А-А! З-заработало!
Пребольшое спасибо!
... оказывается осталось еще одно НО:
свернутое окошко так и остается лежать на десктопе в нижнем углу, хоть и неактивным. Как бы его убрать? а то некрасиво как-то.
Если делать Hide(), то, т.к. оно одно, автоматически появляется главное окно.
Отредактировано Kate — 28/11/2003, 14:40 |
|
Admin |
Отправлено: 29.11.2003, 13:45 |
|
Владимир
Группа: Администратор
Сообщений: 1190
|
Ну если так глобально нужно все посворачивать,
воспользуйтесь EnumWindows
https://rxlib.ru/forums/index.php?ac...3dedd6aabaa0718
|
|
Kate |
Отправлено: 01.12.2003, 12:20 |
|
Ученик-кочегар
Группа: Участник
Сообщений: 9
|
Admin, спасибо за ссылку — она таки-навела меня на нужную мысль .
Я стала разбираться и вставила вызов EnumWindows в предыдущий пример с Message. Все замечательно минимизируется, вот только нужное окошко опять в низ экрана, и тогда неня осенило вставить Handled = true; И все стало как надо. Более того, оказалось достаточно Application->Minimize();
получился такой код:
void __fastcall TEventForm::ApplicationEvents1Message(tagMSG &Msg, bool &Handled)
{
if(Msg.message == WM_NCLBUTTONDOWN && Msg.wParam == 8)
{
Application->Minimize();
Handled = true;
}
}
В результате минимизации всех неосновных окошек минимизируется приложение. Что и требовалось доказать.
Вот только может кто подскажет, где можно найти описание значение tagMSG, а то это условие работает только при нажатии кнопочки минимизации, а при выборе из системного меню окна — нет. |
|
Admin |
Отправлено: 01.12.2003, 13:05 |
|
Владимир
Группа: Администратор
Сообщений: 1190
|
Так в help-e в Builder есть.
CODE |
tagMsg encodes the information from a Windows message.
Unit
Winuser.h
typedef struct tagMSG {
HWND hwnd;
UINT message;
WPARAM wParam;
LPARAM lParam;
DWORD time;
POINT pt;
} MSG;
Description
The tagMsg type is a structure that holds the details of a Windows message. This is the structure that Windows uses to encode a message, as opposed to the TMessage type, which encodes the parameters that are passed to a Window procedure.
The following table list the fields of the tagMsg structure:
Field Meaning
hwnd The handle of the window to which the message is sent.
message The identifier of the message (the Windows message code).
wParam The wParam of the message.
lParam The lParam of the message.
time The time that the message was sent.
pt The position of the mouse cursor when the message was sent.
|
И сообщения WM_ лежат в winuser.h,
описание многих их с wParam, lParam тоже есть в help
|
|