AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

HotKey Experimente...

Ein Thema von glkgereon · begonnen am 15. Okt 2005 · letzter Beitrag vom 11. Nov 2005
Antwort Antwort
Benutzerbild von glkgereon
glkgereon

Registriert seit: 16. Mär 2004
2.287 Beiträge
 
#1

HotKey Experimente...

  Alt 15. Okt 2005, 20:40
Hi

ich spiele im Moment etwas mit Hotkeys rum...

ich möchte drei Systemweite Hotkeys anlegen und auf diese Reagieren.

folgender Code basiert auf einem Code aus dem DF.
Die Hotkeys werden in einer Ini gespeichert
Um die HotKeys zu setzen nutze ich THotKey
Delphi-Quellcode:
procedure WMHotKey(var Msg: TWMHotKey); message WM_HOTKEY;

[.....]

procedure TForm1.WMHotKey(var Msg: TWMHotKey);
begin
  if Msg.HotKey=HKA_Reset then MI_ClpResetClick(Self)
  else if Msg.HotKey=HKA_Code then MI_ClpCodeClick(Self)
  else if Msg.HotKey=HKA_Decode then MI_ClpDecodeClick(Self);
end;

procedure TForm1.CreateHotKeys;
begin
  HKA_Reset:=GlobalAddAtom('ResetClp');
  HKA_Code:=GlobalAddAtom('CodeClp');
  HKA_Decode:=GlobalAddAtom('DecodeClp');
  RegisterHotKey(0,HKA_Reset,0,HKVK_Reset);
  RegisterHotKey(0,HKA_Code,0,HKVK_Code);
  RegisterHotKey(0,HKA_DeCode,0,HKVK_DeCode);
end;

procedure TForm1.DestroyHotKeys;
begin
  UnRegisterHotKey(0,HKA_Reset);
  GlobalDeleteAtom(HKA_Reset);
  UnRegisterHotKey(0,HKA_Code);
  GlobalDeleteAtom(HKA_Code);
  UnRegisterHotKey(0,HKA_DeCode);
  GlobalDeleteAtom(HKA_DeCode);
end;

procedure TForm1.LoadFromIni;
begin
  HKVK_Reset:=Ini.ReadInteger('HotKeys','ResetVK',0);
  HKVK_Code:=Ini.ReadInteger('HotKeys','CodeVK',0);
  HKVK_Decode:=Ini.ReadInteger('HotKeys','DecodeVK',0);
  EdtHK_Reset.HotKey:=HKVK_Reset;
  EdtHK_Code.HotKey:=HKVK_Code;
  EdtHK_Decode.HotKey:=HKVK_Decode;
end;

procedure TForm1.SaveToIni;
begin
  Ini.WriteInteger('HotKeys','ResetVK',HKVK_Reset);
  Ini.WriteInteger('HotKeys','CodeVK',HKVK_Code);
  Ini.WriteInteger('HotKeys','DecodeVK',HKVK_Decode);
  Ini.WriteInteger('HotKeys','DecodeVK',HKVK_Decode);
end;
Die Werte kommen auch ordnungsgemäß in der Ini-Datei an und werden wieder geladen, aber es passiert nichts
ist da irgendein grober Fehler drin?
»Unlösbare Probleme sind in der Regel schwierig...«
  Mit Zitat antworten Zitat
Benutzerbild von Rastaman
Rastaman

Registriert seit: 6. Jan 2005
Ort: Lübbecke
575 Beiträge
 
Turbo C++
 
#2

Re: HotKey Experimente...

  Alt 15. Okt 2005, 20:53
Ich weiß ja nich aber mit diesen Atomen da würd ich nich durchsteigen

Der erste Parameter von RegisterHotKey muss Form1.Handle sein, weil das das Fenster ist, dass die WM_HOTKEY Nachricht bekommt
Chuck Norris has counted to infinity ... twice!
  Mit Zitat antworten Zitat
CalganX

Registriert seit: 21. Jul 2002
Ort: Bonn
5.403 Beiträge
 
Turbo Delphi für Win32
 
#3

Re: HotKey Experimente...

  Alt 15. Okt 2005, 21:31
Hi,
Zitat von Gerrit89:
Ich weiß ja nich aber mit diesen Atomen da würd ich nich durchsteigen
die sind Nichts weiter, als eine systemweit eindeutige Zahl.

Wie Gerrit sagt, musst du schon das Handle des Formulars angeben, sonst landen die WM_HOTKEY-Nachrichten ja irgendwo im Nirvana.
Außerdem musst du afaik Msg.WParam überprüfen. Oops... ich sehe gerade, dass du TWMHotKey verwendest. Da bin ich mir nicht ganz sicher, aber ich schätze es wird am Handle liegen

Chris
  Mit Zitat antworten Zitat
Benutzerbild von glkgereon
glkgereon

Registriert seit: 16. Mär 2004
2.287 Beiträge
 
#4

Re: HotKey Experimente...

  Alt 15. Okt 2005, 21:39
Zitat von Chakotay1308:
Hi,
Zitat von Gerrit89:
Ich weiß ja nich aber mit diesen Atomen da würd ich nich durchsteigen
die sind Nichts weiter, als eine systemweit eindeutige Zahl.

