Вниз
Скачать: 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 вся ветка

Скачать: CL | DM;



Память: 0.47 MB
Время: 0.026 c
14-1117982374
Хинт
2005-06-05 18:39
2005.06.29
Помогите выбрать цветовое оформление сайта


14-1117390746
Ломброзо
2005-05-29 22:19
2005.06.29
"Include" в MS Word


3-1116225853
Fynjy1984
2005-05-16 10:44
2005.06.29
Нередактируемый запрос


4-1115051030
rolex
2005-05-02 20:23
2005.06.29
Как определить работает ли уже данное приложение или это его перв


14-1117778235
Layner
2005-06-03 09:57
2005.06.29
Документы нового Office: Microsoft откроет форматы




   Наверх