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

 
Проблема с Maximize, Спасите
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 проверка состояния главной формы расчет и установка координат второстепенной.

Ну дык, я подозревал, что копать надо где-то тут smile.gif , но не силён я в этих Хуках, апперкотах и прочих джебах sad.gif . Помогите, очень надо.
ROLpogo
Отправлено: 29.12.2004, 11:48


Ученик-кочегар

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



Ребята, проблема всё ещё актуальна. Подсказывайте поактивней smile.gif
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



или вот вариант, в принципе то-же самое

User Attached Image Скачать файл
Maximize_xTrim__041229_152751_.zip


ROLpogo
Отправлено: 29.12.2004, 14:00


Ученик-кочегар

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



Ура, всё заработало!

Всем MAXIMIZE Спасибо! biggrin.gif
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?

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