AGB  ·  Datenschutz  ·  Impressum  







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

HotKey-Registrierung

Ein Thema von devnull · begonnen am 21. Apr 2004 · letzter Beitrag vom 21. Apr 2004
Antwort Antwort
Benutzerbild von devnull
devnull

Registriert seit: 5. Okt 2003
362 Beiträge
 
Delphi 7 Personal
 
#1

HotKey-Registrierung

  Alt 21. Apr 2004, 20:02
Hi,
ich möchte mit einem Programm mit ShortCuts andere Programme usw. öffnen. Also habe ich zu Testzwcken Code aus DP benutzt.
Das Erstellen eines ShortCuts funktioniert auch einwandfrei; sobald ich aber den HotKey wieder entfernen will (siehe unten,
'UNREGISTER') funktioniert das nicht alles.


Delphi-Quellcode:
function ConvertPascalShortCut(const p_scIN : TShortCut) : TcsWinHotKey;
const
  _iModifier : array [0..7] of integer = (
      0,
      MOD_SHIFT,
      MOD_CONTROL,
      MOD_SHIFT or MOD_CONTROL,
      MOD_ALT,
      MOD_SHIFT or MOD_ALT,
      MOD_CONTROL or MOD_ALT,
      MOD_SHIFT or MOD_CONTROL or MOD_ALT
      );

begin
  Result.dwModifier := p_scIN;
  // Die für Modifier entscheidenden Stellen herausfiltern
  Result.dwModifier := Result.dwModifier and $0000FF00;
  // an die richtige Stelle schieben
  Result.dwModifier := Result.dwModifier shr 13;
  // und den richtigen Modifier aus der Tabelle holen
  Result.dwModifier := _iModifier[Result.dwModifier];
  // Virtual Key herausfiltern
  Result.dwVK := p_scIN and $000000FF;
end;

procedure create_hotkey;
var whkWork : TcsWinHotKey;
begin
  whkWork := ConvertPascalShortCut(Hotkey1.HotKey);
  RegisterHotKey(Handle, sc_ct, whkWork.dwModifier,whkWork.dwVK);

  Memo1.Lines.Add(programm_link); // Speichert Programm_link in Memo
  Memo1.Lines.Add(ShortCutToText (Hotkey1.HotKey)); // Speichert HotKey in Memo
end;
Delphi-Quellcode:
procedure unregister;
var s2 : string;
begin
  // Die registrierten HotKeys (z.Bsp: STRG-A) sind ja in dem Memo gespeichert
  // s2 definiert fragliches das HotKey
  s2 := Memo1.Lines[..];
  UnRegisterHotKey(FShortCut.Handle, TextToShortCut (s2));
end;
Wie kann ich denn jetzt den HotKey wieder entfernen?
Kann mir da jemand helfen ?

mfg
devnull
-- Never change a running system --
  Mit Zitat antworten Zitat
Christian Seehase
(Co-Admin)

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

Re: HotKey-Registrierung

  Alt 21. Apr 2004, 20:12
Moin devnull,

bei UnRegisterHotkey werden das Handle auf das Fenster für den der Hotkey registriert wurde, und die ID des Hotkeys übergeben.
Um also einen einmal Registrierten Hotkey wieder zu entfernen brauchst Du nur die ersten beiden Parameter, die Du bei RegisterHotkey verwendet hast (in Deinem Source Handle und sc_ct).
Die Daten aus dem Memo helfen Dir da nicht.
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 devnull
devnull

Registriert seit: 5. Okt 2003
362 Beiträge
 
Delphi 7 Personal
 
#3

Re: HotKey-Registrierung

  Alt 21. Apr 2004, 20:15
Aso, stimmt.
sc_ct ist ja sowas wie ne ID (integer) für den Hotkey. Da ich ja mehrere HotKeys mit
dem Prog registrieren möchte, hol ich mir den fraglichen HotKey aus dem Memo und suche
mir dann die sc_ct-ID ?!
-- Never change a running system --
  Mit Zitat antworten Zitat
Christian Seehase
(Co-Admin)

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

Re: HotKey-Registrierung

  Alt 21. Apr 2004, 20:27
Moin devnull,

wenn die Möglichkeit besteht das Memo durch eine Listbox zu ersetzen, könntest Du die Zeilen mit den Hotkeys mittels AddObject hinzufügen, wobei als "Objekt" die ID des Keys gespeichert wird.

ListBox1.Lines.AddObject(ShortCutToText (Hotkey1.HotKey),TObject(sc_ct)); Mit IndexOf kannst Du dann die jeweilige Zeile finden, und aus der Eigenschaft Objects die ID auslesen, die zu dem Key gehört.
z.B. so:

Delphi-Quellcode:
var
  iIndex : integer;

begin
  iIndex := ListBox1.Lines.IndexOf('STRG-A');
  if iIndex = -1 then exit;
  UnRegisterHotkey(Handle,integer(ListBox1.Items.Objects[iIndex]));
end;
Mit Memo bzw. Richedit Lines funktioniert das leider nicht, da hier bei AddObject nichts zusätzlich gespeichert wird.
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
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:40 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