![]() |
Re: Überprüfung eines Image
Delphi-Quellcode:
Das hab ich am Anfang in die Prozedur eingefügt die ein Haus bauen soll. Aber wenn ich das Programm jetzt ausführen möchte kommt folgendes:
For i := xstelle to xstelle+breite do
begin For j := ystelle to ystelle - hoehe - (breite div 2) do begin ImBebauung.Canvas.Pixels[i,j]<> clwhite; end; end; Zitat:
|
Re: Überprüfung eines Image
Die Fehlermeldung kenne ich, allerdings auf deutsch:
"Die for-Schleifenvariable muss eine einfache, lokale Variable sein" Diese hatte ich als ich anfing zu programmieren dauernd. Du musst wahrscheinlich die Variablen i und j in der Prozedur deklarieren, in der deine for-Schleife steht. Zeig mal etwas mehr Quelltext! |
Re: Überprüfung eines Image
Na gut dann poste ich am besten mal alles *G*
Delphi-Quellcode:
unit mBebauung;
interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, ExtCtrls; type TBebauung = class(TForm) ImBebauung: TImage; BtStrasse: TButton; BtRotes_Haus: TButton; BtSchwarzes_Haus: TButton; BtGelbes_Haus: TButton; Label1: TLabel; Label2: TLabel; Label3: TLabel; Label4: TLabel; Edxstelle: TEdit; Edystelle: TEdit; Edbreite: TEdit; Edhoehe: TEdit; BtZuruecksetzen: TButton; BtBeenden: TButton; Label5: TLabel; procedure BtBeendenClick(Sender: TObject); procedure BtZuruecksetzenClick(Sender: TObject); procedure BtGelbes_HausClick(Sender: TObject); procedure BtRotes_HausClick(Sender: TObject); procedure BtSchwarzes_HausClick(Sender: TObject); procedure BtStrasseClick(Sender: TObject); private { Private declarations } var xstelle : Integer; var ystelle : Integer; var breite : Integer; var hoehe : Integer; var abstand : Integer; var i : Integer; var j : Integer; public { Public declarations } end; var Bebauung: TBebauung; implementation {$R *.dfm} procedure TBebauung.BtStrasseClick(Sender: TObject); begin with ImBebauung.Canvas do begin abstand:= 20; MoveTo (0,480); Brush.Color:=clBlack; Rectangle (0,480,1000,420); Pen.Color:=clWhite; MoveTo (abstand-20,450); LineTo (abstand,450); repeat begin abstand:= abstand +20; MoveTo (abstand,450); abstand:= abstand + 20; LineTo (abstand,450) end until abstand > 1000; Brush.Color:=clWhite; Pen.Color:=clBlack; Pen.Width:=0 end; end; procedure TBebauung.BtSchwarzes_HausClick(Sender: TObject); begin try strtoint(Edxstelle.text); strtoint(Edystelle.text); strtoint(Edhoehe.text); strtoint(Edbreite.text) except showmessage('Bitte geben sie jeweils eine Zahl für Xstelle, Ystelle, Breite und Hoehe an!'); exit end; xstelle:= StrToInt(Edxstelle.text); ystelle:= StrToInt(Edystelle.text); breite:= StrToInt(Edbreite.text); hoehe:= StrToInt(Edhoehe.text); For i := xstelle to xstelle+breite do begin For j := ystelle to ystelle - hoehe - (breite div 2) do begin If ImBebauung.Canvas.Pixels[i,j]<> clwhite then showmessage ('Bauplatz ist nicht frei! Das Haus konnte nicht gebaut werden!'); end; end; with ImBebauung.Canvas do begin Brush.COlor:=clBlack; Pen.COlor:=clBlack; Pen.Width:=2; Rectangle(xstelle,ystelle,xstelle+breite,ystelle-hoehe); MoveTo(xstelle,ystelle-hoehe); LineTo(xstelle+breite div 2,ystelle-hoehe-breite div 2); LineTo(xstelle+breite,ystelle -hoehe); Brush.Color:=clWhite; Pen.Color:=clBlack; Pen.Width:=0 end end; procedure TBebauung.BtRotes_HausClick(Sender: TObject); begin try strtoint(Edxstelle.text); strtoint(Edystelle.text); strtoint(Edhoehe.text); strtoint(Edbreite.text) except showmessage('Bitte geben sie jeweils eine Zahl für Xstelle, Ystelle, Breite und Hoehe an!'); exit end; xstelle:= StrToInt(Edxstelle.text); ystelle:= StrToInt(Edystelle.text); breite:= StrToInt(Edbreite.text); hoehe:= StrToInt(Edhoehe.text); For i := xstelle to xstelle+breite do begin For j := ystelle to ystelle - hoehe - (breite div 2) do begin ImBebauung.Canvas.Pixels[i,j]<> clwhite; end; end; with ImBebauung.Canvas do begin Brush.COlor:=clRed; Pen.COlor:=clRed; Pen.Width:=2; Pen.Width:=2; Rectangle(xstelle,ystelle,xstelle+breite,ystelle-hoehe); MoveTo(xstelle,ystelle-hoehe); LineTo(xstelle+breite div 2,ystelle-hoehe-breite div 2); LineTo(xstelle+breite,ystelle -hoehe); Brush.Color:=clWhite; Pen.Color:=clBlack; Pen.Width:=0 end; end; procedure TBebauung.BtGelbes_HausClick(Sender: TObject); begin try strtoint(Edxstelle.text); strtoint(Edystelle.text); strtoint(Edhoehe.text); strtoint(Edbreite.text) except showmessage('Bitte geben sie jeweils eine Zahl für Xstelle, Ystelle, Breite und Hoehe an!'); exit end; xstelle:= StrToInt(Edxstelle.text); ystelle:= StrToInt(Edystelle.text); breite:= StrToInt(Edbreite.text); hoehe:= StrToInt(Edhoehe.text); For i := xstelle to xstelle+breite do begin For j := ystelle to ystelle - hoehe - (breite div 2) do begin ImBebauung.Canvas.Pixels[i,j]<> clwhite; end; end; with ImBebauung.Canvas do begin Brush.COlor:=clYellow; Pen.COlor:=clYellow; Pen.Width:=2; Pen.Width:=2; Rectangle(xstelle,ystelle,xstelle+breite,ystelle-hoehe); MoveTo(xstelle,ystelle-hoehe); LineTo(xstelle+breite div 2,ystelle-hoehe-breite div 2); LineTo(xstelle+breite,ystelle -hoehe); Brush.Color:=clWhite; Pen.Color:=clBlack; Pen.Width:=0 end; end; procedure TBebauung.BtZuruecksetzenClick(Sender: TObject); begin with ImBebauung.Canvas do begin Brush.Color:=clWhite; Pen.Color:=clWhite; Rectangle(0,500,1000,0); Pen.Color:=clBlack; end; end; procedure TBebauung.BtBeendenClick(Sender: TObject); begin close end; end. |
Re: Überprüfung eines Image
Hehe du hattest recht ;-) Thx :thumb:
[Edit] :cry: Aber Es funktioniert nicht richtig... Die Häuser werden immer noch übereinander gemalt ! |
Re: Überprüfung eines Image
Delphi-Quellcode:
Die Variablen dürfen nicht oben unter private deklariert werden. Dies muss in der Prozedur selbst geschehen!
procedure TBebauung.BtSchwarzes_HausClick(Sender: TObject);
----->var i,j: integer;<----- begin try strtoint(Edxstelle.text); strtoint(Edystelle.text); strtoint(Edhoehe.text); strtoint(Edbreite.text) except showmessage('Bitte geben sie jeweils eine Zahl für Xstelle, Ystelle, Breite und Hoehe an!'); exit end; xstelle:= StrToInt(Edxstelle.text); ystelle:= StrToInt(Edystelle.text); breite:= StrToInt(Edbreite.text); hoehe:= StrToInt(Edhoehe.text); For i := xstelle to xstelle+breite do begin For j := ystelle to ystelle - hoehe - (breite div 2) do begin If ImBebauung.Canvas.Pixels[i,j]<> clwhite then showmessage ('Bauplatz ist nicht frei! Das Haus konnte nicht gebaut werden!'); end; end; |
Re: Überprüfung eines Image
OK. Bitteschön :-D
|
DP-Maintenance
Dieses Thema wurde von "alcaeus" von "Programmieren allgemein" nach "Sonstige Fragen zu Delphi" verschoben.
Ist eine Delphi-Frage ;) |
Alle Zeitangaben in WEZ +1. Es ist jetzt 14:13 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