![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Еще раз об обработке сообщений
Ал © (2002-11-13 00:22:00)Используя 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.
bartov (2002-11-13 23:34:00) [1]case Msg.message of
WM_SYSCOMMAND:
if Msg.wParam = SC_MINIMIZE then Result := TRUE;
end;
Правда, win + D не катит под XP.
Ал (2002-11-13 16:52:00) [2]Извините, Gandalf, хотя ничего не ломается - окно все равно сворачивается и кнопкой "Свернуть все окна" и Win + D.
Флаги то изменили, но обрабатывается ли все это?
Есть ли другой способ предотвратить сворачивание окна сообщением WM_WINDOWPOSCHANGING?
Gandalf (2002-11-13 16:14:00) [3]Извини, я тебя обманул с типом. Не
TWMWINDOWPOSCHANGING, а TWindowPos.
Для простоты можно вообще:
var
My1:PWindowPos;
...
WM_WINDOWPOSCHANGING:
begin
My1:=PWindowPos(msg.lParam);
My1.x:=5;
// Остальное по вкусу
end;
будет вдоль кромки бегать.
Присвонения Handle лучше не делать, а если используешь Applet то проверяй на nil, а то может и вылетить к концу программы.
Ал (2002-11-13 14:29:00) [4]Уважаемый 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 11:57:00) [5]
> А как это сделать в 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;