![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
PostMessage [XP]
Боб © (2015-01-12 12:36:00)
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. Что тут не так?
Боб (2015-01-12 20:36:00) [1]Rouse_, спасибо, код работает!
Rouse_ (2015-01-12 20:11:00) [2]Опс - похоже я погорячился и мы работаем с системным меню :)
Тогда еще проще:
SendMessage(Handle, WM_SYSCOMMAND, WM_USER + 1, 0);
Rouse_ (2015-01-12 19:33:00) [3]Удалено модератором
Примечание: Ну... тогда это лишнее :)
MBo (2015-01-12 19:25:00) [4]так попробовал посылать WM_SYSCOMMAND?
Боб (2015-01-12 18:52:00) [5]Кликать на него можно и без фокуса.
brother (2015-01-12 17:29:00) [6]когда это лейбол стал получать фокус ввода?
Боб (2015-01-12 17:26:00) [7]Цель - чтобы нажатие на Label1 было равносильно нажатию custom'ного пункта в системном меню окна. То есть клик по лейблу - и вызывается процедура
TForm1.WMSysCommand(var Msg: TWMSysCommand);
MBo (2015-01-12 16:36:00) [8]Какая цель этого действа?
Если посылается PostMessage(Form1.Handle, WM_USER + 1, 0, 0), то принимать его можно, как и сказали, с помощью обработчика OnUserMessage(var Msg : TMessage) message WM_USER_MSG;
Если цель - принимать команду от системного меню, то и посылать нужно сообщение WM_SYSCOMMAND, правильно сформировав параметры WParam и LParam
Боб (2015-01-12 15:41:00) [9]Всё равно не пойму.
Dimka Maslov (2015-01-12 14:40:00) [10]Метод-обработчик события должен иметь единственный аргумент (любого типа), передающийся по ссылке.
Боб (2015-01-12 14:19:00) [11]А что надо писать в
procedure TForm1.OnUserMessage(var Msg: TMessage);. TMessage и TWMSysCommand несовместимы.
кгшзх (2015-01-12 13:24:00) [12]const
WM_USER_MSG = WM_USER + 1;
procedure TForm1.OnUseerMessage(Msg : TMessage) message WM_USER_MSG;
Боб (2015-01-12 13:18:00) [13]
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, 'О программе');
MBo (2015-01-12 12:50:00) [14]А как связан обработчик 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.