Wie Gerrit sagt, musst du schon das Handle des Formulars angeben, sonst landen die WM_HOTKEY-Nachrichten ja irgendwo im Nirvana.
Außerdem musst du afaik Msg.WParam überprüfen. Oops... ich sehe gerade, dass du TWMHotKey verwendest. Da bin ich mir nicht ganz sicher, aber ich schätze es wird am Handle liegen

Chris
Ja gut, ok

da war ich mir sowieso nicht so ganz sicher, weil im DF stannt da Handle...und ich wusste nicht so richtig was da rein sollte...also erstmal 0

dagegen das was ich da überprüfen soll ich unverändert und steht da so

danke euch beiden!!!
»Unlösbare Probleme sind in der Regel schwierig...«
  Mit Zitat antworten Zitat
Benutzerbild von glkgereon
glkgereon

Registriert seit: 16. Mär 2004
2.287 Beiträge
 
#5

Re: HotKey Experimente...

  Alt 15. Okt 2005, 21:40
Nein, tut mir leid, hilft nix

Zitat:
Oops... ich sehe gerade, dass du TWMHotKey verwendest
gibt es ne alternative, zu der du ein funktionierendes Beispiel hast?
»Unlösbare Probleme sind in der Regel schwierig...«
  Mit Zitat antworten Zitat
CalganX

Registriert seit: 21. Jul 2002
Ort: Bonn
5.403 Beiträge
 
Turbo Delphi für Win32
 
#6

Re: HotKey Experimente...

  Alt 15. Okt 2005, 21:48
Hi,
naja... indirekt habe ich eine Alternative. Ich habe es ein wenig anders gemacht, da mein Projekt ziemlich objekt-orientiert ist. D.h. mein Hotkey hat eine eigene Klasse spendiert bekommen. Aber ich kann mal skizzieren, wie das bei mir aussieht.

Delphi-Quellcode:
// Im Konstruktur der Klasse wird ein Handle für die Klasse erzeugt und eine Nachrichten-Methode deklariert. Das sieht so aus:
fHandle := Classes.AllocateHWnd(self.MsgProc);
// Wobei fHandle das Feld für das Handle ist und MsgProc die Methode für die Nachrichten ist.
// MsgProc sieht so aus:
procedure THotkeyItem.MsgProc(var msg: TMessage);
begin
  // Nachrichtenschleifen
  if msg.Msg = WM_HOTKEY then
    if Assigned(FOnHotkey) then
      fOnHotKey(self, self.Name)
  else
    DefWindowProc(FHandle, msg.Msg, msg.WParam, msg.LParam);
end;
// fOnHotKey ist hier nur eine beliebige Methode. Dort kannst du hinschreiben was du willst und was du gerade brauchst
Ansonsten ist meine Klasse ähnlich zu dem, was du da "fabriziert" () hast. Wenn aber das jetzt auch nicht klappt oder du das nicht verstehst mit der Klasse, dann kann ich auch die ganze Klasse posten.

Chris

PS: Obiger Code ist erfolgreich in meinem Hier im Forum suchenWallpaperChanger im Einsatz.
  Mit Zitat antworten Zitat
Benutzerbild von glkgereon
glkgereon

Registriert seit: 16. Mär 2004
2.287 Beiträge
 
#7

Re: HotKey Experimente...

  Alt 10. Nov 2005, 16:10
Ich hab noch ne Frage zum Thema hotkeys...

kann ich Hotkeys reservieren die einen Teil statisch und einen Teil beliebig haben?

also zum Beispiel

Strg + Alt + Zahlentaste
»Unlösbare Probleme sind in der Regel schwierig...«
  Mit Zitat antworten Zitat
Christian Seehase
(Co-Admin)

Registriert seit: 29. Mai 2002
Ort: Hamburg
11.105 Beiträge
 
Delphi 11 Alexandria
 
#8

Re: HotKey Experimente...

  Alt 11. Nov 2005, 09:01
Moin Gereon,

Du musst jede gewünschte Tastenkombination einzeln registrieren.
Tschüss Chris
Die drei Feinde des Programmierers: Sonne, Frischluft und dieses unerträgliche Gebrüll der Vögel.
Der Klügere gibt solange nach bis er der Dumme ist
  Mit Zitat antworten Zitat
Benutzerbild von glkgereon
glkgereon

Registriert seit: 16. Mär 2004
2.287 Beiträge
 
#9

Re: HotKey Experimente...

  Alt 11. Nov 2005, 09:11
Zitat von Christian Seehase:
Moin Gereon,

Du musst jede gewünschte Tastenkombination einzeln registrieren.
Argh ^^

naja, muss wohl
»Unlösbare Probleme sind in der Regel schwierig...«
  Mit Zitat antworten Zitat
Robert Marquardt
(Gast)

n/a Beiträge
 
#10

Re: HotKey Experimente...

  Alt 11. Nov 2005, 09:17
Application.Handle duerfte am besten funktionieren. Das ist das eigentliche Hauptfenster der Applikation.
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 20:48 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz