Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Shapes im Programm erstellen oder Alternative (https://www.delphipraxis.net/158611-shapes-im-programm-erstellen-oder-alternative.html)

eXtense 23. Feb 2011 19:45

Shapes im Programm erstellen oder Alternative
 
Hallo,
ich möchte als Übung ein Programm, welches ich bei einem Bekannten im Informatikkurs eine Stufe über mir gesehen habe nachstellen.
Und zwar wurden in einem Form timergesteuert verschiedenfarbige und verschiedengroße Vierecke an verschiedenen Positionen erstellt.
Das die ganzen Zufallswerte mit Random erstellt werden weiß ich. Alles kein Problem.

Jedoch ist mir nicht klar wie die bunten Felder überhaupt erzeugt und übereinander gelegt werden?
Das Einzige was mir in den Sinn käme wären Shapes die als SchapeN erstellt werden wobei N eine fortlaufende Zahl ist. Allerdings wäre diese Zahl ja auch begrenzt und vorallem würde mir diese Methode höchst "unsauber" vorkommen, da sie sicherlich unnötig viel Speicher verbraucht.

Welche einfache Methode gäbe es da, die Vierecke zu erzeugen?

Liebe Grüße,
eXtense

Bummi 23. Feb 2011 22:44

AW: Shapes im Programm erstellen oder Alternative
 
Ich verstehe nicht ganz wo Du hin willst...
Shapes kannst Du dynamisch erzeugen, einfärben und positionieren.
Du könntest auch etwas in der Art machen..., allein der Sinn erschließt sich mir nicht...
Delphi-Quellcode:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, ExtCtrls;

type
  TRectInfo=Record
    Farbe : TColor;
    Bounds : TRect;
  End;
  TRectInfoArray=Array of TRectInfo;
  TForm1 = class(TForm)
    Timer1: TTimer;
    procedure Timer1Timer(Sender: TObject);
    procedure FormPaint(Sender: TObject);
  private
    { Private-Deklarationen }
    FRectInfoArray:TRectInfoArray;
    procedure AddOneRect;
  public
    { Public-Deklarationen }
  end;

var
  Form1: TForm1;

implementation
const
  C_Size=100;

{$R *.dfm}
procedure TForm1.AddOneRect;
var
  idx:Integer;
begin
  SetLength(FRectInfoArray, High(FRectInfoArray) + 2);
  idx := High(FRectInfoArray);
  FRectInfoArray[idx].Farbe := Random(clWhite);
  FRectInfoArray[idx].Bounds.Left := Random(Width - C_Size);
  FRectInfoArray[idx].Bounds.Top := Random(Height - C_Size);
  FRectInfoArray[idx].Bounds.Right := FRectInfoArray[idx].Bounds.Left + Random(C_Size);
  FRectInfoArray[idx].Bounds.Bottom := FRectInfoArray[idx].Bounds.Top + Random(C_Size);
  invalidate;
end;

procedure TForm1.FormPaint(Sender: TObject);
var
  i:Integer;
begin
  for I := Low(FRectInfoArray) to High(FRectInfoArray) do
    begin
       Canvas.Brush.Color := FRectInfoArray[i].Farbe;
       Canvas.Rectangle(FRectInfoArray[i].Bounds.Left, Height - FRectInfoArray[i].Bounds.top,FRectInfoArray[i].Bounds.Right, Height - FRectInfoArray[i].Bounds.Bottom);
    end;
end;

procedure TForm1.Timer1Timer(Sender: TObject);
begin
   AddOneRect;
end;

end.

eXtense 24. Feb 2011 15:54

AW: Shapes im Programm erstellen oder Alternative
 
Vielen Dank für deine Antwort.
Ich werde den Quelltext, sobald ich ihn verstanden habe mal testen.
Der Sinn ist wie oben geschrieben "Übung" bzw aneignung neuen Wissens.


Alle Zeitangaben in WEZ +1. Es ist jetzt 11:38 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