Autor Beitrag
trm
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 491
Erhaltene Danke: 19

Windows 7x64
Delphi 7
BeitragVerfasst: Mi 18.04.12 23:23 
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:
ausblenden 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:
ausblenden 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';

//Hier tritt der Fehler auf. kann man das umgehen ?
    form1.controls[y] := x;
// !
   end;
end;

_________________
In Erfurt gibt es eine Pension, in der es gemütlich ist, Google einfach nach Pension Fiege ;)
bummi
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 1248
Erhaltene Danke: 187

XP - Server 2008R2
D2 - Delphi XE
BeitragVerfasst: 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

_________________
Das Problem liegt üblicherweise zwischen den Ohren H₂♂
DRY DRY KISS
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19314
Erhaltene Danke: 1747

W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: Do 19.04.12 00:33 
Ich frage mich sowieso was das werden soll. Zumindest in dem Beispiel macht das keinerlei Sinn. :nixweiss:
user profile icontrm hat folgendes geschrieben Zum zitierten Posting springen:
ausblenden 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:
ausblenden volle Höhe 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 491
Erhaltene Danke: 19

Windows 7x64
Delphi 7
BeitragVerfasst: Do 19.04.12 00:55 
Hallo Sebastian,

der Snn der Sache hängt mit dem Post zusammen: 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.

_________________
In Erfurt gibt es eine Pension, in der es gemütlich ist, Google einfach nach Pension Fiege ;)