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

Вниз

PostMessage   Найти похожие ветки 

 
Боб   (2015-01-12 12:36) [0]

procedure TForm1.WMSysCommand(var Msg: TWMSysCommand);
begin
 if (Msg.CmdType = WM_USER + 1) then
   MessageBox(Form1.Handle, "текст", "О программе", MB_ICONINFORMATION)
 else
   inherited;
end;


procedure TForm1.Label1Click(Sender: TObject);
begin
 PostMessage(Form1.Handle, WM_USER + 1, 0, 0);
end;


Нажимаю на Label1, но ничего не происходит. То же самое и с функцией SendMessage. Что тут не так?


 
MBo ©   (2015-01-12 12:50) [1]

А как связан обработчик WMSysCommand с сообщением WM_USER + 1 ?

WM_SYSCOMMAND message

A window receives this message when the user chooses a command from the Window menu (formerly known as the system or control menu) or when the user chooses the maximize button, minimize button, restore button, or close button.


 
Боб   (2015-01-12 13:18) [2]

 private
   procedure WMSysCommand(var Msg: TWMSysCommand); message WM_SYSCOMMAND;


procedure TForm1.FormCreate(Sender: TObject);
 SysMenu := GetSystemMenu(Form1.Handle, False);
 AppendMenu(SysMenu, MF_SEPARATOR, 0, nil);
 AppendMenu(SysMenu, MF_ENABLED, WM_USER + 1, "О программе");


 
кгшзх ©   (2015-01-12 13:24) [3]

const
WM_USER_MSG = WM_USER + 1;

procedure TForm1.OnUseerMessage(Msg : TMessage) message WM_USER_MSG;


 
Боб   (2015-01-12 14:19) [4]

А что надо писать в procedure TForm1.OnUserMessage(var Msg: TMessage);. TMessage и TWMSysCommand несовместимы.


 
Dimka Maslov ©   (2015-01-12 14:40) [5]

Метод-обработчик события должен иметь единственный аргумент (любого типа), передающийся по ссылке.


 
Боб   (2015-01-12 15:41) [6]

Всё равно не пойму.


 
MBo ©   (2015-01-12 16:36) [7]

Какая цель этого действа?
Если посылается PostMessage(Form1.Handle, WM_USER + 1, 0, 0), то принимать его можно, как и сказали, с помощью обработчика OnUserMessage(var Msg : TMessage) message WM_USER_MSG;
Если цель - принимать команду от системного меню, то и посылать нужно сообщение WM_SYSCOMMAND, правильно сформировав параметры WParam и LParam


 
Боб   (2015-01-12 17:26) [8]

Цель - чтобы нажатие на Label1 было равносильно нажатию custom"ного пункта в системном меню окна. То есть клик по лейблу - и вызывается процедура TForm1.WMSysCommand(var Msg: TWMSysCommand);


 
brother ©   (2015-01-12 17:29) [9]

когда это лейбол стал получать фокус ввода?


 
Боб   (2015-01-12 18:52) [10]

Кликать на него можно и без фокуса.


 
MBo ©   (2015-01-12 19:25) [11]

так попробовал посылать WM_SYSCOMMAND?


 
Rouse_ ©   (2015-01-12 19:33) [12]

Удалено модератором
Примечание: Ну... тогда это лишнее :)


 
Rouse_ ©   (2015-01-12 20:11) [13]

Опс - похоже я погорячился и мы работаем с системным меню :)
Тогда еще проще:
 SendMessage(Handle, WM_SYSCOMMAND, WM_USER + 1, 0);


 
Боб   (2015-01-12 20:36) [14]

Rouse_, спасибо, код работает!



Страницы: 1 вся ветка

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

Наверх




Память: 0.49 MB
Время: 0.023 c
15-1457514823
istok20
2016-03-09 12:13
2017.01.15
где искать фрилансеров по Delphi ?


2-1422887394
Вова
2015-02-02 17:29
2017.01.15
Перенос Delphi на другой PC


15-1447436787
data
2015-11-13 20:46
2017.01.15
подскажите по my sql


2-1421840818
i2e
2015-01-21 14:46
2017.01.15
Изображения на SpeedButton


4-1281052143
korbin dalas
2010-08-06 03:49
2017.01.15
Как прочитать содержимое HDD без использования файлов?