![]() |
bild mit bällen füllen
HiHo.
Ich habe ein kleines Schleifenproblem, da ich noch nciht so viel erfahrung im Programmieren von schleifen in verbingung mit canvas habe. Mein Problem ist, dass ich ein komplettes image mit kreisen vollmalen will. sie sollen damit genau nebeneinander und untereinander liegen. Ich bekomm es aber nur hin, dass die oberste reihe kreise gemalt wird und die erste senkrechte. Ich hoffe irgendwer hat eine schnelle und einfache Lösung. Ich möchte es übrigens nur mit while Schleifen machen, da sonst mein INFO lehrer böse ist. :-D (P.S. ich habe eine Klasse für die Kreise = Bälle erstellt)
Delphi-Quellcode:
unit Unit1;
interface uses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, ExtCtrls; type TForm1 = class(TForm) ImageBall: TImage; Button1: TButton; procedure FormCreate(Sender: TObject); procedure Button1Click(Sender: TObject); private { Private declarations } public { Public declarations } end; TBall = class Farbe :TColor; Radius :integer; OrtX :integer; OrtY :integer; private procedure initialisieren; procedure zeichnen; end; var Form1: TForm1; Ball: TBall; implementation {$R *.DFM} procedure TBall.initialisieren; begin Farbe := clred; Radius := 10; OrtX := -10; OrtY := 10; end; procedure TBall.zeichnen; begin Form1.ImageBall.canvas.brush.color := Farbe; Form1.ImageBall.canvas.ellipse(OrtX -Radius, OrtY-Radius, OrtX+Radius, OrtY+Radius); end; {################################} procedure TForm1.FormCreate(Sender: TObject); begin Ball := TBall.create; Ball.initialisieren; end; procedure TForm1.Button1Click(Sender: TObject); begin with Ball do begin while OrtX < Form1.ImageBall.width do begin OrtX := ORtX + 2*Radius; zeichnen; end; OrtX := Radius; while OrtY < Form1.ImageBall.height do begin OrtY := ORtY + 2*Radius; zeichnen; end; end; end; end. |
Re: bild mit bällen füllen
Deine Klasse solltest du noch einmal überdenken :wink: . Erstens sind public Felder pöse (dafür gibts Properties) und zweitens sollen Klassen ja eine Kapselung sein, wenn du darin aber direkt auf die Form zugreifst, sind beide Klassen wieder fest miteinander verschränkt.
Zu deinem Problem: Du musst die Schleifen ineinander verschachteln. Zitat:
|
Re: bild mit bällen füllen
das ist mir auch schon aufgefallen, nur bei versuchen das hinzubekommen, ist mein pc dann meistens abgestürzt! :roll:
|
Re: bild mit bällen füllen
Dein Fehler ist, daß du die 2 Schleifen getrennt voneinander ausführst. Um zu deinem gewünschten Ergebnis zu kommen, müßtest du sie aber verschachteln, ála
Delphi-Quellcode:
while Y < Ymax Do
Begin X := Xmin; while X < Xmax Do Begin //Kreis zeichnen X := newX; End; Y := newY; End; |
Re: bild mit bällen füllen
Danke.
Geht wunderbar. Ich versteh das acuh. nur irgendwie wäre ich nich selber drauf gekommen! :-D |
Alle Zeitangaben in WEZ +1. Es ist jetzt 00:26 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