![]() |
Re: Namen der virtuellen Tastencodes
Zitat:
|
Re: Namen der virtuellen Tastencodes
Hi,
das funktioniert leider nur, wenn ich keine weiteren Objekte auf meiner Form habe, sonst bekomme ich keinen Key zurück. Leider wird dann auch nicht die Kombination wie STRG+ALT+F angezeigt, sondern nur STRG. Immer wenn ich eine Kombination drücke soll diese auch angezeigt werden, sonst würden Hotkeys keinen sinn machen, denn man sollte schon sehen welchen Hotkey man benutzt. Zitat:
Gruß Mazel |
Re: Namen der virtuellen Tastencodes
Hallo Mazel,
vielleicht läßt sich dein Problem mit einem kleinen Kniff lösen:
Delphi-Quellcode:
Gruß Hawkeye
function ShiftKeyToStr (aShift: TShiftState; aKey: Word): string;
var SC : TShortCut; begin if (aKey in [VK_SHIFT, VK_CONTROL, VK_MENU]) then begin SC := ShortCut(Ord('A'), aShift); Result := ShortCutToText(SC); SetLength (Result, Length(Result) - 2); end else begin SC := ShortCut(aKey, aShift); Result := ShortCutToText(SC); end; end; |
Re: Namen der virtuellen Tastencodes
Hi,
danke, das funktioniert super :thumb: . Genau das was ich gebraucht habe. Nun habe ich aber eine Frage: Warum muss ich den Buchstaben A hier in dieser funktion verwenden? Ich hatte eine einfachere aber ähnliche Ansatzweise, nur hatte ich als Key den Integer-Wert NULL (0) genommen, da ist nichts passiert, soll das der Grund gewesen sein? Gruß Mazel |
Re: Namen der virtuellen Tastencodes
Man hätte auch jede andere Taste verwenden können. Wichtig ist nur, daß eine gültige Tastenkombination entsteht, damit die Umschalttasten in der richtigen Schreibweise zurückgeliefert werden. Mit einem Buchstaben ist es besonders einfach und zudem unabhängig von der Sprache.
Gruß Hawkeye |
Re: Namen der virtuellen Tastencodes
Danke für die Infos.
Es müsste doch nun auch möglich sein, das ganze rückwärts aufzuschlüsseln. Ich habe folgendes vor, hier ein Beispiel: Wenn ich in einem Editfeld die Tasten STRG, ALT und UMSCHALT drücke und keine weitere Taste, dann soll das Editfeld wieder frei werden. Momentan ist es so das bei dem gleichzeitigen drücken dieser Tasten sie dank Hawkeye219 in dem Editfeld eingetragen werden, beim loslassen allerdings sollen alle Tastenkombinanten die nur aus STRG, ALT oder UMSCHALT bestehen wieder gelsöcht werden. Folgendes habe ich probiert aber das geht nicht richtig (in OnKeyUp):
Delphi-Quellcode:
Ich hatte auch dies ausprobiert aber da kommt eine Fehlermeldung "[Fehler] Form_7.pas(297): Inkompatible Typen: 'TShiftState' und 'Enumeration'":
If (ssAlt in Shift) and (ssShift in Shift) and (ssCtrl in Shift) then EditHotkey.Text:=''
Delphi-Quellcode:
Wie kann ich das nun lösen?
If (Shift in [ssShift, ssCtrl, ssAlt]) then EditHotkey.Text:=''
Gruß Mazel |
Re: Namen der virtuellen Tastencodes
:wall: :wall: :wall: :wall:
Ich habe so eben mitbekommen, dass es eine Komponente names Hotkey auf dem Reiter Win32 (Delphi 6) gibt, die all das macht was ich brauche. Warum habe ich das nicht früher bemerkt, dann hätten wir uns die ganze Arbeit sparen können :wink: . Dadurch hat sich nun fast alles erledigt. Nun habe ich noch ein kleines Problem: Ich habe in einer ListView die Hotkeys stehen, die sollen nun durch diese Komponente geändert werden, was ich über TextToShortCut und ShortCutToText mache. Wenn ich auf einen Eintrag in der ListView klicke, soll der Hotkey in die Hotkey Komponente eingetragen werden, das Problem ist aber, dass er mit den falschen Hotky zurück liefert:
Delphi-Quellcode:
Wenn STRG + ALT + EINFG im Eintrag steht, wird mir STRG + ALT + 0 (ZEHNERTASTATUR) zurück geliefert, wo ist mein Fehler?
// beim Klick auf den Eintrag
procedure TForm7.ListViewClick(Sender: TObject); begin EditAction.Text:=ListView.Selected.Caption; EditHotkey.HotKey:=TextToShortCut(ListView.Selected.SubItems[0]); end; Gruß Mazel |
Re: Namen der virtuellen Tastencodes
Zitat:
Zu deinem Problem: die Tastenkombinationen 'Strg+Alt+Einfg' und 'Strg+Alt+0(Zehnertastatur)' unterscheiden sich (mit NUMLOCK off) nur durch die Modifier. Du wirst diese Eigenschaft von THotkey also mit abspeichern und beim Auswählen eines Listeneintrags wieder setzen müssen. Leider werden die Modifier dadurch für nachfolgende Eingaben in THotkey erzwungen. Mit einem Löschbutton gibst du dem Anwender die Möglichkeit, das Eingabefeld komplett (inklusive Modifier) zu löschen. Im folgenden Beispielcode wird die Eingabe in einer globalen Variablen gespeichert. Sehr wichtig ist die Reihenfolge der Anweisungen in den Routinen btnLoadHotkey und btnClearHotkey.
Delphi-Quellcode:
Gruß Hawkeye
var
ShortCut : TShortCut; Modifier : THKModifiers; procedure TForm1.btnSaveHotkey (Sender: TObject); begin ShortCut := HotKey1.HotKey; Modifier := HotKey1.Modifiers; end; procedure TForm1.btnLoadHotkey (Sender: TObject); begin HotKey1.HotKey := ShortCut; HotKey1.Modifiers := Modifier; end; procedure TForm1.btnClearHotkey (Sender: TObject); begin HotKey1.Modifiers := []; HotKey1.HotKey := 0; end; |
Re: Namen der virtuellen Tastencodes
Hi,
ich weis nicht wieso ich das nicht früher bemerkt habe mit der Komponente aber nun zum Thema: Wann muss ich nun die einzelnen Prozeduren ausführen? Zitat:
Gruß Mazel |
Re: Namen der virtuellen Tastencodes
Wenn du einen vom Anwender eingegebenen Hotkey speichern möchtest, mußt du die Eigenschaften Hotkey und Modifiers von THotkey sichern. Nur durch die Kombination beider Werte wird ein Hotkey eindeutig beschrieben. Im Beispielcode passiert das in der Methode btnSaveHotkey.
Nach der Auswahl eines Eintrags in der ListView müssen die mit dem Eintrag gespeicherten Werte in das THotkey-Control zurückgeschrieben werden (Routine btnLoadHotkey). Wichtig ist hier die Reihenfolge der beiden Anweisungen. Wenn du eine Tastenkombination wie 'Strg+Alt+Einfg' in das THotkey-Control überträgst, wirst du feststellen, daß bei allen folgenden Eingaben die Modifier 'Strg' und 'Alt' auch dann ergänzt werden, wenn der Anwender sie nicht benutzt. Damit der Anwender diese Modifier wieder löschen kann, habe ich den Löschbutton vorgeschlagen (Routine btnClearKey). Mir ist kein anderer Weg bekannt, die Eigenschaft Modifiers zurückzusetzen, um "normale" Eingabe wie "F1" wieder zu ermöglichen. Auch hier ist die Reihenfolge der beiden Anweisungen wichtig; sie unterscheidet sich von der beim Setzen eines Hotkeys. Gruß Hawkeye |
Alle Zeitangaben in WEZ +1. Es ist jetzt 21:33 Uhr. |
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