Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi THotkey wird nicht erkannt (https://www.delphipraxis.net/59652-thotkey-wird-nicht-erkannt.html)

Lindworm 26. Dez 2005 16:04


THotkey wird nicht erkannt
 
Hallo, ich benötige für ein Tool eine Hotkeyfunktion, welche bisher so aussieht:

Delphi-Quellcode:
uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, hotkey, Shellapi, ComCtrls;

type
  TForm1 = class(TForm)
    DemoHotKey: THotKey;

  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

var
  Form1: TForm1;

implementation
{$R *.nfm}

procedure EvtHotkey(Sender: TObject; Name: string);
begin
  if Name = 'Demosave' then
   { Save_demo(); }
end;

procedure erzeugen;
var
  fHKManager: THotkeyManager;
begin
  fHKManager := THotkeyManager.Create;
  [b]fHKManager.Hotkeys['Demosave'].Hotkey := DemoHotKey.HotKey; // <--das mag er irgendwie nicht [/b]
  fHKManager.Hotkeys['Demosave'].Hotkey := HKey; // HKey ist vom Typ TShortCut
  fHKManager.Hotkeys['Demosave'].OnHotkey := EvtHotkey;
  fHKManager.Hotkeys['Demosave'].RegisterHotkey;
end;


die unit hotkey stammt von Christopher aka Chakotay und der bereich mit dem fHKManager sieht so aus:

Delphi-Quellcode:
THotkeyManager = class(TObject)
  private
    fCollection: TmxJsCollection;
    function GetHotkeys(const Name: string): THotkeyItem;
  public
    constructor Create;
    destructor Destroy; override;

    property Collection: TmxJsCollection read fCollection;
    property Hotkeys[const Name: string]: THotkeyItem read GetHotkeys;

    function AddHotkey(Name: string; Hotkey: TShortCut; RegisterHK: boolean = true): integer;
    procedure DeleteHotkey(Name: string); overload;
    procedure DeleteHotkey(Index: integer); overload;
  end;
Das Problem ist jetzt, dass ich eine Komponente THotKey mit dem Namen DemoHotKey hinzugefügte habe aber der Debugger meint, dass "DemoHotKey" nicht deklariert ist :-/
Kann mir jemand sagen, wo mein Fehler liegt? :mrgreen:

CalganX 26. Dez 2005 16:09

Re: THotkey wird nicht erkannt
 
Hi,
du musst deine Prozeduren, die du hast als Methoden des Formulars deklarieren oder der Prozedur sagen, dass die Komponente auf deinem Formular liegt.

Bei ersterem sieht das so aus (Änderung fett hervorgehoben):
Code:
uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, hotkey, Shellapi, ComCtrls;

type
  TForm1 = class(TForm)
    DemoHotKey: THotKey;

  private
    [b]procedure EvtHotkey(Sender: TObject; Name: string);[/b]
  public
    { Public-Deklarationen }
  end;

var
  Form1: TForm1;

implementation
{$R *.nfm}

procedure [b]TForm1[/b].EvtHotkey(Sender: TObject; Name: string);
begin
  if Name = 'Demosave' then
   { Save_demo(); }
end;

procedure [b]TForm1.[/b]erzeugen;
var
  fHKManager: THotkeyManager;
begin
  fHKManager := THotkeyManager.Create;
  fHKManager.Hotkeys['Demosave'].Hotkey := DemoHotKey.HotKey; // <--das mag er irgendwie nicht
  fHKManager.Hotkeys['Demosave'].Hotkey := HKey; // HKey ist vom Typ TShortCut
  fHKManager.Hotkeys['Demosave'].OnHotkey := EvtHotkey;
  fHKManager.Hotkeys['Demosave'].RegisterHotkey;
end;
Die andere Möglichkeit sieht so aus:
Code:
uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, hotkey, Shellapi, ComCtrls;

type
  TForm1 = class(TForm)
    DemoHotKey: THotKey;

  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

var
  Form1: TForm1;

implementation
{$R *.nfm}

procedure EvtHotkey(Sender: TObject; Name: string);
begin
  if Name = 'Demosave' then
   { Save_demo(); }
end;

procedure erzeugen;
var
  fHKManager: THotkeyManager;
begin
  fHKManager := THotkeyManager.Create;
  fHKManager.Hotkeys['Demosave'].Hotkey := [b]Form1.[/b]DemoHotKey.HotKey; // <--das mag er irgendwie nicht
  fHKManager.Hotkeys['Demosave'].Hotkey := HKey; // HKey ist vom Typ TShortCut
  fHKManager.Hotkeys['Demosave'].OnHotkey := EvtHotkey;
  fHKManager.Hotkeys['Demosave'].RegisterHotkey;
end;
(Statt Form1 kannst du auch TForm1 nehmen, für dich (!) sollte es da keinen Unterschied geben)

Chris


Alle Zeitangaben in WEZ +1. Es ist jetzt 17:40 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