Entwickler-Ecke

Sonstiges (Delphi) - Dynamische Eltern!! Wie??


DT2158 - So 03.11.02 11:18
Titel: Dynamische Eltern!! Wie??
Auf alte Threads will anscheindend keiner Antworten deswegen mach ich jetzt einen neuen auf!

Rooof schrieb:
Zitat:

Hi

Du könntest dieses Problem allenfalls auch mit einer Liste lösen.

Dieses würde dann ungefähr so aussehen:

Code:

... Tform1.Button1Click...
var i : integer;
PObjectList: TObjectList;
begin
PObjectList := TObjectList.create;
for i := 1 to 5 do begin
MyLabel := TLabel.Creat(self);
MYlabel.Parent := self;
Mylabel.Name := 'MYLabel' + intToStr(i);
Mylabel.Caption := 'Meine Label';
PObjectList.add(Mylabel);
end;
end;




Um dann wieder auf das Label zugreiffen zu können, kannst du direkt mit TLabel(PObjectList.Items[index des labels]).Caption := 'Das hier ist neuer Text'; darauf zugreiffen.

Das TLabel vorweg dient zum Casten des Labels, da die Liste nicht weiss, welcher ObjectTyp sich an der Adresse befindet, wo der Pointer drauf zeigt. Einfach so nachbasteln und es sollte funktionieren. Ansonsten Online-Hilfe zur Hand nehmen


Mein Problem ist folgendeds:
ich möchte mal auf Rooof´s möglichkeit zurückkommen.
Bloß bei mir angepasst!


Deklartion
Code:


Quelltext
1:
2:
3:
4:
TabsheetsList: TObjectList; 
SynEditsList: TObjectList; 
TabSheet: TTabSheet; 
SynEditA: TSynEdit
;



Implementation

Code:


Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
TabSheetsList := TObjectList.Create; 
TabSheet := TTabSheet.Create(Self); 
TabSheet.PageControl := PageControl_Edit; 
Tabsheet.Caption := 'Unbenannt 0'; 
Tabsheet.Name := 'TabSheet_Edit1'; 
TabSheetsList.Add(TabSheet); 
TabSheetsList.Items[0]. * 
SynEditA := TSynEdit.Create(Self); 
SynEditA.Parent := TabSheetsList. * 
SynEditA.Align := alClient;




Die beiden Zeilen mit den Sternechen bereiten mir Kopfzerbrechen.

1. Ich kann nicht einfach einfach "TabSheetsList.Items[0].caption := 'Neuer Text';" verwenden wie roof es geschildert hatte(undefiniert)
2. SynEditA.Parent erfodert einen TWincontrol-Typen den es allerdings nicht gibt!

Danke im voraus
Dt2158


Tino - So 03.11.02 12:49

Bitte in Zukunft nicht mehrfach die gleiche Frage posten!

Hier meine Antwort aus dem anderen Topic:

DT2158 hat folgendes geschrieben:
Ich kann nicht einfach einfach "TabSheetsList.Items[0].caption := 'Neuer Text';" verwenden wie roof es geschildert hatte(undefiniert)

Das liegt daran das die Eingeschaft Items vom Type tObject ist und tObject hat nun mal keine Caption Eigenschaft. Eine Lösung wäre ein Typecast:

Quelltext
1:
tTabSheet (TabSheetsList.Items [0]).Caption := 'Neuer Text';                    


DT2158 hat folgendes geschrieben:
SynEditA.Parent erfodert einen TWincontrol-Typen den es allerdings nicht gibt!
Wenn es kein Parent gibt dann lass die Anweisung weg oder gibt NIL an. Allerdings wird das SynEdit dann auch nicht angezeigt. Ist ja logisch weil es ja kein Parent gibt. Was ich aber vermute ist das Du es auf einer Form anzeigen lassen möchtest. So "könnte" es funktionieren:

Quelltext
1:
SynEditA.Parent := Self;                    

Wenn Du das SynEdit allerdings in einem Deiner TabSheets anzeigen lassen möchtest musst Du natürlich nicht das tForm sondern ein tTabSheet als Parent angeben

Quelltext
1:
SynEditA.Parent := tTabSheet (TabSheetsList.Items [0]);                    


Gruß
TINO


DT2158 - So 03.11.02 13:25

okay hab das mit den parents anders gelöst

Quelltext
1:
SynEditNew.Parent := FindControl((FindComponent('TabSheet_Edit1') as TTabSheet).Handle);                    

und die liste lass ich auch weg, ist ja nicht zwingend nötig

trotzdem danke