Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

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.


Наверх

Титульная страница Поиск, карта сайта Написать письмо