Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi shape1+1 ? (https://www.delphipraxis.net/42556-shape1-1-a.html)

Potestas 20. Mär 2005 20:14


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:

var shape= TShape
-----
shape:=shape +1
shape.brush.color:=clyellow
Das geht so leider nicht.

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

Matze 20. Mär 2005 20:26

Re: shape1+1 ?
 
Suche mal nach Hier im Forum suchenFindComponent.

Nachtrag: Herzlich wollkommen! :hello:

Pr0g 20. Mär 2005 20:52

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:
...
  private
    { Private-Deklarationen }
    ShapeList: TObjectList;
...
Im OnCreate der Form erzeugst du die Liste und im Destroy gibst du sie wieder frei:
Delphi-Quellcode:
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;
Nun hast du einen Button (als Beispiel) um ein paar Shapes zu erzeugen:
Delphi-Quellcode:
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;
Jetzt kannst du ganz leicht auf die Shapes zugreifen, bspw. über einen zweiten Button:
Delphi-Quellcode:
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;
MfG Pr0g

Potestas 20. Mär 2005 21:06

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

malo 20. Mär 2005 23:53

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:
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;
Jetzt kannst du mit ShapeArray[i] auf die einzelnen Shapes zugreifen. ;)

Pr0g 21. Mär 2005 00:01

Re: shape1+1 ?
 
Dann aber das Freigeben nicht vergessen.

malo 21. Mär 2005 00:05

Re: shape1+1 ?
 
Zitat:

Zitat von Pr0g
Dann aber das Freigeben nicht vergessen.

stimmt. Folgendes fehlt dann noch:

Delphi-Quellcode:
TForm1.FormClose(Sender: TObject);
var i: integer;
begin
  for i := 0 to 10 do
    ShapeArray[i].Free;
end;

Christian Seehase 21. Mär 2005 00:13

Re: shape1+1 ?
 
Moin Malo,

wenn Du die Shapes so erzeugst:

Delphi-Quellcode:
ShapeArray[i] := TShape.Create(self); // erzeugen
müssen sie nicht freigegeben werden, da dies der Owner (in diesem Falle das Formular), automatisch erledigt.

malo 21. Mär 2005 00:37

Re: shape1+1 ?
 
Zitat:

Zitat von Pr0g
Dann aber das Freigeben nicht vergessen.

stimmt. Folgendes fehlt dann noch:

Delphi-Quellcode:
TForm1.FormClose(Sender: TObject);
var i: integer;
begin
  for i := 0 to 10 do
    ShapeArray[i].Free;
end;
//edit: :oops: Das kommt davon, wenn man ne halbe Stunde nicht am PC ist :mrgreen:

Pr0g 21. Mär 2005 00:40

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.
Seite 1 von 2  1 2      

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