Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   THotKey mit Space behandlung (https://www.delphipraxis.net/158924-thotkey-mit-space-behandlung.html)

eholzer 8. Mär 2011 09:37

THotKey mit Space behandlung
 
Hallo,

kennt jemand THotKey Komponente, die mit Space umgehen kann, z.B. Ctrl+Space sollte möglich zu definieren sein.

Gruß
Eric

Bummi 8. Mär 2011 10:30

AW: THotKey mit Space behandlung
 
Actions mit SecondaryShortcut = STRG+LEERTASTE
oder allgemeiner (uses menus)
Delphi-Quellcode:
myAction.SecondaryShortCuts.Add(ShortCutToText(ShortCut(Ord(' '), [ssctrl])));

eholzer 8. Mär 2011 11:30

AW: THotKey mit Space behandlung
 
Es geht um die Definition von Shortcuts. Der Anwender soll sie selber definieren können. Leider THotKey erlaub nicht die Leertaste zu nutzen.

himitsu 8. Mär 2011 11:42

AW: THotKey mit Space behandlung
 
Es gibt keinen ShortCut/Tastencode für Strg+Space, also gibt es auch keinen HotKey.

Ist dir schonmal aufgefallen, daß viele Tasten, wie z.B. die Buchstaben und Zahlen (im Textblock) nicht nur einen Tastencode kennen, sondern Mehrere?

E = e
Shift+E = E
Alt+E = €

Tja und die Leertastte kennt sowas halt nicht.
Ich vermute jetzt einfach mal, daß es aus einem derartigen Grund auch nur Tastenkombinationen funktioniert, wo es sowas gibt.


PS: Strg+Enter und Strg+Backspace, Strg+Del gehen auch nicht ... eventuell wurden auch einfach nur bestimmte Tasten gesperrt.

Manuell könnte man soeinen HotKey schon deklarieren, aber ob er dann auch funktioniert :?:
Delphi-Quellcode:
HotKey1.HotKey := 16416;

Hawkeye219 8. Mär 2011 15:11

AW: THotKey mit Space behandlung
 
Hallo,

die Delphi-Komponente THotKey kapselt lediglich ein von Microsoft erstelltes Windows-Control, das im MSDN dokumentiert ist. Die dort erwähnten Nachrichten WM_KEYDOWN und WM_SYSKEYDOWN könnte man nun abfangen und die Beschränkungen aufheben:
Delphi-Quellcode:
type
  THotkey = class (ComCtrls.THotkey)
  private
    procedure WMKeyDown (var aMessage: TWMKeyDown); message WM_KEYDOWN;
    procedure WMSysKeyDown (var aMessage: TWMSysKeyDown); message WM_SYSKEYDOWN;
    procedure SetHotkeyFromMessage (var aMessage: TWMKey);
  end;

procedure THotkey.WMKeyDown (var aMessage: TWMKeyDown);
begin
  if (aMessage.CharCode = VK_SPACE) then
    SetHotkeyFromMessage (aMessage)
  else
    inherited;
end;

procedure THotkey.WMSysKeyDown (var aMessage: TWMSysKeyDown);
begin
  if (aMessage.CharCode = VK_SPACE) then
    SetHotkeyFromMessage (aMessage)
  else
    inherited;
end;

procedure THotkey.SetHotkeyFromMessage (var aMessage: TWMKey);
var
  ShiftState: TShiftState;
begin
  ShiftState := KeyDataToShiftState(aMessage.KeyData);
  Hotkey := ShortCut(aMessage.CharCode, ShiftState);

  if Assigned(OnChange) then
    OnChange (Self);

  aMessage.Result := 0;
end;
Dabei ist zu beachten, dass die Deklaration von THotkey vor der Deklaration des verwendenden Formulars erfolgen muss. Falls Deklaration und Implementierung von THotkey in eine eigene Unit ausgelagert werden, muss diese bei der Verwendung in der USES-Liste nach "ComCtrls" aufgeführt werden.

Gruß Hawkeye

eholzer 9. Mär 2011 20:25

AW: THotKey mit Space behandlung
 
Danke, Hawkeye.
Das ist genau was ich gesucht habe.

Gruß
Eric


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