Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Низкоуровневое программирование > Win Api
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 15.07.2012, 15:14   #1
harmager
Пользователь
 
Регистрация: 24.11.2008
Сообщений: 16
По умолчанию Диалоговые системные сообщения

Доброго времени суток, уважаемые форумчане.
Встала необходимость при возникновении ошибки в программе выводить сообщение о ней с помощью функции messagebox. В диалоговом окне сообщения присутствуют две кнопки Ok и СПРАВКА. Код вызова окна сообщения представлен ниже:
Код:
 messagebox(form1.Handle,'text message','text caption',mb_help+mb_iconerror);
Проблема заключается в следующем - если во флагах функции не указывается контекст справки, как я могу вывести определённую информацию из справочной системы (информации о флаге, касающегося справки в описании данной функции я не встретил). То есть в момент возникновения ошибки появляется данное сообщение, пользователь нажимает на кнопку справка, и программа выдаёт справочную информацию о возникшей ошибке. Справка имеет формат *.CHM
harmager вне форума Ответить с цитированием
Старый 15.07.2012, 15:53   #2
ych_del
Форумчанин
 
Аватар для ych_del
 
Регистрация: 06.02.2011
Сообщений: 149
По умолчанию

Вдумчиво RTFM по событию TForm.OnHelp, которое обязательно произойдет, если ты нажмешь в мессагбоксе кнопку "Справка". Там сказано следующее (выделю самое важное):

Цитата:
THelpEvent is the type of an OnHelp event handler.

Unit
Forms

Delphi syntax:
type THelpEvent = function (Command: Word; Data: Longint; var CallHelp: Boolean): Boolean of object;

C++ syntax:
typedef bool __fastcall (__closure *THelpEvent)(Word Command, int Data, bool &CallHelp);

Description
THelpEvent includes the following parameters:

Command indicates the type of help command that was issued. It's meaning depends on the current help system. For example, when using WinHelp, Command is the command used by the WinHelp API. For details on possible commands, see the documentation provided by the developer of the application's help system. For example, if the application uses WinHelp, the possible commands are listed in the WinHelp section of the Win32 Developer's Reference.

Data provides additional data to describe the desired action by the help system. Its value depends on the value of the Command property. Typically, Data specifies a keyword or context ID. For details, see the documentation provided by the application's help system.

CallHelp is set by the event handler. If CallHelp is true when the event handler exits, the application should forward the help command to the help system. If the event handler handles the command, it sets CallHelp to false so that the application does not forward the help command to the help system.
Делаем примерно так:

Код:
function TForm1.FormHelp(Command: Word; Data: Integer;
  var CallHelp: Boolean): Boolean;
var S: string;
begin
   ShowMessage(IntToStr(Data));
end;
procedure TForm1.FormKeyUp(Sender: TObject; var Key: Word;
  Shift: TShiftState);
begin
   if Key = VK_F1 then Application.MessageBox('Проверка', 'Caption', MB_HELP);
end;
Бросаешь на форму несколько контролов и в каждом давишь F1. Видишь, что Data везде отличается. Делаешь выводы, пишешь то, что тебе нужно.
Профессиональный конвертор галлюцинаций заказчика в алгоритмическую структуру.
ych_del вне форума Ответить с цитированием
Старый 15.07.2012, 16:28   #3
harmager
Пользователь
 
Регистрация: 24.11.2008
Сообщений: 16
По умолчанию

ych_del, спасибо конечно за представленную информации, но возможно я не правильно высказал свою проблему...
Мне не нужно выводить справку при нажатии на F1. Мне нужно выводить справку, когда пользователь нажимает на кнопку СПРАВКА в окне, созданном функцией messagebox.
Я так понимаю, если в данном случае происходит событие OnHelp, значит, написав в теле данного событие определённый код, например,
Код:
function TForm1.FormHelp(Command: Word; Data: Integer;
  var CallHelp: Boolean): Boolean;
begin
form1.label1.Caption:= 'Сработал OnHelp';
end;
, я должен увидеть в метке на форме надпись "Сработал OnHelp". Однако этого не происходит. Вы со мной согласны?
harmager вне форума Ответить с цитированием
Старый 15.07.2012, 17:15   #4
volvo877
Форумчанин
 
Аватар для volvo877
 
Регистрация: 01.06.2009
Сообщений: 108
По умолчанию

Ну, допустим,
Код:
TForm1 = class(TForm)
   // ...
   { Public declarations }
   procedure WMHelp(var Message: TWMHelp); message WM_HELP;
   // ...
поймает твой WM_HELP, который вышлет кнопка из DialogBox-а. А как ты собрался различать, что показывать-то в хелпе?

Разве что
Код:
   Form1.HelpContext := 100; // Выставлять перед вызовом MessageBox-а, и ловить в WMHelp
   MessageBox(Form1.Handle,'text message','text caption',
              MB_OK or MB_HELP or MB_ICONERROR);

Последний раз редактировалось volvo877; 15.07.2012 в 17:28.
volvo877 вне форума Ответить с цитированием
Старый 16.07.2012, 07:16   #5
ych_del
Форумчанин
 
Аватар для ych_del
 
Регистрация: 06.02.2011
Сообщений: 149
По умолчанию

F1 - было использовано в качестве примера. Можешь вместо него F7 заюзать, к примеру, никто не против.
Смысл в том, что при нажатии в диалоговом окне кнопки "Справка" сработает событие Form.OnHelp, в обработчике которого тебе надо будет смотреть на параметр Data (ну, или использовать какие-то свои признаки того, про что будешь показывать справку), и в соответствии с тем, что там пришло, производить какие-либо действия.
Профессиональный конвертор галлюцинаций заказчика в алгоритмическую структуру.
ych_del вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Не редактируются диалоговые окна -_- Alovar Visual C++ 0 29.11.2011 21:07
Диалоговые окна. AnnJoy Помощь студентам 0 15.06.2011 19:16
Программа диалоговые окна BaRSyk174 Общие вопросы Delphi 4 14.09.2009 21:53
Файлы и диалоговые окна FeNiX_IU8 Помощь студентам 1 15.05.2009 20:38
Отловить движение курсора, диалоговые сообщения. Deight Общие вопросы Delphi 15 17.11.2008 11:28