Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi canvas random paint (https://www.delphipraxis.net/60934-canvas-random-paint.html)

Informatik_Doppelstundler 14. Jan 2006 14:26


canvas random paint
 
Hi. arbeite daserste mal mit canvas. soll jetzt ne figur (in diesem falle zur vereinfachunf nur ein rechteck) zufällig zeichnen lassen. dazu habe ich jetzt folgenden code geschrieben:
Delphi-Quellcode:
procedure TForm1.Button2Click(Sender: TObject);
var x:integer;
var y:integer;
var Breite:integer;
var Hoehe:integer;
begin
 x:=random(450);
 y:=random(300);
 Breite:=x + random(120);
 Hoehe:=y + random(150);
 ImBild.Canvas.Rectangle(x,y,Breite,Hoehe);
end;
wenn ich jetzt auf button 2 (caption: RANDOM PAINT!) klicke, passiert gar nichts. warum?
ich habe mir schon gedacht, dass die zufallskoordinaten den punktes rechts unten möglicherweise kleiner sind, also über dem ausgangspunkt (x/y) liegen, deshalb habe ich halt
Delphi-Quellcode:
Breite:=[b]x[/b] + random(120);
 Hoehe:=[b]y[/b] + random(150);
eingebaut. bringt aber auch nichts

Nikolas 14. Jan 2006 14:38

Re: canvas random paint
 
Kann es vielleicht einfach sein, dass dein Image zu klein ist? Oder die Farbe des Stifts auf Weiss gesetzt wurde?
Der Code funktioniert so.

Delphi-Quellcode:
var x:integer;
var y:integer;
var Breite:integer;
var Hoehe:integer;
Du musst var nicht vor jede Zeile schreiben. So reicht es völlig:

Delphi-Quellcode:
var x:integer;
 y:integer;
 Breite:integer;
 Hoehe:integer;
 begin;
 ...

Zitat:

(caption: RANDOM PAINT!)
Wichtige Info :)

---Bernhard--- 14. Jan 2006 14:39

Re: canvas random paint
 
Hi!

Der Code ist eigentlich schon richtig. Aber als erstes solltest du ihn ordentlich formatieren!
Delphi-Quellcode:
procedure TForm1.Button2Click(Sender: TObject);
var
  x:integer;
  y:integer;
  Breite:integer;
  Hoehe:integer;
begin
  x:=random(450);
  y:=random(300);
  Breite:=x + random(120);
  Hoehe:=y + random(150);
  paintbox1.Canvas.Rectangle(x,y,Breite,Hoehe);
end;
Dann ruf im FormCreate "Randomize;" einmal auf, ansonsten schaut das Rechteck immer gleich aus!

Wenn es noch nicht geht, liegt es wohl an "ImBild". Was ist denn das für ein Typ/Komponente?

Informatik_Doppelstundler 15. Jan 2006 17:23

Re: canvas random paint
 
also das image ist auf keinen fall zu klein, und die stiftfarbe isn ganz normal (sieht man daran, dass die funktion von button 1 - ein haus zeichnen zu lassen mit entsprechender koordinateneingabe- einwandfrei funktioniert.)das mit dem var weiß ich schon, nur komm ich immer durcheinander, wann ich dann n simikolon setzen muss und wann nicht.. :lol: . :oops: .
also ImBild ist ein ganz gewöhnliches "Image" (unter zusätzlich..).
und das mit dem randomize aufrufen hab ich noch net verstanden :?:
also einfach form create erstellen und randomize; reinschreiben?. Hab ich auf jeden Fall versucht, nur irgendwie fängt er noch nichtmal an das image sichtbar zu machen....da klappt irgendwie gar nichts

Nikolas 15. Jan 2006 17:29

Re: canvas random paint
 
Ich habe mal deinen Code ausprobiert und bei mor läuft es ohne Probleme.
Hast du schon mal probiert nur einen Button mit diesem Code und ein Image in ein ganz neues Projekt zu setzen?
Was hast du denn sonst noch in deinem Programm? Veränderst du irgendwo die Stiftfarbe? Der Code hier ist richtig, der Fehler muss an einer anderen Stelle liegen.

Informatik_Doppelstundler 17. Jan 2006 15:01

Re: canvas random paint
 
also ich habe noch nen zweiten button der auf das gleiche image zugreift, vielleicht liegts ja dadran, werd ich mal usprobieren

EDIT: Also komischerweise gehts jetzt, obwohl ich nichts anderes gemacht habe als den code zu kopieren.
Das Rechteck hab ich nu. Danke!
Hab aber noch ne Frage dazu: ich möchte nicht nur das rechteck, sondern ne art simples Haus zeichnen lassen. mein code sieht bisher so aus:
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var
  x:integer;
  y:integer;
  Breite:integer;
  Hoehe:integer;
  Spitze:integer;
begin
  x:=random(450);
  y:=random(300);
  Breite:=x + random(120);
  Hoehe:=y + random(150);
  Spitze:= (x +  Breite)/2 ;
  paintbox1.Canvas.Rectangle(x,y,Breite,Hoehe);
  paintbox1.Canvas.MoveTo(x,y);
  paintbox1.Canvas.LineTo(x + Spitze);
Jetzt habe ich das Problem, dass er mir meldet: "Inkompatible Typen: Integer und Extended". Ich denke mal das liegt an dem "/2" bei "Spitze". Aber wie soll ich das denn sonst machen??

---Bernhard--- 17. Jan 2006 17:18

Re: canvas random paint
 
Benutz "div" anstatt "/" bei Integer.
Oder das Ergebniss durch "round()" runden lassen

Informatik_Doppelstundler 19. Jan 2006 12:41

Re: canvas random paint
 
ok, danke für die antworten, funzt alles. nur die koordinaten stimmen noch nicht so ganz...muss ich nochmal gucken.


Alle Zeitangaben in WEZ +1. Es ist jetzt 18:21 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz