Форум: "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.45 MB
Время: 0.007 c