Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Hotkey (https://www.delphipraxis.net/82942-hotkey.html)

xZise 22. Dez 2006 14:22


Hotkey
 
Ich wollte mir 4 Hotkeys registieren.
Nur dummerweise scheint es nicht zu gehen...
Delphi-Quellcode:
procedure TfrmMain.Settings1Click(Sender: TObject);
var
  sc : TShortcutArray;
  i : Integer;
  Modifiers : Uint;
  Key : Word;
begin
  sc := frmSettings.ShowModal;
  for i := 1 to High(sc) do begin
    ShortCutToHotKey(sc[i], Key, Modifiers);
    hotkeyIDs[i] := GlobalAddAtom(PChar('hk' + IntToStr(i)));
    if not RegisterHotKey(Handle, hotkeyIDs[i], Modifiers, Key) then
      Showmessage('Can''t register hotkey ' + ShortCutToText(sc[i]) + '.');
  end;              
end;

procedure ShortCutToHotKey(HotKey: TShortCut; var Key : Word; var Modifiers: Uint);
var
  Shift: TShiftState;
begin
  ShortCutToKey(HotKey, Key, Shift);
  Modifiers := 0;
  if (ssShift in Shift) then
    Modifiers := Modifiers or MOD_SHIFT;
  if (ssAlt in Shift) then
    Modifiers := Modifiers or MOD_ALT;
  if (ssCtrl in Shift) then
    Modifiers := Modifiers or MOD_CONTROL;
end;
Die Hotkey sind:
<strg> + <o>
<strg> + <s>
<strg> + <alt> + <r>
<strg> + <alt> + <c>

Sunlight7 22. Dez 2006 14:57

Re: Hotkey
 
Hallo!

Zitat:

Zitat von xZise
Nur dummerweise scheint es nicht zu gehen...

Hmm, das war ne sehr präzise Fehlermeldung :wink:

Was sagt der GetLastError?
Ich hab das kompiliert, es funktioniert ohne Fehler...

Was mir aber auffiel ist, die Hot-Keys werden erst gesetzt, wenn man das Formular frmSettings schließt (Oh Wunder :mrgreen: ).

Grüßle!

xZise 22. Dez 2006 15:50

Re: Hotkey
 
Zitat:

Zitat von Sunlight7
Was sagt der GetLastError?

Wie komme ich daran?

Zitat:

Zitat von Sunlight7
Was mir aber auffiel ist, die Hot-Keys werden erst gesetzt, wenn man das Formular frmSettings schließt (Oh Wunder :mrgreen: ).

Ja, scheint wohl so zu sein.
Und was mir auffiel, die frmSettings ist eine "Zusatzform", und frmMain bleibt erhalten (Oh Wunder :mrgreen: ).

PS: Siehe Prozedurheader ;)

[edit]Wow ;) Neue Erkenntnisse nach langen Testen (vielleicht wichtig):
Ich habe schon wo anders (beim Start des Programms) ShortCuts angelegt.
Und dort funktioniert es auf jeden fall dahingehend Problemlos, dass die Funktion "true" zurückgibt...[/edit]

xZise 23. Dez 2006 11:22

Re: Hotkey
 
Problem behoben!

Ich hatte im Header das
Delphi-Quellcode:
 message WM_HOTKEY;
vergessen :P
Jetzt funktioniert es auch alles wunderbar ;)

Sunlight7 23. Dez 2006 14:07

Re: Hotkey
 
Zitat:

Zitat von xZise
Zitat:

Zitat von Sunlight7
Was sagt der GetLastError?

Wie komme ich daran?

:shock: Das meinste jetzt aber net ernst :shock:

Edit: Nächste mal zeig auch den Quelltext, wo der Fehler drin steckt :mrgreen:

xZise 23. Dez 2006 14:34

Re: Hotkey
 
Man muss wohl alles wissen um Fragen zu stellen :(

Christian Seehase 23. Dez 2006 15:22

Re: Hotkey
 
Moin Fabian,

vielleicht wird es so deutlicher: MSDN-Library durchsuchenGetLastError ;-)

BTW:
Den Klartext eines Fehlercodes kann man sich meist so
Delphi-Quellcode:
ShowMessage(SysErrorMessage(GetLastError));
anzeigen lassen.

Sunlight7 23. Dez 2006 15:28

Re: Hotkey
 
@xZise: Hmm, weißt Du das jetzt echt net, oder wollst mich zum Narren halten?


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