AGB  ·  Datenschutz  ·  Impressum  







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

Hotkey speichern laden nutzen

Ein Thema von bluescreen25 · begonnen am 24. Okt 2007 · letzter Beitrag vom 1. Mär 2009
Antwort Antwort
bluescreen25

Registriert seit: 27. Nov 2005
Ort: Geldern
229 Beiträge
 
Delphi 7 Enterprise
 
#1

Hotkey speichern laden nutzen

  Alt 24. Okt 2007, 15:40
Habe wahrscheinlich heute ein Brett vorm Kopf....

Ich habe eine App.exe mit separater setup.exe.

Ich möchte Tastendrücke auch als Tastenkombinationen mit ALT, SHIFT etc.. vom Setup über eine ini zur App bringen.


In der alten Fassung (nur einfache Tastendrücke) habe ich im Setup das Hotkey ausgewertet und als Integer gespeichert
Delphi-Quellcode:
...
Ini.WriteInteger('Shortcuts','Shortcut_3',HotKey3.HotKey);
...
In der App dann
Delphi-Quellcode:
...
Shortcut_3 := Ini.Readinteger('Shortcuts','Shortcut_3',0);
...
sowie im FormKeyDown die Aktionen:

Delphi-Quellcode:
Shortcut_FormKeyDown(Sender: TObject; var Key: Word;Shift: TShiftState);
begin
  if Key = Shortcut_10 then
  begin
    //
  end;
end;

In der neuen Fassung bin ich wie folgt angefangen:
In der Setup habe ich Hotkey-Komponenten , die ich mit shortcutToText in eine ini bringe.

In der App lade ich die ini und will mit textToShortcut, die shortcuts wieder einbringen.
Oder muss ich dort wieder Hotkeys erstellen, in die ich mit textToShortcut einbringe ?
Es sollen keine globalen HotKeys erstellt werden, langt Programmbezogen aus.

Wie kann ich am einfachsten die Tastenkombination wieder in meine Aktionen bringen ?


gruß, bluescreen25
...und ich dachte, Delphi ist ein Programmgenerator mit nur einem Button......tzzz
  Mit Zitat antworten Zitat
bluescreen25

Registriert seit: 27. Nov 2005
Ort: Geldern
229 Beiträge
 
Delphi 7 Enterprise
 
#2

Re: Hotkey speichern laden nutzen

  Alt 16. Feb 2008, 21:10
Damit wenigstens einer geantwortet hat, hier meine funktionierende Fassung: (relevante Teile)
(Die Tasten des Ziffernblocks gehen nicht, in ShortCutToText scheint ein Bug zu sein)

Speichern von Hotkeys wie folgt:

Delphi-Quellcode:
procedure TForm1.SpeicherShortCuts;
begin
  Ini.WriteString('Shortcuts','Shortcut_1',ShortCutToText(HotKey1.HotKey));
  Ini.WriteString('Shortcuts','Shortcut_2',ShortCutToText(HotKey2.HotKey));
  Ini.WriteString('Shortcuts','Shortcut_3',ShortCutToText(HotKey3.HotKey));
end;
Laden wie folgt:

Delphi-Quellcode:
uses
 Shortcuts;

var
 Shortcut_1,Shortcut_2,Shortcut_3: TShortCut;
...
...
procedure TForm1.FormCreate(Sender: TObject);
begin
...
  SetupHotkey(self);
  LadeShortCuts;
...
end;


procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
...
  ShortCut_Unregister;
...
end;


// Hotkey aus Shortcut übernehmen
procedure TForm1.SetupHotkey(Sender: TObject);
begin
  ShortCut_SetupHotkey(Sender); //Unit Shortcuts
end;


procedure TForm1.LadeShortCuts;
begin
  Shortcut_1 := TextToShortCut(Ini.ReadString('Shortcuts','Shortcut_1',''));
  Shortcut_2 := TextToShortCut(Ini.ReadString('Shortcuts','Shortcut_2',''));
  Shortcut_3 := TextToShortCut(Ini.ReadString('Shortcuts','Shortcut_3',''));
end;


