Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi Pfeiltasten in eigener Komponente abfangen (https://www.delphipraxis.net/120084-pfeiltasten-eigener-komponente-abfangen.html)

Neutral General 5. Sep 2008 13:51


Pfeiltasten in eigener Komponente abfangen
 
Hi,

Ich meine Komponente müsste auf das Drücken einer Pfeiltaste reagieren können. Zumindest VK_LEFT und VK_RIGHT. Das erste Problem ist (bzw war), dass meine Komponente den Focus verliert, bei einem Tastendruck auf eine Pfeiltaste. Gelöst habe ich es jetzt so:

Delphi-Quellcode:
procedure TConsole.WMKillFocus(var Msg: TWMKillFocus);
var key: TWMKey;
begin
  SetFocus;
  if GetAsyncKeyState(VK_LEFT) < 0 then
  begin
    key.CharCode := VK_LEFT;
    WMChar(key);
  end
  else
  if GetAsyncKeyState(VK_RIGHT) < 0 then
  begin
    key.CharCode := VK_RIGHT;
    WMChar(key);
  end;
end;
Das funktioniert, ist aber imo nicht wirklich schön. Zudem habe ich ein Problem, wenn meine Komponente die einzige auf der Form sein sollte... Dann kann sie nämlich den Focus gar nicht verlieren. Allerdings erhält sie trotzdem keine Benachrichtigung über den Tastendruck einer Pfeiltaste. Weder per WM_KEYDOWN noch per WM_CHAR.

Kann man da was tricksen?

Gruß
Neutral General

Dunkel 5. Sep 2008 14:41

Re: Pfeiltasten in eigener Komponente abfangen
 
Hallo!

Delphi-Quellcode:
type
  TMyClass = class
    protected
      procedure WMGetDlgCode(var Message: TWMGetDlgCode); message WM_GETDLGCODE;
  end;

{ ... }
procedure TMyClass.WMGetDlgCode(var Message: TWMGetDlgCode);
begin
  Message.Result := DLGC_WANTARROWS;
end;
... und das Control verliert den Fokus nicht mehr.

Neutral General 5. Sep 2008 14:45

Re: Pfeiltasten in eigener Komponente abfangen
 
Hey danke! :)

Ich schätze, wenn ich Arrows wante (Denglisch :love: :stupid: ), dann bekomm ich sie auch im KeyDown oder/und WM_CHAR oder?

Dunkel 5. Sep 2008 14:50

Re: Pfeiltasten in eigener Komponente abfangen
 
Zitat:

Zitat von Neutral General
Hey danke! :)

Ich schätze, wenn ich Arrows wante (Denglisch :love: :stupid: ), dann bekomm ich sie auch im KeyDown oder/und WM_CHAR oder?

Normal schon, ja.


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