Окно не получает WM_DISPLAYCHANGE

Вопросы программирования и использования среды Lazarus.

Модератор: Модераторы

Окно не получает WM_DISPLAYCHANGE

Сообщение Gand777 » 21.03.2013 19:03:11

Небольшой тестовый код:
Код: Выделить всё
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;

const
  mymess = WM_DISPLAYCHANGE;

type
  TForm1 = class(TForm)
    Button1: TButton;
    procedure Button1Click(Sender: TObject);
  private
    procedure mymessevent(var msg:TMessage); message mymess;
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.lfm}

procedure TForm1.mymessevent(var msg:TMessage);
begin
  showmessage('Сообщение получено');
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
  sendmessage (handle, mymess,0,0);
end;

end.

Компилирую в Lazarus 1.0.8 FPC 2.6.2 под WinXP SP3 (как впрочем и на другом компе в Lazarus 1.0.6 FPC 2.6.0) - сообщение не доходит.
тот же самый код, скомпилированный в Delphi XE работает на ура (и при нажатии на баттон, и при изменении разрешения экрана).
Пробовал вместо WM_DISPLAYCHANGE указать другие сообщения, так например WM_MOUSEMOVE работает, а WM_MOUSELEAVE нет.
В Lazarus я новичок, подскажите плиз куда копать, мож настройки проекта какие надо выставить или еще чего...
Gand777
незнакомец
 
Сообщения: 3
Зарегистрирован: 22.01.2013 20:13:57

Re: Окно не получает WM_DISPLAYCHANGE

Сообщение B4rr4cuda » 21.03.2013 19:17:24

Так, предположение наобум - добавьте в юзес LMessages и смените константу сообщения на LM_DISPLAYCHANGE. Ввиду кроссвиджетности и кроссплатформенности у лазаря очень специфичная работа с сообщениями и скорее всего оно обрабатывается и гасится на более низком уровне. Поэтому работа с сообщениями должна идти через Lmessages и лазаревские константы, а не через винапишный messages.
Аватара пользователя
B4rr4cuda
энтузиаст
 
Сообщения: 693
Зарегистрирован: 28.12.2007 07:48:35

Re: Окно не получает WM_DISPLAYCHANGE

Сообщение Gand777 » 21.03.2013 22:48:06

Увы, но сообщения LM_DISPLAYCHANGE нет... да и вообще поиск по DISPLAY в LMessages ничего не дает.
Gand777
незнакомец
 
Сообщения: 3
Зарегистрирован: 22.01.2013 20:13:57

Re: Окно не получает WM_DISPLAYCHANGE

Сообщение B4rr4cuda » 23.03.2013 06:42:09

Вполне возможно, что его просто нет. Где-то тут на форуме обсуждалось, как все же ловить "неуловимые" сообщения, но боюсь что не помню подробности. Стоит также попробовать отловить его в подмененной wndproc. Больше ничего в голову не приходит, к сожалению.
Аватара пользователя
B4rr4cuda
энтузиаст
 
Сообщения: 693
Зарегистрирован: 28.12.2007 07:48:35

Re: Окно не получает WM_DISPLAYCHANGE

Сообщение Gand777 » 25.03.2013 15:02:33

Вышел из положения с помощью сообщения WM_WINDOWPOSCHANGING, которое также рассылается окнам при изменении размера рабочей области (проверял через SPY++), а так-как моя программулина не показывает свое окно пользователю (все "общение" происходит через значок в трее), то WM_WINDOWPOSCHANGING однозначно указывает на изменение разрешения.
Gand777
незнакомец
 
Сообщения: 3
Зарегистрирован: 22.01.2013 20:13:57


Вернуться в Lazarus

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 227

Рейтинг@Mail.ru
cron