Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Multimedia (https://www.delphipraxis.net/16-multimedia/)
-   -   Delphi bild mit bällen füllen (https://www.delphipraxis.net/59003-bild-mit-baellen-fuellen.html)

furby 15. Dez 2005 18:25


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.

Khabarakh 15. Dez 2005 19:01

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:

Ich habe ein kleines Schleifenproblem, da ich noch nciht so viel erfahrung im Programmieren von schleifen in verbingung mit canvas habe.
Schlechte Ausrede, mit TCanvas hat das Problem überhaupt nichts zu tun :zwinker: .

furby 15. Dez 2005 19:04

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:

leddl 15. Dez 2005 19:07

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;

furby 15. Dez 2005 20:37

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