![]() |
TEdit (FMX) OnChanged Methode überschreiben
Hallo
Kann mir jemand sagen, wie ich die OnChanged Methode der TEdit Klasse überschreiben (override) kann? Ich versuche alle Arten von Deklarationen:
Delphi-Quellcode:
Egal, welche der oben genannten deklarationen, ich bekomme beim Kompilieren immer die Meldung:
TTextExtension = class(TEdit)
protected procedure OnChanged(Sender: TObject); override; procedure Changed(Sender:TObject); override; procedure TTextEnxtensionOnChanged(Sender: TOjbect); override; Methode: ... (siehe oben) nicht in Basisklasse gefunden. Was aber nicht stimmt. - Denn die gibt es doch... Was mache ich falsch? DANKE |
AW: TEdit (FMX) OnChanged Methode überschreiben
Kannst du nicht. Die Methode gehört nicht zu TEdit sondern zu dem verwendeten TCustomEditModel.
Ohne das jetzt jetzt ausprobiert zu haben: - Leite eine Klasse von TCustomEditModel ab und überschreibe DoChange (Die zugehörige TEdit-Instanz findest du in Owner). - In deiner Klasse TTextExtension überschreibe DefineModelClass und gib deine abgeleitete Model-Klasse zurück. |
AW: TEdit (FMX) OnChanged Methode überschreiben
An Uwe, geht das nicht auch per Intercept? Dann brauch er sein Programm nicht ändern, nur die Intercept unit als letztes einbinden.
|
AW: TEdit (FMX) OnChanged Methode überschreiben
Wie meinst du das genau?
|
AW: TEdit (FMX) OnChanged Methode überschreiben
Hallo
Sorry, @Uwe: Hast Du vl. ein Beispiel, ich bekomme es nicht hin. Ich habe versucht ein neues TEdit zu erstellen (Mit Create(AOwner) & dann die OnChanged zu ändern. Funktioniert auch nicht. (wird nicht ausgelöst) DANKE |
AW: TEdit (FMX) OnChanged Methode überschreiben
Zitat:
Delphi-Quellcode:
unit Interceptors;
interface uses {hier die original unit(s) rein die man intercepten möchte} Vcl.StdCtrls; // es wird bestimmt was fehlen zum kompilieren, ich habe nur das wichtigste per copy/paste eingefügt um zu demonstrieren was ich meine type TButton = class(Vcl.StdCtrls.TButton) strict private fLastClickTime: TDateTime; fClickWaitPeriod: Int64; fEnableClickWaitPeriod: Boolean; public constructor Create(AOwner: TComponent); override; procedure Click; override; public property ClickWaitPeriod: Int64 read fClickWaitPeriod write fClickWaitPeriod; property EnableClickWaitPeriod: Boolean read fEnableClickWaitPeriod write fEnableClickWaitPeriod; end; implementation { TButton } constructor TButton.Create(AOwner: TComponent); begin fClickWaitPeriod := 1; fLastClickTime := Now; fEnableClickWaitPeriod := True; inherited Create(AOwner); end; procedure TButton.Click; begin if (EnableClickWaitPeriod and (SecondsBetween(Now, fLastClickTime) >= ClickWaitPeriod)) then begin fLastClickTime := Now; inherited Click; end else if not EnableClickWaitPeriod then inherited Click else Beep; end; end. Wenn man nun in einem projekt diese unit als letztes einbindet, funktioniert der button etwas anders. So sollte man doch auch sein Event abändern können, oder? |
AW: TEdit (FMX) OnChanged Methode überschreiben
Also...
Ich habe jetzt einen Ansatz gefunden, der aber auch nicht wie gewünscht funktioniert...
Delphi-Quellcode:
Löst zwar den Event aus, aber nicht bei OnTyping, sondern erst, wenn ich die Komponente verlasse. (selbes auch mit (self as TEdit).OnChanged :=
constructor TTextExtension.Create(AOwner: TComponent);
begin inherited Create(AOwner); (self as TEdit).OnTyping:= TextChanged; end; Ideen? - DANKE |
AW: TEdit (FMX) OnChanged Methode überschreiben
Okay.
Es ist für mich etwas kurios, aber es funktioniert jetzt... Die Procedure heißt Typing(Sender: TObject); & beim Create der Komponente genügt:
Delphi-Quellcode:
Dann funktioniert es.
inherited Create(AOwner);
self.OnTyping := Typing DANKE für eure Hilfe |
AW: TEdit (FMX) OnChanged Methode überschreiben
Unter FMX ist eben manches anders, OnChangeTracking hätte vermutlich auch funktioniert.
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 01:55 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz