Entwickler-Ecke
Sonstiges (Delphi) - Controls per ControlCount durchlaufen, Wert zuweisen..
trm - Mi 18.04.12 23:23
Titel: Controls per ControlCount durchlaufen, Wert zuweisen..
Hi,
wenn ich auf einer Form Controls durchlaufe, benötige ich eine Möglichkeit, um dem aktuellen Control ein anderes Control zuzuweisen.
Wenn man das über das Control direkt macht, funktioniert das.
Funktionierendes Beispiel:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7:
| var x:TButton; begin x:=Button1; x.name:='neuerName'; Button1:=x; end; |
Folgendes funktioniert nicht, weil die Eigenschaft schreibgeschützt ist:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15:
| var x:TButton; y:Integer; begin for y:=0 to form1.controlcount-1 do if form1.controls[y] is tbutton then begin x:=form1.controls[y] as tbutton ; x.name:='neuerName';
form1.controls[y] := x; end; end; |
bummi - Mi 18.04.12 23:50
Ich schätze Nein, die Property Controls liest über
GetControl(Index: Integer): TControl
und liefert ein Control aus einer privaten Liste, an die Liste selbst kommst Du IMHO nicht (ohne Dirty-Tricks) heran
jaenicke - Do 19.04.12 00:33
Ich frage mich sowieso was das werden soll. Zumindest in dem Beispiel macht das keinerlei Sinn. :nixweiss:
trm hat folgendes geschrieben : |
Delphi-Quelltext 1: 2: 3: 4:
| form1.controls[y] := x; end; end; | |
In x ist doch ohnehin schon form1.controls[y] drin. Also wozu willst du das denn überhaupt noch einmal in form1.controls[y] hineinpacken, selbst wenn es gehen sollte.
Ich glaube du solltest dir einmal anschauen wie Objekte und Objektreferenzen in Delphi funktionieren...
Ein kleines Beispiel:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31:
| type TTest = class private FTest: Integer; procedure SetTest(const Value: Integer); public property Test: Integer read FTest write SetTest; end;
procedure TTest.SetTest(const Value: Integer); begin FTest := Value; end;
var MyTest, MyCopy: TTest; begin MyTest := TTest.Create; try MyTest.Test := 100; MyCopy := MyTest; MyCopy.Test := 400; ShowMessage(IntToStr(MyTest.Test)); finally MyTest.Free; end; end; |
Was meinst du was angezeigt wird? Probier es aus...
trm - Do 19.04.12 00:55
Hallo Sebastian,
der Snn der Sache hängt mit dem Post zusammen:
http://www.delphi-forum.de/viewtopic.php?t=109126
Dort wird der Originalkomponente der Name weggenommen, damit das Control geklont werden kann und dabei nicht zwei Controls/Komponenten mit dem gleichen Namen erstellt werden.
Nachdem alles fertig ist, wird das kopierte Control dem Originalen Control wieder "zurückgegeben".
Wenn dies nicht passiert, "schwebt" das Originalcontrol irgendwo/irgendwie ohne Namen herum und kann nicht wieder korrekt angesprochen werden.
Deshalb die eigenartige Logik.
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!