AGB  ·  Datenschutz  ·  Impressum  







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

Namen der virtuellen Tastencodes

Ein Thema von Mazel · begonnen am 4. Aug 2006 · letzter Beitrag vom 6. Aug 2006
Antwort Antwort
Seite 2 von 3     12 3      
Benutzerbild von Flocke
Flocke

Registriert seit: 9. Jun 2005
Ort: Unna
1.172 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#11

Re: Namen der virtuellen Tastencodes

  Alt 5. Aug 2006, 09:53
Zitat von xaromz:
Blöderweise mag mich allerdings die Alt-Taste nicht.
Dafür musst du die Meldung WM_SYSKEYDOWN nehmen (hat dieselben Parameter).
Volker
Besucht meine Garage
Aktuell: RtfLabel 1.3d, PrintToFile 1.4
  Mit Zitat antworten Zitat
Benutzerbild von Mazel
Mazel

Registriert seit: 11. Nov 2005
Ort: Leipzig
831 Beiträge
 
#12

Re: Namen der virtuellen Tastencodes

  Alt 5. Aug 2006, 09:59
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 von Mazel:
Nur bei folgender Version bekomme ich die Namen in das Editfeld mit dem Problem das es doppelt hinein geschrieben wird:
Delphi-Quellcode:
procedure TForm1.Edit1KeyDown(Sender: TObject; var Key: Word; Shift: TShiftState);
var
  TempShortCut: TShortCut;

begin
  TempShortCut:=ShortCut(Key, Shift);
  EditHotkey.Text:=ShortCutToText(TempShortCut);
end;
Weis jemand wo die Fehler liegen?
Wenn das nicht mehr doppelt hineingeschrieben werden würde, wär das die optimale Lösung für mein Problem.

Gruß
Mazel
Marcel Jänicke
www.mj-software.net
  Mit Zitat antworten Zitat
Hawkeye219

Registriert seit: 18. Feb 2006
Ort: Stolberg
2.227 Beiträge
 
Delphi 2010 Professional
 
#13

Re: Namen der virtuellen Tastencodes

  Alt 5. Aug 2006, 10:51
Hallo Mazel,

vielleicht läßt sich dein Problem mit einem kleinen Kniff lösen:

Delphi-Quellcode:
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;
Gruß Hawkeye
  Mit Zitat antworten Zitat
Benutzerbild von Mazel
Mazel

Registriert seit: 11. Nov 2005
Ort: Leipzig
831 Beiträge
 
#14

Re: Namen der virtuellen Tastencodes

  Alt 5. Aug 2006, 12:22
Hi,

danke, das funktioniert super . 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
Marcel Jänicke
www.mj-software.net
  Mit Zitat antworten Zitat
Hawkeye219

Registriert seit: 18. Feb 2006
Ort: Stolberg
2.227 Beiträge
 
Delphi 2010 Professional
 
#15

Re: Namen der virtuellen Tastencodes

  Alt 5. Aug 2006, 13:27
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
  Mit Zitat antworten Zitat
Benutzerbild von Mazel
Mazel

Registriert seit: 11. Nov 2005
Ort: Leipzig
831 Beiträge
 
#16

Re: Namen der virtuellen Tastencodes

  Alt 5. Aug 2006, 17:56
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):
If (ssAlt in Shift) and (ssShift in Shift) and (ssCtrl in Shift) then EditHotkey.Text:='' Ich hatte auch dies ausprobiert aber da kommt eine Fehlermeldung "[Fehler] Form_7.pas(297): Inkompatible Typen: 'TShiftState' und 'Enumeration'":
If (Shift in [ssShift, ssCtrl, ssAlt]) then EditHotkey.Text:='' Wie kann ich das nun lösen?

Gruß
Mazel
Marcel Jänicke
www.mj-software.net
  Mit Zitat antworten Zitat
Benutzerbild von Mazel
Mazel

Registriert seit: 11. Nov 2005
Ort: Leipzig
831 Beiträge
 
#17

Re: Namen der virtuellen Tastencodes

  Alt 5. Aug 2006, 18:38


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 .

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:
// beim Klick auf den Eintrag
procedure TForm7.ListViewClick(Sender: TObject);
begin
 EditAction.Text:=ListView.Selected.Caption;
 EditHotkey.HotKey:=TextToShortCut(ListView.Selected.SubItems[0]);
end;
Wenn STRG + ALT + EINFG im Eintrag steht, wird mir STRG + ALT + 0 (ZEHNERTASTATUR) zurück geliefert, wo ist mein Fehler?

Gruß
Mazel
Marcel Jänicke
www.mj-software.net
  Mit Zitat antworten Zitat
Hawkeye219

Registriert seit: 18. Feb 2006
Ort: Stolberg
2.227 Beiträge
 
Delphi 2010 Professional
 
#18

Re: Namen der virtuellen Tastencodes

  Alt 5. Aug 2006, 19:42
Zitat von Mazel:
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.
Nach deinem vorletzten Beitrag wollte ich dir genau diese Komponente vorschlagen, aber mit deinem letzten Beitrag bist du mir zuvorgekommen.

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:
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;
Gruß Hawkeye
  Mit Zitat antworten Zitat
Benutzerbild von Mazel
Mazel

Registriert seit: 11. Nov 2005
Ort: Leipzig
831 Beiträge
 
#19

Re: Namen der virtuellen Tastencodes

  Alt 5. Aug 2006, 19:50
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 von Hawkeye219:
Mit einem Löschbutton gibst du dem Anwender die Möglichkeit, das Eingabefeld komplett (inklusive Modifier) zu löschen.
Wie meinst du das? Löschen wollte ich keinen Hotkey.

Gruß
Mazel
Marcel Jänicke
www.mj-software.net
  Mit Zitat antworten Zitat
Hawkeye219

Registriert seit: 18. Feb 2006
Ort: Stolberg
2.227 Beiträge
 
Delphi 2010 Professional
 
#20

Re: Namen der virtuellen Tastencodes

  Alt 5. Aug 2006, 20:10
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
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 3     12 3      


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 01:32 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