Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2003.02.06;
Скачать: [xml.tar.bz2];

Вниз

Хотел было поймать WM_MDIMAXIMIZE, да не тут-то было :(   Найти похожие ветки 

 
Fiend   (2003-01-28 11:00) [0]

В общем люди захотели плавающее меню а-ля офис. Сделал его с помощью TToolBar и всё окей, однако же присутствие MDI интерфейса заставляет обработать самостоятельно события максимизации/восстановления/создания/удаления дочерних окон, дабы нарисовать на панели плавающего меню системные кнопки управления окном. Создание/удаление ловится нараз, а вот максимизация/восствновление ни в какую. Помогите чем сможете. Вот кусочек кода:

procedure TMainForm.FormCreate(Sender: TObject);
begin
ClientProcInstance := MakeObjectInstance(ClientWndProc);
DefaultClientProc := Pointer(GetWindowLong(ClientHandle,
GWL_WNDPROC));
SetWindowLong(ClientHandle,
GWL_WNDPROC, LongInt(ClientProcInstance));
end;


procedure TMainForm.ClientWndProc(var Message: TMessage);
begin
with Message do
case Msg of
WM_MDIMAXIMIZE : begin
beep;
Result := CallWindowProc(DefaultClientProc,
ClientHandle,
Msg,
wParam,
lParam);
end;
WM_MDIRESTORE : begin
beep;
Result := CallWindowProc(DefaultClientProc,
ClientHandle,
Msg,
wParam,
lParam);
end;


else
Result := CallWindowProc(DefaultClientProc,
ClientHandle,
Msg,
wParam,
lParam);
end;
end;


procedure TMainForm.FormClose(Sender: TObject; var Action: TCloseAction);
begin
{..................}
if Action=caFree
then begin
SetWindowLong(ClientHandle,
GWL_WNDPROC, LongInt(DefaultClientProc));
FreeObjectInstance(ClientProcInstance);
end;
end;



СПАСИТИ!!!!! пожалуста!


 
REA   (2003-01-28 11:24) [1]

Я извратился так:

Procedure TMDIForm.FormActivate(Sender: TObject);
Begin
PostMessage(Application.MainForm.Handle,WM_ACTCHILD,0,0);
End;

Procedure TMDIForm.FormClose(Sender: TObject; var Action: TCloseAction);
Begin
Action := caFree;
Application.MainForm.Perform(WM_DEACTCHILD,0,0);
End;

-------- MainForm ----------

Procedure TMainForm.WMActChild(var Message: TMessage);
Begin
tbWinControls.Visible := (Screen.ActiveForm.WindowState=wsMaximized);
End;

Procedure TMainForm.WMDeActChild(var Message: TMessage);
Begin
tbWinControls.Visible := False;
End;

Вроде все. Не особо стабильно работает, но делал давно и лень переделывать. Да в принципе OnIdle повесить и сойдет.


 
Fiend   (2003-01-28 11:50) [2]

не, ну а потом если юзер стал окном "баловаться"
как поймать шо он максимизировал или восстановил


 
REA   (2003-01-28 12:04) [3]

Ты попробуй (благо недолго) - оно должно работать. Если где чего не заработает - поправь и мне скажи :)


 
Fiend   (2003-01-28 12:28) [4]

зашибись вы вариант предложили!
може мне еще таймер присобачить ко всему этому?!
подобного изврата никогда в моих софтах не будет!
хотя конечно спос за идею


 
REA   (2003-01-28 12:48) [5]

Да не надо никакого таймера. Оно и так вроде работает, если я ничего не забыл.



Страницы: 1 вся ветка

Форум: "Основная";
Текущий архив: 2003.02.06;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.45 MB
Время: 0.011 c
3-15490
SergeySh
2003-01-20 12:51
2003.02.06
Маленький опрос: Кто чем пользуется для доступа к MS SQL


14-15883
Youri
2003-01-20 11:29
2003.02.06
TAPI


1-15639
Fill
2003-01-29 13:37
2003.02.06
Опять Delphi - Excel


4-15998
orlov
2002-12-24 11:53
2003.02.06
подскажите плиз как подключится к инету на чистом API


1-15553
jen_bond
2003-01-28 00:35
2003.02.06
файл с расширнием .SHP





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский