Главная страница
    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.05 c
2-1424681725
Эрнест
2015-02-23 11:55
2017.01.15
URLEncodeReservedChars


15-1451856604
Юрий
2016-01-04 00:30
2017.01.15
С днем рождения ! 4 января 2016 понедельник


2-1427465762
Token
2015-03-27 17:16
2017.01.15
Как задать имя файла компиляции


2-1422590261
Drowsy
2015-01-30 06:57
2017.01.15
Message методы


15-1453141152
RusSun
2016-01-18 21:19
2017.01.15
Файлы со старого сайта





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский