Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2003.07.17;
Скачать: CL | DM;

Вниз

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

 
Ал   (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 вся ветка

Текущий архив: 2003.07.17;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.013 c
6-55686
zom
2003-05-12 17:21
2003.07.17
Открытие сетевого соединения. Какое событие вызывается?


8-55671
multik
2003-03-28 23:59
2003.07.17
Привет всем!!! Из bmp сделать ico


14-55804
Andryk
2003-06-30 17:35
2003.07.17
Однако даже в билетах экзаменов ПДД есть юмор :о))


14-55819
ArtemB
2003-07-01 12:33
2003.07.17
запрос SQL


3-55392
Alexander Vasjuk
2003-06-18 13:43
2003.07.17
TDbf V6.3 - MasterFields не устанавливается