Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Еще раз об обработке сообщений


Ал ©   (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;



Наверх

Титульная страница Поиск, карта сайта Написать письмо