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

Вниз

Еще раз об обработке сообщений   Найти похожие ветки 

 
Ал   (2002-11-13 00:22) [0]

Используя VCL, я писал:

procedure TForm_Main.WMWinPosChanging(var Message: TWMWINDOWPOSCHANGING);
begin
Message.WindowPos^.flags := Message.WindowPos^.flags and not SWP_HIDEWINDOW;
inherited;
end;

А как это сделать в KOL?

Я перехватываю сообщение WM_WINDOWPOSCHANGING:

function TForm_Main.KOLForm_MainMessage(var Msg: tagMSG;
var Rslt: Integer): Boolean;
begin
Result := False;
if Msg.Message = WM_WINDOWPOSCHANGING then
begin
// И как же мне работать с флагами TWMWINDOWPOSCHANGING,
// если у Msg нет ничего такого.
end;
end;

В результате хочется получить несворачиваемое ничем окно (в том числе кнопкой "Свернуть все окна" и комбинацией Win-клавиша + D.


 
Gandalf   (2002-11-13 11:57) [1]


> А как это сделать в KOL?
>
> Я перехватываю сообщение WM_WINDOWPOSCHANGING:
>
> function TForm_Main.KOLForm_MainMessage(var Msg: tagMSG;
> var Rslt: Integer): Boolean;
> begin
> Result := False;
> if Msg.Message = WM_WINDOWPOSCHANGING then
> begin
> // И как же мне работать с флагами TWMWINDOWPOSCHANGING,
> // если у Msg нет ничего такого.
> end;
> end;


function TForm1.KOLForm1Message(var Msg: tagMSG;
var Rslt: Integer): Boolean;
var
Message:TWMWINDOWPOSCHANGING;
begin
result := false;
case msg.message of
WM_WINDOWPOSCHANGING:
begin
Message:=TWMWINDOWPOSCHANGING(Pointer(msg.lParam)^);
// ...
end;
end; // case
end;




 
Ал   (2002-11-13 14:29) [2]

Уважаемый Gandalf!

Подскажите, что я делаю не так?

function TForm1.KOLForm1Message(var Msg: tagMSG;
var Rslt: Integer): Boolean;
var
Message:TWMWINDOWPOSCHANGING;
begin
Result := false;
case msg.message of
WM_WINDOWPOSCHANGING:
begin
Message:=TWMWINDOWPOSCHANGING(Pointer(msg.lParam)^);
Message.WindowPos.hwnd := Applet.GetWindowHandle;
Message.WindowPos.hwndInsertAfter := Applet.GetWindowHandle;
Message.WindowPos.X := Applet.Left;
Message.WindowPos.Y := Applet.Top;
Message.WindowPos.cx := Applet.Width;
Message.WindowPos.cy := Applet.Height;
Message.WindowPos.flags := Message.WindowPos.flags and not SWP_HIDEWINDOW;
inherited;
end;
end; // case
end;

Этот код завершается RunTime Error на операторе
Message.WindowPos.hwnd := Applet.GetWindowHandle;

Все, что я хотел - отловить WM_WINDOWPOSCHANGING, сменить флаг так, чтобы окно не сворачивалось и отправить это сообщение на дальнейшую обработку.


 
Gandalf   (2002-11-13 16:14) [3]

Извини, я тебя обманул с типом. Не
TWMWINDOWPOSCHANGING, а TWindowPos.
Для простоты можно вообще:
var
My1:PWindowPos;
...
WM_WINDOWPOSCHANGING:
begin
My1:=PWindowPos(msg.lParam);
My1.x:=5;
// Остальное по вкусу
end;

будет вдоль кромки бегать.
Присвонения Handle лучше не делать, а если используешь Applet то проверяй на nil, а то может и вылетить к концу программы.



 
Ал   (2002-11-13 16:52) [4]

Извините, Gandalf, хотя ничего не ломается - окно все равно сворачивается и кнопкой "Свернуть все окна" и Win + D.
Флаги то изменили, но обрабатывается ли все это?
Есть ли другой способ предотвратить сворачивание окна сообщением WM_WINDOWPOSCHANGING?


 
bartov   (2002-11-13 23:34) [5]

case Msg.message of
WM_SYSCOMMAND:
if Msg.wParam = SC_MINIMIZE then Result := TRUE;
end;

Правда, win + D не катит под XP.



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

Форум: "KOL";
Текущий архив: 2003.07.17;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.46 MB
Время: 0.008 c
1-55505
Толик
2003-07-04 13:50
2003.07.17
Баг VCL?


8-55665
Intell
2003-03-27 07:39
2003.07.17
PlayList - HELP!


3-55408
andrew_ros1
2003-06-21 13:42
2003.07.17
Вечный вопрос:


1-55654
CAHbI4
2003-07-04 13:49
2003.07.17
Поиск в TListView


1-55548
Antipich
2003-07-05 17:56
2003.07.17
База слов Офиса





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский