Главная страница
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.02 c
2-1432123390
Цукор5
2015-05-20 15:03
2017.01.15
Утечка?


2-1427929641
Drowsy
2015-04-02 02:07
2017.01.15
Как определить, установлены ли обновления RTL2, RTL3 на Дельфи 6?


3-1308557586
MacroDenS
2011-06-20 12:13
2017.01.15
ADO + Excel


4-1277328004
grigor
2010-06-24 01:20
2017.01.15
Как найти список всех окон у которых есть иконки в трее?


2-1432209907
Pavelnk
2015-05-21 15:05
2017.01.15
Запись в ini файл