ROLpogo |
Отправлено: 24.12.2004, 12:24 |
|
Ученик-кочегар
Группа: Участник
Сообщений: 12
|
В программе 2 формы. Верхняя и нижняя.
Как сделать так, чтобы при нажатии на иконку biMaximize нижней формы, она развёртывалась под верхнюю? |
|
joynter |
Отправлено: 24.12.2004, 12:27 |
|
Станционный диспетчер
Группа: Участник
Сообщений: 137
|
в ОнРесайзе нижней задать соответствующие координаты относительна Скрин'а |
|
ROLpogo |
Отправлено: 24.12.2004, 14:53 |
|
Ученик-кочегар
Группа: Участник
Сообщений: 12
|
QUOTE (joynter @ 24/12/2004, 13:29) | в ОнРесайзе нижней задать соответствующие координаты относительна Скрин'а |
Не совсем понял. OnResize же ведь вызывается не только при распахивании окна. |
|
Gedeon |
Отправлено: 24.12.2004, 15:06 |
|
Ветеран
Группа: Модератор
Сообщений: 1742
|
QUOTE (ROLpogo @ 24/12/2004, 13:26) | В программе 2 формы. Верхняя и нижняя.
|
Поясните.
MDI не подходит?
|
|
ROLpogo |
Отправлено: 24.12.2004, 16:09 |
|
Ученик-кочегар
Группа: Участник
Сообщений: 12
|
QUOTE (Gedeon @ 24/12/2004, 16:08) | QUOTE (ROLpogo @ 24/12/2004, 13:26) | В программе 2 формы. Верхняя и нижняя.
|
Поясните.
MDI не подходит? |
Нет, MDI в проекте не применяется.
Просто есть главная форма, как в среде Builder. И есть второстепенная форма. Задумка такая, что если главная форма распахнута и висит под потолком, то можно под неё распахнуть и второстепенную, без всяких интеграций как в MDI, а просто чтоб Top нижней стал равен Top+Height верхней.
P.S.: Специфика проекта не допускает использования MDI, да и не требуется его. |
|
Gedeon |
Отправлено: 24.12.2004, 16:50 |
|
Ветеран
Группа: Модератор
Сообщений: 1742
|
ну, а что тогда, отлов WM_SYSCOMMAND && SC_MAXIMIZE второстепенной формы, проверка состояния главной формы расчет и установка координат второстепенной.
Отредактировано Gedeon — 24/12/2004, 17:58
|
|
ROLpogo |
Отправлено: 24.12.2004, 16:57 |
|
Ученик-кочегар
Группа: Участник
Сообщений: 12
|
QUOTE (Gedeon @ 24/12/2004, 17:52) | ну, а что тогда, хук на WM_SYSCOMMAND && SC_MAXIMIZE проверка состояния главной формы расчет и установка координат второстепенной. |
Ну дык, я подозревал, что копать надо где-то тут , но не силён я в этих Хуках, апперкотах и прочих джебах . Помогите, очень надо. |
|
ROLpogo |
Отправлено: 29.12.2004, 11:48 |
|
Ученик-кочегар
Группа: Участник
Сообщений: 12
|
Ребята, проблема всё ещё актуальна. Подсказывайте поактивней |
|
AVC |
Отправлено: 29.12.2004, 12:11 |
|
Ветеран
Группа: Модератор
Сообщений: 1583
|
Подозреваю, что максимизация всегда будет "по экрану".
Но отловить момент момент можно без хуков. Это можно сделать так
CODE |
protected:
virtual void __fastcall WndProc (Messages::TMessage &Message);
void __fastcall Tваша_форма::WndProc (Messages::TMessage &Message)
{
if (Message.Msg == WM_SYSCOMMAND)
{ if (Message.WParam == SC_MAXIMIZE) { установка координат и размеров /*а вдруг прокатит :) */; return; }
else if (Message.WParam == SC_RESTORE ) ;
else if (Message.WParam == SC_MINIMIZE ) ;
}
TForm::WndProc(Message);
}
|
Отредактировано AVC — 29/12/2004, 12:17 |
|
xTrim |
Отправлено: 29.12.2004, 12:30 |
|
Машинист паровоза
Группа: Участник
Сообщений: 208
|
или вот вариант, в принципе то-же самое
|
|
ROLpogo |
Отправлено: 29.12.2004, 14:00 |
|
Ученик-кочегар
Группа: Участник
Сообщений: 12
|
Ура, всё заработало!
Всем MAXIMIZE Спасибо! |
|
pagan |
Отправлено: 29.12.2004, 16:39 |
|
Ученик-кочегар
Группа: Участник
Сообщений: 22
|
Позвольте и мне присоединиться к дискуссии. Подобная схема у нас тоже была опробована, однако, когда юзер щелкал дважды на заголовке окна (для maximize соотв.) отлавливалось другое сообщение
CODE | switch (Message.Msg)
{
case WM_SYSCOMMAND: if (Message.WParam == 0xF012)
{
// MouseClick on Window caption
Message.Result = 0;
}
if (Message.WParam == SC_MAXIMIZE)
{
// ...
}
|
Проблема в том, что оно срабатывало и на одиночный клик, поэтому передача, типа SendMessage(Handle, WM_SYSCOMMAND, (WPARAM)SC_MAXIMIZE, (LPARAM)(Left+Top)); не проходила.
Вопрос: может тогда кто-то подскажет как в случае двойного мышеклика по заголовку окна отловить его MAXIMIZE? |
|