2016-06-09 9 views
3

Ich habe ein benutzerdefiniertes FMX-Combobox-Steuerelement Ich versuche, von Delphi XE6 nach Delphi 10.1 Berlin zu verschieben. Das Steuerelement erbt von TComboEdit. In meiner Kontrolle überschreibe ich die geschützte virtuelle Methode - "DoTyping", die einmal in TCustomEdit existierte, aber nicht mehr in Delphi 10.1 Berlin. Wie behalte ich meinen Code, ohne das gesamte Steuerelement neu schreiben zu müssen? Gibt es auch etwas in Delphi 10.1 Berlin, das ich beaufsichtige?Wie wird die entfernte Protected Virtual DoTyping-Methode von TCustomEdit ersetzt?

Es sieht aus, als ob TCustomEdit eine neue Eigenschaft

Model: TCustomEditModel 
+1

Vorausgesetzt, dass FMX nun gestylte und native Steuerelemente unterstützt, müssen Sie Ihre Komponente möglicherweise neu entwerfen, um diese Änderung anzupassen. Vielleicht kannst du das OnTyping-Event entführen, aber ich schätze, du wirst bald auf andere Probleme stoßen, wenn deine Kontrolle etwas komplexer ist. –

+1

Hi UWE, kannst du mir ein paar zusätzliche Informationen darüber geben, wie ich das OnTyping-Ereignis entführen könnte - danke – John

+1

Verbinde das Ereignis einfach mit einer Methode in deiner Klasse. Beachten Sie, dass ein Benutzer denselben Code umgehen kann. –

Antwort

4

Dies könnte nicht einfacher sein, hinzugefügt.

Das Lager TComboEdit hat ein OnTyping Ereignis.
Überall dort, wo die DoTyping Methode es ist eine sichere Wette, deren Umsetzung wie folgt aussieht bewegt hat: abholen

procedure TSomething.DoTyping; 
begin 
    if assigned(FOnTyping) then FOnTyping(Self); 
end; 

Also nur den Code, der in DoTyping verwendet werden soll, es schneiden.
Setzen Sie Ihre benutzerdefinierte ComboEdit (oder eine Aktie TComboEdit) auf das Formular, gehen Sie zu den Ereignissen im Objektinspektor, doppelklicken Sie auf OnTyping und fügen Sie den Code in den Event-Handler.

Dies nennt Uwe "Verdrahtung des Ereignisses".

+3

Das ist zwar möglich, aber nicht wirklich wünschenswert. Ein Steuerelement sollte keine eigenen Ereignisse verwenden, insbesondere nicht, wenn anderer Code das Ereignis festlegt und Ihr Handler entfernt wird. Das DoTyping wurde in das Modell verschoben. Ich denke, man sollte die Komponente wiederholen, um die Trennung von MVP (oder CMP, wie sie es nennen) zu verwenden. Siehe [Teil 1] (http://yaroslavbrovin.ru/new-approach-of-development-of-firmonkey-control-control-model-presentation-part-1-en/) und [Part 2] (http://yaroslavbrovin.ru/new-approach-of-development-of-firmonkey-control-control-model-presentation-part-2-tedit-with-autocomplete-en/) einer schönen Erklärung –