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

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

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, поэтому сообщение и "идет в никуда".


Наверх

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