Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2005.06.29;
Скачать: CL | DM;

Вниз

Перехват конекстной F1   Найти похожие ветки 

 
Алексей Петухов   (2005-05-04 06:22) [0]

Здравствуйте, уважаемые мастера.
Необходима помошь или совет.

Есть необходимость в перехвате события "нажатие <F1>". Т.е. получения значения "HelpContext" контрола на котором была нажата "F1". И затем, при каких-то условиях, "не пустить" сообщение дальше (что-бы Хелп по умолчанию не вылезал), или оставить как есть  (что-бы вылез).

Заранее благодарю за помощь.


 
Алексей Петухов   (2005-05-04 09:05) [1]

Соображения имеются?


 
КиТаЯц ©   (2005-05-04 10:07) [2]

Честно говоря не пойму зачем это надо... Горячих клавиш не хватает? ;)
Соображения:
У Application, как и у tForm есть событие OnHelp. "Какими-то условиями" переопредели обработчик собития.


 
Алексей Петухов   (2005-05-04 12:42) [3]

Мне надо для всего приложения.


 
Cobalt ©   (2005-05-04 13:08) [4]

2 Алексей Петухов
А какова цель данной манипуляции?


 
Алексей Петухов   (2005-05-04 13:28) [5]

Цель такова:
есть в БД табличка с текстами "горячей" справки, которую заполняет администратор. И если пользователь жмет в клиенской части на f1 и "горячая" справка имеется, то от видит ее, иначе вызывается стандартный файл справки для текущего контекста.


 
КиТаЯц ©   (2005-05-04 15:59) [6]

Вот чего-то тут навоял...

procedure TForm1.ApplicationEventsShortCut(var Msg: TWMKey; var Handled: Boolean);
begin
 if (Msg.CharCode = VK_F1) then DoHelpNow(Self, 0, 2);
end;

procedure TForm1.DoHelpNow(Sender: TObject; ContextFrom: integer = 0; ContextTo: integer = 1);
 var HCon: Integer;
   CurControl: TWinControl;
   NowFormActive: tForm;
   i: Integer;
begin
NowFormActive:= Application.MainForm;
 for I:= 0 to Application.ComponentCount-1 do begin
   //showmessage (Application.Components[i].Name);
   if (Application.Components[i] is TForm)
     then begin
       if tForm(Application.Components[i]).Active
         then begin
           NowFormActive:= tForm(Application.Components[i]);
           //showmessage(NowFormActive.Caption);
           break;
         end;
     end;
 end;

 CurControl := NowFormActive.ActiveControl;
 HCon:= CurControl.HelpContext;
 //showmessage(inttostr(CurControl.HelpContext)+" | "+CurControl.Name);
 if (HCon in [ContextFrom..ContextTo])
   then begin
     Application.HelpFile:="Standart.hlp";
     showmessage("Типа вызвали стандартную справку");
   end
   else begin
     Application.HelpFile:= "";
     showmessage("Типа вызвали админскую справку");
     //...
   end;

end;

procedure TForm1.FormCreate(Sender: TObject);
begin
 Application.OnShortCut:= ApplicationEventsShortCut;
end;


На гениальность не претендую, да и доделывать еще надо. Может на "правильные" мысли натолкнет...


 
Алексей Петухов   (2005-05-08 09:34) [7]

Спасибо. Супер!
Толчек хороший :-)
Будем мысль разввать.


 
Eraser ©   (2005-05-08 12:37) [8]

Алексей Петухов

Очень советую следующий набор компонентов
http://www.ec-software.com/index.html



Страницы: 1 вся ветка

Текущий архив: 2005.06.29;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.032 c
3-1116490231
msguns
2005-05-19 12:10
2005.06.29
Как задать регистр в ACCESS


1-1117971226
Alex77777
2005-06-05 15:33
2005.06.29
Как удалить в текстовом файле разрыв страницы !?


8-1109794554
starlit
2005-03-02 23:15
2005.06.29
как поменять изображение у BitBtn? взять его из ImageList ?


3-1115984786
IGray
2005-05-13 15:46
2005.06.29
Как узнать, было ли к таблице применено ApplyRange?


14-1117908515
Udaff
2005-06-04 22:08
2005.06.29
проблема с печатью