Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 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.053 c
4-1279284463
POP
2010-07-16 16:47
2017.01.15
Есть ли смысл (сейчас) в Win_Inet_API?


2-1429690912
Token
2015-04-22 11:21
2017.01.15
Class functions


2-1423545320
i2e
2015-02-10 08:15
2017.01.15
VK_ESCAPE и VK_E


15-1448227801
Юрий
2015-11-23 00:30
2017.01.15
С днем рождения ! 23 ноября 2015 понедельник


15-1457038707
Германн
2016-03-03 23:58
2017.01.15
Runtime packages





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский