![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
MessageBox + MB_HELP
{RASkov} © (2008-02-20 00:05:00)Реально ли поймать нажатие кнопки "Справка" в таком варианте кода:
program Project1;
uses Windows;
begin
case MessageBox( 0,'Text', 'Кэпшен', MB_YESNOCANCEL or MB_HELP or MB_SYSTEMMODAL) of
idYes: MessageBox(0, 'Pressed Yes', 'Кэпшен', 0);
idNo: MessageBox(0, 'Pressed No', 'Кэпшен', 0);
else MessageBox(0, 'Pressed Cancel', 'Кэпшен', 0);
end;
end.
Т.е. сообщение WM_HELP "ушло в никуда"?
Конкретно в моем случае хотелось бы поймать нажатие "Справка" и закрыть данное сообщение с вызовом процедуры, например, DoHelp;
{RASkov} (2008-02-20 02:18:00) [1]> [4] чувак (20.02.08 02:16)
:) У меня тоже :)
Но я вот так сделал:
program Project1;
uses Windows;
procedure DoHelp(var lpHelpInfo: THelpInfo);
begin
MessageBox(0, 'Pressed HELP', 'Кэпшен', MB_SYSTEMMODAL);
end;
var Msg: TMSGBOXPARAMSW; Res: LongBool;
begin
Msg.cbSize:= SizeOf(Msg);
Msg.hwndOwner:= 0;
Msg.hInstance:= hInstance;
Msg.lpszText:= 'Сообщение с кнопкой "Справка"';
Msg.lpszCaption:= 'Кэпшен';
Msg.dwStyle:= MB_YESNOCANCEL or MB_HELP or MB_DEFBUTTON3 or MB_SYSTEMMODAL;
Msg.lpszIcon:= nil;
Msg.dwContextHelpId:= 0;
Msg.lpfnMsgBoxCallback:= DoHelp;
Msg.dwLanguageId:= LANG_RUSSIAN;
Res:=MessageBoxIndirectW(Msg);
if Res then case Integer(Res) of
IDYES: MessageBox(0, 'Pressed YES', 'Кэпшен', MB_SYSTEMMODAL);
IDNO: MessageBox(0, 'Pressed NO', 'Кэпшен', MB_SYSTEMMODAL);
else MessageBox(0, 'Pressed CANCEL', 'Кэпшен', MB_SYSTEMMODAL);
end;
end.
вроде работает )
> [3] guav © (20.02.08 00:53)
Спасибо.
чувак (2008-02-20 02:16:00) [2]У меня MessageBoxIndirect почему-то вместо integer возвращает boolean o_0
guav (2008-02-20 00:53:00) [3]MessageBoxIndirect
{RASkov} (2008-02-20 00:50:00) [4]> [1] чувак (20.02.08 00:34)
> В первом параметре MessageBox нужно указать хендл окна,
> которому будет посылаться сообщение WM_HELP.
> У тебя 0, поэтому сообщение и "идет в никуда".
Да это я знаю.... :( Походу я просто туплю....
Нет у меня ни одного оконного объекта.... поэтому и - ноль - первым параметром...
Получается в данном случае походу никак :(
Тогда вот такой вопрос:
Если примерный "аналог" данной функции(MessageBox) написать на АПИ - кода много будет? :)
Собственно что нужно от показываемого окна:
одно текстовое поле
четыре кнопки
при нажатии которых, закрывалось бы окошко с результатом типа Integer...
ЗЫ Эх.. апи, апи...( Буду сейчас перебирать примеры от Dib@zol'а :)
чувак (2008-02-20 00:34:00) [5]В первом параметре MessageBox нужно указать хендл окна, которому будет посылаться сообщение WM_HELP.
У тебя 0, поэтому сообщение и "идет в никуда".