Wenn ich eine VCL-Komponente TXxx
ersetzen möchte, sollte ich meine Komponente auf TXxx
oder TCustomXxx
setzen?
Ich möchte Drop-In-Ersetzungen für verschiedene Textbearbeitungskomponenten ( TEdit
, TMemo
usw.) machen, um WM_PASTE-Handler zu haben, um Eingaben in ein Back-End zu bereinigen, das sehr wählerisch ist Akzeptieren (grundsätzlich nur 7-Bit-ASCII-druckbare Glyphen, Leerzeichen und CR / LF-Paare ... selbst Tabulatorzeichen sind nicht akzeptabel). Diese neuen Komponenten müssen in eine bestehende Anwendung eingefügt werden, und ich möchte nichts tun, was ich nicht unbedingt tun muss, damit sie genau so funktionieren, wie die alten, außer dem nicht standardmäßigen Einfügeverhalten. p>
Ich habe einen auf TMemo
basierend gemacht und es scheint zu funktionieren, aber irgendwie habe ich den Eindruck, dass der empfohlene Ansatz darin bestünde, TCustomMemo
zu verwenden. Gibt es etwas, das mir fehlt?
Per Konvention besteht der Unterschied zwischen TSomething und TCustomSomething darin, dass letzterer keine oder nur sehr wenige veröffentlichte Eigenschaften hat, so dass Sie auswählen können, welche selbst veröffentlicht werden sollen. Ansonsten sollte es keinen Unterschied geben.
So wie ich das Konzept von TSomething
und TCustomSomething
immer verstanden habe, wenn Sie eine eigene Vererbung von, sagen wir TButton
auf Ihre eigene namens TMyBytton
erstellen. Angenommen, Sie möchten eine Eigenschaft wie Caption
ausblenden (vorausgesetzt, Sie möchten möglicherweise keinen Text). Mit TButton
können Sie diese Eigenschaft nicht ausblenden. Mit TCustomButton
können Sie jedoch alle Eigenschaften, die im Objektinspektor angezeigt werden sollen, veröffentlichen und diejenigen ausschließen, die nicht angezeigt werden sollen. Sobald eine Eigenschaft veröffentlicht wurde, kann sie nicht in weiteren geerbten Klassen veröffentlicht werden.
TObjekt - & gt; TPersistent - & gt; TComponent - & gt; TControl - & gt; TWinControl - & gt; TCustomEdit - & gt; TCustomMemo - & gt; TMemo
TMemo ist nur ein Wrapper für das TCustomMemo-Steuerelement. Sie können beide verwenden, aber ich möchte die benutzerdefinierte Version verwenden, da Sie von einer nicht visuellen Komponente ableiten.
Wenn Sie Komponenten in zukünftigen Projekten ersetzen möchten, können Sie ein Datamodul um das Steuerelement herum erstellen und dessen Eigenschaften im Datenmodul verwalten. Nach dem Ersetzen müssen Sie nur die Art und Weise ändern, in der das Datenmodul die Komponente behandelt, und nicht jede Komponente in Ihrem Projekt.
Eine andere Option wäre, einfach die entsprechenden Komponenten wie folgt zu unterklassifizieren:
%Vor%Dann ist es wichtig, die Unit SubClassedControls hinter der Unit StdCtrls in der uses-Klausel des Formulars einzufügen. Auf diese Weise können Sie einfach die vorhandenen Standardsteuerelemente weiterhin verwenden, aber zur Laufzeit verwendet Ihre Anwendung tatsächlich Ihre untergeordneten Steuerelemente. Falls Sie eine bestehende Anwendung mit vielen Steuerelementen haben, ist dies möglicherweise eine einfachere Möglichkeit, das Verhalten Ihrer Steuerelemente zu ändern.