AGB  ·  Datenschutz  ·  Impressum  







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

[FMX] OnKeyDown kommt plötzlich nicht mehr durch

Ein Thema von Medium · begonnen am 20. Sep 2018 · letzter Beitrag vom 21. Sep 2018
Antwort Antwort
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
EWeiss
(Gast)

n/a Beiträge
 
#2

AW: [FMX] OnKeyDown kommt plötzlich nicht mehr durch

  Alt 20. Sep 2018, 17:57
Müsste das nicht auch in FMX (Bin kein FMX writer daher als Frage in den Raum gestellt)
procedure TMyEdit.OnKeyDown(var Key: Word; var KeyChar: WideChar; Shift: TShiftState);

lauten?

gruss

Geändert von EWeiss (20. Sep 2018 um 18:04 Uhr)
  Mit Zitat antworten Zitat
Medium

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

AW: [FMX] OnKeyDown kommt plötzlich nicht mehr durch

  Alt 20. Sep 2018, 19:08
Nee, so heißt das Event. Die dadurch aufgerufene Methode heißt tatsächlich "KeyDown()". Habe ich 1:1 aus den Quellen von TControl kopiert.

Edit: Und auch schon von Anfang an so gehabt, auch als alles noch klappte.
"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
Benutzerbild von KodeZwerg
KodeZwerg

Registriert seit: 1. Feb 2018
3.691 Beiträge
 
Delphi 11 Alexandria
 
#4

AW: [FMX] OnKeyDown kommt plötzlich nicht mehr durch

  Alt 20. Sep 2018, 19:40
Und im History Ordner kein Backup der alten lauffähigen mehr drinnen?
Gruß vom KodeZwerg
  Mit Zitat antworten Zitat
Medium

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

AW: [FMX] OnKeyDown kommt plötzlich nicht mehr durch

  Alt 21. Sep 2018, 09:06
Gerade geschaut: Leider nein. Hab wohl schon zu viel herumprobiert. Echt mysteriös das ganze
"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
Medium

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

AW: [FMX] OnKeyDown kommt plötzlich nicht mehr durch

  Alt 21. Sep 2018, 14:58
Hm, scheint es keine Erklärung für zu geben, und auch sonst im Netz werde ich komplett 0 fündig. Scheint noch nie jemand so gemacht zu haben.

Ich habe mir jetzt aber beholfen, indem ich dann doch den Fokus zulasse, und ein paar Dinge anstelle die dennoch sicherstellen, dass das daraus resultierende (schwer so zu erklärende) problematische Verhalten nicht eintritt. Mit Fokus bekomme ich brav alle Eingaben, wie es auch eigentlich zu erwarten war. Es hatte mich nämlich schon gewundert warum es auch ohne geklappt hat - aber Delphi hats wohl nach ein paar Stunden gemerkt und selbst repariert
"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
Benutzerbild von KodeZwerg
KodeZwerg

Registriert seit: 1. Feb 2018
3.691 Beiträge
 
Delphi 11 Alexandria
 
#7

AW: [FMX] OnKeyDown kommt plötzlich nicht mehr durch

  Alt 21. Sep 2018, 15:08
Ich habe keine Ahnung von FMX, für mich liegt hier der Fehler/nicht Fehler begraben.
Delphi-Quellcode:
procedure TMyEdit.Click;
begin
  IsClicked := True;
  inherited;
end;
Da habe ich keine Vorstellung wann das wie getriggert wird damit es True ergibt bzw wie es wieder False wird.

Ps:
vielleicht ist es auch das inherited im OnKeyDown Event?
Gruß vom KodeZwerg

Geändert von KodeZwerg (21. Sep 2018 um 15:12 Uhr)
  Mit Zitat antworten Zitat
Medium

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

AW: [FMX] OnKeyDown kommt plötzlich nicht mehr durch

  Alt 21. Sep 2018, 15:31
Das ist die virtuelle Methode, die in TControl deklariert ist und beim OnClick ausgelöst wird. Diese überschreibe ich dort. Der Klick kommt auch an, und IsClicked wird definitiv gesetzt (sehe ich daran, dass ich dann andersfarbig zeichne). IsClicked wird durch Drücken von Enter wieder zurückgenommen, wie in der KeyDown-Methode zu sehen ist.

Das inherited muss da schon bleiben, weil sonst die Implementierung von TControl übergangen wird, welche dafür verantwortlich ist den via OnKeyDown zugewiesenen Handler aufzurufen. (Ich möchte ja weiterhin auch im Formular nachher die Möglichkeit haben auf diese Ereignisse zu reagieren.) (Außerdem ist es verflucht schlechter Stil die inherited-Kette von virtuellen Methoden zu brechen.)
Ich hatte das inherited aber spaßeshalbar bei meinen Tests schon ans Ende gesetzt, aber auch ohne erkennbare Wirkung.

Ich bin mir deshalb so sicher, dass es auch ohne Fokus ging, weil ich 3 dieser Edits auf einem Formular hatte zum testen, und gleichzeitig in alle 3 schreiben konnte. Und Fokus kann ja immer nur einer sein. Diesen Zustand konnte ich nie wieder herstellen. Wie verhext.
"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
Antwort Antwort


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 19:43 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