Форум: "WinAPI";
Текущий архив: 2005.06.29;
Скачать: [xml.tar.bz2];
ВнизПерехват конекстной 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 вся ветка
Форум: "WinAPI";
Текущий архив: 2005.06.29;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.062 c