Форум: "Начинающим";
Текущий архив: 2017.01.15;
Скачать: [xml.tar.bz2];
Вниз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;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.05 c