Welche Basisklasse wird beim Entwickeln der Delphi VCL-Komponente verwendet?

8

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?

    
wades 11.06.2012, 22:33
quelle

4 Antworten

16

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.

    
500 - Internal Server Error 11.06.2012, 22:35
quelle
1

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.

    
Jerry Dodge 13.06.2012 01:14
quelle
0

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.

    
A1rPun 12.06.2012 09:16
quelle
-1

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.

    
iamjoosy 12.06.2012 15:00
quelle

Tags und Links