Einzelnen Beitrag anzeigen

Medium

Registriert seit: 23. Jan 2008
3.686 Beiträge
 
Delphi 2007 Enterprise
 
#1

[FMX] OnKeyDown kommt plötzlich nicht mehr durch

  Alt 20. Sep 2018, 16:34
Huhu DP!

Ich schreibe mir gerade eine eigene Edit-Komponente mit FireMonkey, da mir bei der beiliegenden ein paar Dinge fehlen. Ich leite diese von TShape ab, welches seinerseits von TControl ableitet.

In meiner Komponente überschreibe ich die Methode "KeyDown", die in TControl als virtual deklariert ist. Und bis vor ca. 2h habe ich damit auch wunderbar Tastendrücke erhalten - jetzt aber auf ein Mal nicht mehr. Und ich komme seit dem nicht dahinter, wieso das so ist.

In der VCL könnte ich es noch mit KeyPreview versuchen, aber dies scheint es in FMX überhaupt nicht zu geben. Meine Komponente hat ja auch, bisher, in einem frischen und leeren FMX Projekt wunderbar funktioniert.

Hier mal die relevanten Code-Teile:

Delphi-Quellcode:
type
  TMyEdit = class(TShape)
  private
    FText: String;
    FFont: TFont;
    .
    .
    .
    FIsClicked: Boolean;
    procedure SetIsClicked(const Value: Boolean);
  protected
    procedure Click; override;
    procedure KeyDown(var Key: Word; var KeyChar: WideChar; Shift: TShiftState); override;
  public
    constructor Create(AOwner: TComponent); override;
    destructor Destroy; override;
    property IsClicked: Boolean read FIsClicked write SetIsClicked;
  published
    property OnKeyDown;
    property OnKeyUp;
  end;

implementation

procedure TMyEdit.Click;
begin
  IsClicked := True;
  inherited;
end;

procedure TMyEdit.KeyDown(var Key: Word; var KeyChar: WideChar; Shift: TShiftState);
begin
  ShowMessage('Taste kommt');
  if IsClicked then
  begin
    ShowMessage('is auch geclickt');
    case Key of
      vkReturn: IsClicked := False;
      vkBack: ...
      vkDelete: ...
      vkLeft: ...
      vkRight: ...
      vkEnd: ...
      vkHome: ...
      else
        FText := FText + KeyChar;
    end;
    Repaint;
  end;
  inherited;
end;
Vorher wurde brav alles neue an FText angehängt, jetzt kommen die (nur zum debuggen eingesetzten) ShowMessages erst gar nicht an. IsClicked wird allerdings korrekt gesetzt, also prinzipiell bekommt die Komponente noch etwas mit.

Auch nachher im eigentlichen Projekt angelegte Handler für die OnKeyDown/Up Events werden nicht mehr ausgeführt. Wie kann das passieren? (Ich möchte gern aus verschiedenen Gründen kein fokussierbares Control daraus machen, und es war bisher auch gar nicht nötig um Tastendrücke zu bekommen.)
"When one person suffers from a delusion, it is called insanity. When a million people suffer from a delusion, it is called religion." (Richard Dawkins)
  Mit Zitat antworten Zitat