Autor Beitrag
Jakane
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 257



BeitragVerfasst: Mo 06.05.13 14:10 
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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 22
Erhaltene Danke: 2



BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 653
Erhaltene Danke: 160



BeitragVerfasst: 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.

Für diesen Beitrag haben gedankt: Jakane
Jakane Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 257



BeitragVerfasst: Mo 06.05.13 14:30 
user profile iconWasWeißDennIch hat folgendes geschrieben Zum zitierten Posting springen:
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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 648
Erhaltene Danke: 85

WIN 2000, WIN XP
D5 Prof
BeitragVerfasst: 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.

_________________
Toleranz ist eine Grundvoraussetzung für das Leben.
Jon Good
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 22
Erhaltene Danke: 2



BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 653
Erhaltene Danke: 160



BeitragVerfasst: Mo 06.05.13 19:27 
user profile iconJon Good hat folgendes geschrieben Zum zitierten Posting springen:
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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 22
Erhaltene Danke: 2



BeitragVerfasst: Mo 06.05.13 21:34 
user profile iconWasWeißDennIch hat folgendes geschrieben Zum zitierten Posting springen:
user profile iconJon Good hat folgendes geschrieben Zum zitierten Posting springen:
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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
EE-Maler
Beiträge: 1952
Erhaltene Danke: 128

Windows XP
Delphi (2005, SmartInspect), SQL, Lua, Java (Eclipse), C++ (Visual Studio 2010, Qt Creator), Python (Blender), Prolog (SWIProlog), Haskell (ghci)
BeitragVerfasst: Mo 06.05.13 22:45 
user profile iconJon Good hat folgendes geschrieben Zum zitierten Posting springen:
Verständlicher?

Nennt sich auch Delegieren (im Gegensatz zu Erben).

Wenn ich mich nicht irre kann man die Sichtbarkeit von properties auch ändern:

ausblenden 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.

_________________
a broken heart is like a broken window - it'll never heal
In einem gut regierten Land ist Armut eine Schande, in einem schlecht regierten Reichtum. (Konfuzius)
Narses
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Administrator
Beiträge: 10183
Erhaltene Danke: 1256

W10ent
TP3 .. D7pro .. D10.2CE
BeitragVerfasst: Mo 06.05.13 23:42 
Moin!

user profile iconXion hat folgendes geschrieben Zum zitierten Posting springen:
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

_________________
There are 10 types of people - those who understand binary and those who don´t.

Für diesen Beitrag haben gedankt: Xion
ml-kuen
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 17

Win 95, Win 98, Win 2000, Win XP, Win 7
Delphi 7 personal
BeitragVerfasst: Mo 06.05.13 23:45 
Hallo Xion,

Zitat:

Wenn ich mich nicht irre kann man die Sichtbarkeit von properties auch ändern:

ausblenden 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 653
Erhaltene Danke: 160



BeitragVerfasst: 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 257



BeitragVerfasst: 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)