Entwickler-Ecke
Grafische Benutzeroberflächen (VCL & FireMonkey) - Komponentenprogrammierung, überflüssige Eigenschaften lösche
Jakane - Mo 06.05.13 14:10
Titel: Komponentenprogrammierung, überflüssige Eigenschaften lösche
Hallo liebe Delphi-Helfer :)
ich habe mich endlich in die Komponentenprogrammierung gewagt und direkt mal eine Frage.
Ich bastle grade am TEdit rum und finde manche Eigenschaften lässtig.
Kann ich überflüssige Eigenschaften irgendwie löschen, z.B. BiDiMode?
Bitte nicht den Sinn oder Unsinn des Vorhabens diskutieren :)
Danke für Antworten
Jon Good - Mo 06.05.13 14:22
wenn du nicht über Sinn / Unsinn diskutieren willst, und nur ne kurze Antwort möchtest: Nein, ist nicht möglich.
WasWeißDennIch - Mo 06.05.13 14:23
Viele VCL-Controls sind von einem "TCustom"-Objekt abgeleitet (TCustomEdit, TCustomMemo etc.), bei dem die Eigenschaften noch protected sind. Du kannst dann in einer Ableitung selbst entscheiden, welche Du veröffentlichen möchtest. Dadurch sind sie zwar nicht "gelöscht", werden aber zumindest nicht nach außen sichtbar.
Jakane - Mo 06.05.13 14:30
WasWeißDennIch hat folgendes geschrieben : |
Viele VCL-Controls sind von einem "TCustom"-Objekt abgeleitet (TCustomEdit, TCustomMemo etc.), bei dem die Eigenschaften noch protected sind. Du kannst dann in einer Ableitung selbst entscheiden, welche Du veröffentlichen möchtest. Dadurch sind sie zwar nicht "gelöscht", werden aber zumindest nicht nach außen sichtbar. |
Vielen Dank, das probier ich mal aus :)
Tranx - Mo 06.05.13 16:10
Eines musst Du immer bedenken: Was willst Du mit Deiner Klasse anfangen? Soll sie von TEdit abgeleitet werden? Dann brauchst Du doch nur diejenigen Methoden/Ereignisse ... zu ändern, welche Du meinst, ändern zu müssen. Alle anderen kannst du einfach leer lassen (in der neuen Klasse). Dann wird automatisch die Methode von TEdit verwendet. Wenn Du sozusagen eine komplett "leere" TEdit erzeugen willst, gehe zu dem Vorgänger von TEdit (TCustomEdit, TWinControl ..), der Deinen Ansprüchen genügt.
Aber eine zusätzliche Methode/Eigenschaft stört doch eigentlich nicht, oder? Ich benutze BiDiMode eigentlich auch nie. Benötigst Du soweit ich weiß nur für Sprachumgebungen mit Rechts-nach-links-Schrift (z.B. Hebräisch). Außerdem, was dies anbetrifft, ist diese Eigenschaft schon in TControl definiert! (Also noch vor TWinControl) Nur zur Info.
Jon Good - Mo 06.05.13 19:11
Eine weitere Möglichkeit wäre, du nimmst erbst von TCustomControl und fügst dein TEdit als Child hinzu und linkst Eigenschaften und Events von deinem CustomControl an dein Child-TEdit.
WasWeißDennIch - Mo 06.05.13 19:27
Jon Good hat folgendes geschrieben : |
Eine weitere Möglichkeit wäre, du nimmst erbst von TCustomControl und fügst dein TEdit als Child hinzu und linkst Eigenschaften und Events von deinem CustomControl an dein Child-TEdit. |
Sry, aber: hä? Er/sie will doch nur ein eigenes Edit basteln, wozu TCustomControl mit Child-Edit? :gruebel:
Jon Good - Mo 06.05.13 21:34
WasWeißDennIch hat folgendes geschrieben : |
Jon Good hat folgendes geschrieben : | Eine weitere Möglichkeit wäre, du nimmst erbst von TCustomControl und fügst dein TEdit als Child hinzu und linkst Eigenschaften und Events von deinem CustomControl an dein Child-TEdit. |
Sry, aber: hä? Er/sie will doch nur ein eigenes Edit basteln, wozu TCustomControl mit Child-Edit? :gruebel: |
Dann kann er von den Eigenschaften "verstecken" was er will und nur jene veröffentlichen, die er im OI haben will. Der OI nimmt schließlich nur die Eigenschaften von der Komponente, nicht aber von privaten Feldern.
--> Erbe von CustomControl. Gib ihr ein private / protected Feld von TEdit. Wird das CustomControl verändert (zB Größe) verändere auch das Child-Edit, das das gesamte CustomControl ausfüllt.
Verständlicher?
Xion - Mo 06.05.13 22:45
Jon Good hat folgendes geschrieben : |
Verständlicher? |
Nennt sich auch Delegieren (im Gegensatz zu Erben).
Wenn ich mich nicht irre kann man die Sichtbarkeit von properties auch ändern:
Delphi-Quelltext
1: 2: 3: 4:
| type TMyEdit = class(TEdit) protected property BiDiMode; end; |
Nach Möglichkeit die property nicht private setzen, sonst kann man sie in erbenden Klassen überhaupt nicht mehr ansprechen.
Narses - Mo 06.05.13 23:42
Moin!
Xion hat folgendes geschrieben : |
Wenn ich mich nicht irre kann man die Sichtbarkeit von properties auch ändern: |
IIRC aber nur in eine Richtung: was einmal "sichtbar" ist, kann man nicht wieder "verstecken". :nixweiss:
cu
Narses
ml-kuen - Mo 06.05.13 23:45
Hallo Xion,
Zitat: |
Wenn ich mich nicht irre kann man die Sichtbarkeit von properties auch ändern:
Delphi-Quelltext 1: 2: 3: 4:
| type TMyEdit = class(TEdit) protected property BiDiMode; end; |
Nach Möglichkeit die property nicht private setzen, sonst kann man sie in erbenden Klassen überhaupt nicht mehr ansprechen. |
Die Sichtbarkeit lässt sich meines Wissens nur erhöhen - nicht verringern.
Michael
WasWeißDennIch - Di 07.05.13 08:05
Genauso ist es. Und genau dafür gibt es ja die TCustomXXX-Klassen, bei denen die Properties protected sind. Wozu da jetzt noch TCustomControl samt Childklasse gut sein sollen, ist mir immer noch nicht klar.
Jakane - Di 07.05.13 09:45
Also...
90% von dem was ich wollte habe ich mit CustomEdit erreicht und bin glücklich damit :)
und die anderen 10% kann ich ignorieren.
Ausserdem, geht es doch nur um das Verstehen wie es geht oder nicht? ;)
(CustomControl mit Child hab ich nicht verstanden xD brauch ich aktuell aber auch nicht)
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2025 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!