Delphi-PRAXiS
Seite 2 von 3     12 3      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Globaler HotKey/Shortcut - SysHotKey.pas (https://www.delphipraxis.net/37139-globaler-hotkey-shortcut-syshotkey-pas.html)

-Volle- 9. Jan 2005 21:20

Re: Globaler HotKey/Shortcut - SysHotKey.pas
 
ne ich wuerd sagen so:

Delphi-Quellcode:
WindowProc:=MyWindowProc;
Hotkeys[0].Key:=Lo(x); // Ascii Code von Alt
Hotkeys[0].Modify:=0;
inc(Hotkeys[0].Modify,MOD_Shift); // Ob Shift , Alt, STRG gedrueckt sein soll
aber mal ne gegenfrage: wann drueckst du shift+alt? aber zu dem beispiel hab ich leider keine ahnung ... :> tut mir sry

Aike 10. Jan 2005 15:28

Re: Globaler HotKey/Shortcut - SysHotKey.pas
 
Ich möchte zum Beispiel "Shift+Alt+L" als HotKey benutzen :stupid:

-Volle- 10. Jan 2005 16:50

Re: Globaler HotKey/Shortcut - SysHotKey.pas
 
uh, das is schwer und entzieht sich meiner kenntnis. ... sry, entweder du probierst es aus, so wie dus gemint hast ( MOD_CHIFT + MOD_ALT) ... oder ... ka...

warum wilslt du so einen schweren hotkey benutzen ?

Aike 10. Jan 2005 16:57

Re: Globaler HotKey/Shortcut - SysHotKey.pas
 
Na ja, ich will meinem User eine große Vielfalt bieten :-)

Aike 16. Jan 2005 08:54

Re: Globaler HotKey/Shortcut - SysHotKey.pas
 
Ja, hm, das Problem ist, dass ich nicht jedem HotKey eine eigene Prozedur zum Ausführen mitgeben kann. Es wäre schön, wenn ich 'ne Variable übergeben könnte :oops:

Jelly 16. Jan 2005 09:49

Re: Globaler HotKey/Shortcut - SysHotKey.pas
 
Hallo,

interessiert hab ich das hier verfolgt, aber irgendwie krieg ich das nicht ans Laufen. Ich hab hier mal den gesamten Code nochmals zusammengefasst:
Delphi-Quellcode:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs;


type
  HkI=Record
    Key:tShortcut;
    Modify:Cardinal;
    Interval:Word;
    Notify:String;
  end ;

  TForm1 = class(TForm)
    procedure FormCreate(Sender: TObject);
    procedure FormDestroy(Sender: TObject);
  private
    { Private-Deklarationen }
    procedure MyWindowProc(var Message:TMessage);
  public
    { Public-Deklarationen }
  end;

var
  Form1: TForm1;
  HotKeys:array[0..2]of HKI;

implementation

{$R *.dfm}

{ TForm1 }

procedure TForm1.MyWindowProc(var Message: TMessage);
var notify:string;
begin
   notify:='';
   if Message.Msg=WM_Hotkey Then begin
     SetTimer(Self.Handle,Message.WParam,Hotkeys[Message.WParam-$BFF0].Interval*1000,nil);
     SendMessage(GetActiveWindow,WM_KEYDOWN,Hotkeys[Message.WParam-$BFF0].Modify,Hotkeys[Message.WParam-$BFF0].Key);
     SendMessage(GetActiveWindow,WM_KEYUP,Hotkeys[Message.WParam-$BFF0].Modify,Hotkeys[Message.WParam-$BFF0].Key);
     notify:='';
   end
   else if Message.Msg=WM_TIMER Then Begin
    if HotKeys[Message.WParam-$BFF0].Notify<>'' Then
     begin
      notify:='';
      notify:=HotKeys[Message.WParam-$BFF0].Notify;
      end;
    KillTimer(Self.Handle,Message.WParam);
   end
   else WndProc(Message);
   if sametext(notify,'bla') then
   Showmessage('Taste gedrückt');

   notify:='';
end;


procedure TForm1.FormCreate(Sender: TObject);
begin
      WindowProc:=MyWindowProc;
      Hotkeys[0].Key:=Lo(97); // Ascii Code der zu drueckenden taste, bsp 'a'
      Hotkeys[0].Modify:=0;
      inc(Hotkeys[0].Modify,MOD_CONTROL); // Ob Shift , Alt, STRG gedrueckt sein soll
      Hotkeys[0].Notify:='bla'; // die msg, die beim tastendruck uebergeben wird
      RegisterHotKey(Self.Handle,$BFF0+0,Hotkeys[0].Modify,Hotkeys[0].Key);
end;

procedure TForm1.FormDestroy(Sender: TObject);
begin
     UnregisterHotKey(Self.Handle,$BFF0+0);

end;

end.
Der Teil in MyWindowProc
Delphi-Quellcode:
if Message.Msg = WM_HotKey then begin
wird nie ausgeführt?

Hab ich da was vergessen :wiejetzt:

Jelly 16. Jan 2005 10:22

Re: Globaler HotKey/Shortcut - SysHotKey.pas
 
OK, jetzt klappts. Ich hatte als Ascii Code 97 definiert (a), statte 65 (A). Das klappt jetzt also.

Weiß einer wie ich die F-Tasten definieren kann?

-Volle- 17. Jan 2005 16:25

Re: Globaler HotKey/Shortcut - SysHotKey.pas
 
mach mal ein edit und schreib in die OnKeydown event das hier rein:

Delphi-Quellcode:
showmessage(inttostr(key));
dann kommt ein popup mit dem ascii-code ... F1 is z.B. 112 wenn ich mich nich irre... :>

@ Aike. .. du kannst doch den parameter "notify" aendern ...

bei jeder taste ne andere notify-msg, dann kannst du damit arbeiten ... ( oder hab ichs jetzt verrafft ?)

Aike 7. Feb 2005 23:17

Re: Globaler HotKey/Shortcut - SysHotKey.pas
 
Das mit Notify klappt ganz gut!

Aber irgendwie kann ich nur einen HotKey definieren. Wenn ich ...
Delphi-Quellcode:
begin
  WindowProc:=MyWindowProc;
  Hotkeys[1].Key:=Lo(65); // Ascii Code der zu drueckenden taste
  Hotkeys[1].Modify:=0;
  inc(Hotkeys[1].Modify,MOD_Alt); // Ob Shift , Alt, STRG gedrueckt sein soll
  Hotkeys[1].Notify:='string'; // die msg, die beim tastendruck uebergeben wird
  RegisterHotKey(Self.Handle,$BFF0+0,Hotkeys[1].Modify,Hotkeys[1].Key);
end;
das so mache, passiert einfach gar nix :(

-Volle- 7. Feb 2005 23:26

Re: Globaler HotKey/Shortcut - SysHotKey.pas
 
RegisterHotKey(Self.Handle,$BFF0+1,Hotkeys[1].Modify,Hotkeys[1].Key);

so düerfte es gehen


Alle Zeitangaben in WEZ +1. Es ist jetzt 09:23 Uhr.
Seite 2 von 3     12 3      

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