![]() |
shape1+1 ?
Hi,
folgendes Problem: Ich habe einen Array der einen Würfel mit [x,y,z] erstellt und möchte diesen nun visualisieren. Die Idee: ich habe mehrere kleine shapes die ich nun nacheinander in einer Schleife anspreche und je nachdem, ob der Wert im Array false oder true ist, eine andere Farbe zuweise. Wenn die Schleife durchläuft wir der Array immer umus diesen nun visualisieren. Die Idee: us diesen nun visualisieren. Die Idee: ein Feld erweitert, doch wie kann ich innerhalb einer Schleife den Shape erweitern (wenn überhaupt möglich) Dachte erst an so etwas: Zitat:
1. Ist die Frage in der richtigen Kategorie? :dp: 2. Ist das verständlich ausgedrückt? :wiejetzt: 3. Kann mir jemand da helfen/Tipp geben .... ? :coder2: MFG Potestas |
Re: shape1+1 ?
|
Re: shape1+1 ?
Nim eine TObjectList, damit lassen sich die Shapes besser verwalten (da du bspw. per Delete, Insert auf bestimmte Positionen zugreifen kannst und dich nicht um eine Verschiebung der anderen kümmern musst) und bei der Freigabe werden auch alle Objekte gleich mit freigegeben. Hier mal ein Beispiel:
Pack die Units "Contnrs" (TObjectList) und "ExtCtrls" (TShape) in die Uses-Klauses am Anfang deines Codes. Dann definierst du eine Variable der ObjectList:
Delphi-Quellcode:
Im OnCreate der Form erzeugst du die Liste und im Destroy gibst du sie wieder frei:
...
private { Private-Deklarationen } ShapeList: TObjectList; ...
Delphi-Quellcode:
Nun hast du einen Button (als Beispiel) um ein paar Shapes zu erzeugen:
procedure TForm1.FormCreate(Sender: TObject);
begin //Objectlist erzeugen ShapeList := TObjectList.Create; end; procedure TForm1.FormDestroy(Sender: TObject); begin //Instanz freigeben (alle Objekte in der Liste werden mit freigegeben) ShapeList.Free; end;
Delphi-Quellcode:
Jetzt kannst du ganz leicht auf die Shapes zugreifen, bspw. über einen zweiten Button:
procedure TForm1.Button1Click(Sender: TObject);
var i: Integer; Shape: TShape; begin //10 Shapes erzeugen for i := 1 to 10 do begin Shape := TShape.Create(Self); Shape.Parent := Self; Shape.Name := 'Shape' + IntToStr(i); Shape.Left := 10 * i + 10; Shape.Top := 10; Shape.Width := 5; Shape.Height := 5; ShapeList.Add(Shape); end; end;
Delphi-Quellcode:
MfG Pr0g
procedure TForm1.Button2Click(Sender: TObject);
var i: Integer; begin //auf die Shapes in der Liste zugreifen, bzw. durch //die Schleife auf alle for i := 0 to ShapeList.Count - 1 do TShape(ShapeList[i]).Brush.Color := clLime; end; |
Re: shape1+1 ?
erstmal danke für die Begrüßung und die schnelle Hilfe :)
Werde mal versuchen, ob ich das so hinbekomme, denn ich arbeite erst seit knapp zwei Monat mit Delphi, aber das wird bestimmt schon :) Also erstmal danke im vorraus, falls was nichts klar ist meld ich mich wieder :) PS.: "Contnrs" (TObjectList) << Datei nicht gefunden: 'Contnrs.dcu' Benutze die Delphi 3 Version. Ist die Falsch geschrieben, oder existiert die in der 3er nicht nicht |
Re: shape1+1 ?
Also, geschrieben ist sie richtig. Statt der TObjectList kannst du auch ein Array of TShape nehmen. Sieht in etwa so aus:
Delphi-Quellcode:
Jetzt kannst du mit ShapeArray[i] auf die einzelnen Shapes zugreifen. ;)
var
ShapeArray: array[0..10] of TShape; //deklarieren implementation {$R *.dfm} procedure TForm1.FormCreate(Sender: TObject); var i: integer; begin for i := 0 to 10 do ShapeArray[i] := TShape.Create(self); // erzeugen end; |
Re: shape1+1 ?
Dann aber das Freigeben nicht vergessen.
|
Re: shape1+1 ?
Zitat:
Delphi-Quellcode:
TForm1.FormClose(Sender: TObject);
var i: integer; begin for i := 0 to 10 do ShapeArray[i].Free; end; |
Re: shape1+1 ?
Moin Malo,
wenn Du die Shapes so erzeugst:
Delphi-Quellcode:
müssen sie nicht freigegeben werden, da dies der Owner (in diesem Falle das Formular), automatisch erledigt.
ShapeArray[i] := TShape.Create(self); // erzeugen
|
Re: shape1+1 ?
Zitat:
Delphi-Quellcode:
//edit: :oops: Das kommt davon, wenn man ne halbe Stunde nicht am PC ist :mrgreen:
TForm1.FormClose(Sender: TObject);
var i: integer; begin for i := 0 to 10 do ShapeArray[i].Free; end; |
Re: shape1+1 ?
Warum postest du das nach ner halben Stunden nochmal? :lol:
@Christian Seehase: Stimmt, das hatte ich nicht bedacht. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 00:48 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz