Ich habe eine Variable in der der Objektname (Shapename) steht worauf ich zugreifen will. Nun geht sowas wie Variable1.top statt Shape1.top schlecht was mir auch einleuchtet.
So aber wie muss man abändern, damit es funktioniert ?
Kurzfassung falscher Code:
Variable1:=Shape1
Variable1.top
Variable mit Objektnamen
-
- Beiträge: 308
- Registriert: Do 9. Apr 2009, 10:10
- OS, Lazarus, FPC: Ubuntu 9.10 (L 0.9.28 FPC 2.2.4)
- CPU-Target: 32Bit
- Wohnort: 785..
Variable mit Objektnamen
Ubuntu 9.10 (L 0.9.28 FPC 2.4.x)
-
- Lazarusforum e. V.
- Beiträge: 2808
- Registriert: Fr 22. Sep 2006, 10:38
- OS, Lazarus, FPC: Lazarus v2.0.10, FPC 3.2.0
- Wohnort: Hessen
- Kontaktdaten:
Re: Variable mit Objektnamen
Hmmm. ich habe zugegebenermaßen dein Problem nicht ganz verstanden. Aber wenn die Variable zum Objekt werden soll, mit dem du dann umgehen kannst, gehst du wie folgt vor:
Gruß, Euklid
Code: Alles auswählen
var variable1:TShape;
[...]
begin
variable1:=TShape.create;
[...]
//Jetzt kannst du das Objekt variable1 verwenden.
[...]
variable1.free;
end;
-
- Beiträge: 308
- Registriert: Do 9. Apr 2009, 10:10
- OS, Lazarus, FPC: Ubuntu 9.10 (L 0.9.28 FPC 2.2.4)
- CPU-Target: 32Bit
- Wohnort: 785..
Re: Variable mit Objektnamen
Gut anscheinend hab ich das Problem ungenügend genau beschrieben. Dann muss ich wohl doch etwas ausholen wie ich das gemeint habe.
mal mein Quelltext ... das Problem findet sich ganz unten
Sry falls die Formatierung nich so hinhauen sollte
mal mein Quelltext ... das Problem findet sich ganz unten
Sry falls die Formatierung nich so hinhauen sollte
Code: Alles auswählen
var
k:Integer; //Zähler für die Namensvergebung der Shapes
procedure TForm1.FormMouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
var
Shapeq: TShape;
Labelz: TLabel;
begin
if k<0 Then
k:=0;
k:=k+1;
Shapeq:=TShape.Create(Form1); //Erstelle einen Shape an der Stelle an der ein Mausklick erfolgt.
Shapeq.parent:=Form1;
Shapeq.left:=X;
Shapeq.Top:=Y;
Shapeq.Shape:=stCircle;
Shapeq.Width:=30;
Shapeq.Height:=30;
If k <10 Then
Shapeq.name:='K0' + InttoStr(k) //gib dem Shape den Namen Kxx xx ist eine Zahl
Else
Shapeq.name:='K' + InttoStr(k);
Labelz:=TLabel.Create(Form1); //Beschrifte den Shape mit dem Namen in Form eines Labels
Labelz.parent:=Form1;
Labelz.left:=X+4;
Labelz.Top:=Y+10;
If k <10 Then
Labelz.name:='L0' + InttoStr(k)
Else
Labelz.name:='L' + InttoStr(k);
Labelz.Caption:=Shapeq.Name;
Labelz.Font.Color:=0;
Labelz.Visible:=True;
end;
procedure TForm1.LinieClick(Sender: TObject); // So nun soll das eine Prozedur geben die letzten beiden Shapes zu verbinden
var
x1: integer;
x2: integer;
y1: integer;
y2: integer;
t0: shortstring;
t1: shortstring;
begin
if k>=11 Then // weise t0 den Namen des vorletzten Shapes zu
t0:='K' + inttostr(k-1)
Else
t0:='K0' + inttostr(k-1);
if k>=10 Then //weise t1 den Namen des letzten erstellten Shapes zu
t1:='K' + inttostr(k)
Else
t1:='K0' + inttostr(k);
x1:= // so hier soll nun x1 der X-Wert des vorletzten Shapes zugewiesen werden
// also um genau zu sein der X-Wert des Shapes dessen name in t0 als string gespeichert ist
y1:=t0.top //analog für den y-wert....so gehts nicht und ist auch halbwegs logisch dass es nicht geht
x2:= //hier dann analog dann mit t1 für x2 und y2
y2:=
canvas.Line(x1,y1,x2,y2);
end;
Ubuntu 9.10 (L 0.9.28 FPC 2.4.x)
-
- Lazarusforum e. V.
- Beiträge: 2809
- Registriert: Sa 9. Sep 2006, 18:05
- OS, Lazarus, FPC: Linux (L trunk FPC trunk)
- CPU-Target: 64Bit
- Wohnort: Dresden
- Kontaktdaten:
Re: Variable mit Objektnamen
Typecasting heißt das Zauberwort 
Also erst finden nach dem Namen und dann auf TShape casten.
Kleines Beispiel:

Also erst finden nach dem Namen und dann auf TShape casten.
Kleines Beispiel:
Code: Alles auswählen
with FindComponent('Shape1') as TShape do
Width := 200;
Johannes