// Hotkey gedrückt
procedure TForm1.WMHotkey( var msg: TWMHotkey ) ;
begin
  ShortCut_WMHotkey(msg); //Unit Shortcuts
end;
als Globale Shortcuts einrichten und nutzen:

Delphi-Quellcode:
unit Shortcuts;
...
...
procedure ShortCut_SetupHotkey(Sender: TObject);
function SetHotkey(aHandle:THandle; HotkeyID:cardinal; Shortcut:TShortcut; AutoRegister:boolean=true):boolean;
procedure ShortCut_WMHotkey( var msg: TWMHotkey) ;
procedure ShortCut_Unregister;
...
...
const
  Hotkey_ID1 = 1;
  Hotkey_ID2 = 2;
  Hotkey_ID3 = 3;
...
...

procedure ShortCut_SetupHotkey(Sender: TObject);
begin
  SetHotkey(Form1.Handle,1,ShortCut_1);
  SetHotkey(Form1.Handle,2,ShortCut_2);
  SetHotkey(Form1.Handle,3,ShortCut_3);
end;


// Hotkey registrieren
function SetHotkey(aHandle:THandle; HotkeyID:cardinal; Shortcut:TShortcut; AutoRegister:boolean=true):boolean;
var
 Key: Word;
 Shift:TShiftstate;
 Modifiers:integer;
begin
  result:=false;
  if Shortcut = 0 then exit;

  Modifiers:=0;
  Unregisterhotkey(aHandle,HotkeyID);

  ShortCutToKey(ShortCut, Key, Shift); // unit Menus;
  if ssCtrl in Shift then Modifiers:=MOD_CONTROL;
  if ssAlt in Shift then Modifiers:=Modifiers or MOD_ALT;
  if ssShift in Shift then Modifiers:=Modifiers or MOD_SHIFT;
  if AutoRegister then
   result:=RegisterHotKey(aHandle, HotkeyID, Modifiers, Key)
  else result:=true;
end;


procedure ShortCut_WMHotkey( var msg: TWMHotkey ) ;
begin
  if msg.HotKey = Hotkey_ID1 then
  begin
   //do something
  end;
  
  if msg.HotKey = Hotkey_ID2 then
  begin
   //do something
  end;

  if msg.HotKey = Hotkey_ID3 then
  begin
   //do something
  end;
end;


procedure ShortCut_Unregister;
begin
  UnregisterHotkey(Form1.handle,Hotkey_ID1);
  UnregisterHotkey(Form1.handle,Hotkey_ID2);
  UnregisterHotkey(Form1.handle,Hotkey_ID3);
end;

Ich hoffe, ich habe nix vergessen.

Gruß, bluescreen25
...und ich dachte, Delphi ist ein Programmgenerator mit nur einem Button......tzzz
  Mit Zitat antworten Zitat
thomas2009
(Gast)

n/a Beiträge
 
#3

Re: Hotkey speichern laden nutzen

  Alt 1. Mär 2009, 16:38
Es gibt aber ein Problem beim Laden:
Delphi-Quellcode:
procedure TForm1.LadeShortCuts;
begin
  Shortcut_1 := TextToShortCut(Ini.ReadString('Shortcuts','Shortcut_1',''));
Beim Speichern

z.B. wenn die Sprache meines PC englisch ist, wie kann mein System diesen Text in ShortCut umwandern : Umsch+A oder Strg+A
Das Sytem erkennt also CTRL+A und nicht STRG+A
  Mit Zitat antworten Zitat
Phoner

Registriert seit: 8. Okt 2008
23 Beiträge
 
#4

Re: Hotkey speichern laden nutzen

  Alt 1. Mär 2009, 17:33
Wieso willst du unbedingt den Shortcut als Text abspeichern? Das mag ja zum manuellen editieren der Ini-Datei per Text-Editor einfacher sein, aber ich gehe mal davon aus, dass das eher die Ausnahme ist.
Ich speichere solche Shortcuts einfach mit WriteIntegr() weg und lese sie mit ReadInteger() wieder ein. Dann habe ich keinerlei Sprachabhängigkeiten.
  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 18:01 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