![]() |
F1 umleiten auf Webseiten = externe Hilfe
Hallo,
ich habe folgenen Programmaufbau: - MainForm mit Menü und zentralem Panel - auf das Panel werden über das Menü normale Forms geladen (Create/Show/Hide) - zusätzlich einige modale Forms Jedes Form hat einen Hilfe-Button mit dem ich eine Html-Seite aufrufe. Ich möchte, dass F1 ebenfalls die spezifische Html-Seite aufruft. Trotz (oder weil) intensivem Studiums und Suchen im Netz und den Foren will es mir nicht gelingen. Ich gebe zu ein totaler API Neuling zu sein, und alle Hooks, ShortCuts, onHelps und HotKeys etc. haben mir nicht weiter geholfen. Wie kann ich F1 abfangen? Und die Datei für das aktuelle Form/modale Form aufrufen? Gruß Süden D2007 Pro |
AW: F1 umleiten auf Webseiten = externe Hilfe
Hallo,
Zitat:
Delphi-Quellcode:
Nachtrag: Im Form die Eigenschaft KeyPreview auf True setzen
procedure TForm4.FormKeyUp(Sender: TObject; var Key: Word; Shift: TShiftState);
begin if Key = VK_F1 then Button1.Click end; Gruß |
AW: F1 umleiten auf Webseiten = externe Hilfe
Kommt nicht an bzw. wird nicht ausgelöst.
Ich glaube in meiner Konstellation wird F1 direkt an den Parent = MainForm durchgegeben. Gruß Süden |
AW: F1 umleiten auf Webseiten = externe Hilfe
Hallo,
auch die Eigenschaft KeyPreview auf True in den entsprechenden Forms gesetzt? Gruß |
AW: F1 umleiten auf Webseiten = externe Hilfe
Du musst Application onHelp abfangen. In die jeweiligen Formen schreibst Du in den Helpcontext eine Zahl. Du legst eine Help.Ini an in der die HelpContext-Nummer auf die URL der Online-Seite zeigt. Dann die Seite aufrufen.
BEISPIEL-Fragment: function TfmMain.ApplicationEvents1Help(Command: Word; {$IFnDEF NEW_XE2} Data:Integer; {$ELSE} Data:NativeInt; {$ENDIF} var CallHelp: Boolean): Boolean; Var sUrl : String; hIni : TIniFile; begin if ( Data = 0 ) and Assigned ( Screen.ActiveControl ) then Data := Screen.ActiveControl.HelpContext; If FileExists( ExtractFilePath( Paramstr(0) ) + 'help\help6.ini' ) then begin hIni := TIniFile.Create( ExtractFilePath( Paramstr(0) ) + 'help\help6.ini' ); Try sUrl := hIni.ReadString( 'HelpContext', IntToStr ( Data ), _RSOnlineHelpLink ); Finally hIni.Free; End; end else sUrl := _RSStandardOnlineHelpLink; ShellExecute(0, Nil, PChar( sUrl ), Nil, Nil, SW_NORMAL); CallHelp := False; end; |
AW: F1 umleiten auf Webseiten = externe Hilfe
Das sieht gut aus, ich werde es mal probieren.
Danke Süden |
AW: F1 umleiten auf Webseiten = externe Hilfe
Ich möchte hier noch mal auf den Tipp von Volker Z. eingehen, der evtl. ganz leicht untergegangen ist, da der Tipp er so unscheinbar ist. Ich meine das mit dem KeyPreview auf True.
Delphi-Quellcode:
F1 wird auch an das Formular durchgegeben, auch wenn eine Komponente den Fokus hat.
procedure TForm1.FormCreate(Sender: TObject);
begin KeyPreview := True; //oder im Objektinspektor end; procedure TForm1.FormKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState); begin if Key = VK_F1 then ShowMessage('Hilfe!!!'); end; |
AW: F1 umleiten auf Webseiten = externe Hilfe
Hallo,
ich möchte auch noch mal auf meinen Tipp eingehen: Die Variante funktioniert nur dann, wenn die Dialoge mit
Delphi-Quellcode:
angezeigt werden. Wird ein Dialog mit
ShowModal
Delphi-Quellcode:
aufgerufen funktioniert es ggf. nicht mehr. Dies ist dann der Fall, wenn auf dem MainForm ein Menüeintrag mit
Show
Delphi-Quellcode:
definiert wurde; jetzt hat nämlich das MainForm Vorrang.
ShortCut := F1
Ein möglicher Workaround:
Delphi-Quellcode:
Gruß
procedure TfrmMain.mnuHelpClick(Sender: TObject);
begin if Screen.ActiveForm <> Self then SendMessage (Screen.ActiveForm.Handle, WM_KEYDOWN, 0, VK_F1) else DoSomething end; |
AW: F1 umleiten auf Webseiten = externe Hilfe
Direkt auf die Helpkeywords des aktiven Controls, bzw. wenn nicht vorhanden des Form reagiert folgendes. Unit in die Uses aufnehmen, den Aufruf:
Mainform.ShowHelp(HelpString); anpassen an die eigenen Bedürfnisse. Procedure TMainform.ShowHelp(HelpString); könnte z.B. ein Shellexecute auf ein HTML-File sein.
Delphi-Quellcode:
unit helplib;
interface uses Windows, Sysutils, Classes, HelpIntfs, Forms, dialogs; type TBumHelpViewer = class(TInterfacedObject, ICustomHelpViewer) private FViewerID: Integer; FHelpManager: IHelpManager; public function GetViewerName: string; // UnderstandsKeyword -> GetHelpStrings -> ShowHelp; function UnderstandsKeyword(const HelpString: String): Integer; function GetHelpStrings(const HelpString: String): TStringList; function CanShowTableOfContents: Boolean; procedure ShowHelp(const HelpString: String); procedure ShowTableOfContents; procedure NotifyID(const ViewerID: Integer); procedure SoftShutDown; procedure ShutDown; property HelpManager: IHelpManager read FHelpManager write FHelpManager; property ViewerID: Integer read FViewerID; end; TBumHelpSelector = class(TInterfacedObject, IHelpSelector) public function SelectKeyword(Keywords: TStrings): Integer; function TableOfContents(Contents: TStrings): Integer; end; const HELP_VIEWER_NAME = 'Bummi Help Viewer'; implementation uses Mainformp; function TBumHelpViewer.CanShowTableOfContents: Boolean; begin Result := True end; function TBumHelpViewer.GetHelpStrings(const HelpString: String): TStringList; begin Result := TStringList.Create; Result.Add(HelpString); end; function TBumHelpViewer.GetViewerName: string; begin Result := HELP_VIEWER_NAME; end; procedure TBumHelpViewer.NotifyID(const ViewerID: Integer); begin FViewerID := ViewerID; end; procedure TBumHelpViewer.ShowHelp(const HelpString: String); begin Mainform.ShowHelp(HelpString); end; procedure TBumHelpViewer.ShowTableOfContents; begin end; procedure TBumHelpViewer.ShutDown; begin end; procedure TBumHelpViewer.SoftShutDown; begin end; function TBumHelpViewer.UnderstandsKeyword(const HelpString: String): Integer; begin Result := 1; end; function TBumHelpSelector.SelectKeyword(Keywords: TStrings): Integer; begin Result := 1 end; function TBumHelpSelector.TableOfContents(Contents: TStrings): Integer; begin Result := Contents.IndexOf(HELP_VIEWER_NAME); end; var HelpViewer: TBumHelpViewer; initialization HelpViewer := TBumHelpViewer.Create; inttostr(HelpIntfs.RegisterViewer(HelpViewer, HelpViewer.FHelpManager)); (HelpViewer.FHelpManager as IHelpSystem).AssignHelpSelector(TBumHelpSelector.Create); end. |
AW: F1 umleiten auf Webseiten = externe Hilfe
Delphi (bzw. die VCL/RTL) hat doch hier ein Interface definiert das man "einfach" implementieren müsste damit man ein eigenes Hilfesystem integrieren könnte.
![]() |
Alle Zeitangaben in WEZ +1. Es ist jetzt 02:46 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz