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

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

Перехват конекстной F1


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

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

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

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


Eraser   (2005-05-08 12:37:00) [1]

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

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


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

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


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

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

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-04 13:28:00) [4]

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


Cobalt   (2005-05-04 13:08:00) [5]

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


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

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


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

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


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

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


Наверх

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