ungleichmäßige polygone

Hallo,
ich habe eine Frage zu Delphi. Ich wollte eine Funktion von Paint nachprogrammieren, nämlich die irgendwelche Formen zu zeichnen mit geraden Linien. Jedoch kann ich die Form nie schließen um eine neue anzufangen.Hier ist mein Quellcode

unit Unit1;

interface

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

type
TForm1 = class(TForm)
Image1: TImage;
procedure Image1Click(Sender: TObject);
private
{ Private-Deklarationen }
public
{ Public-Deklarationen }
end;

var
Form1: TForm1;

implementation

{$R *.dfm}

var zaehler:integer;

procedure TForm1.Image1Click(Sender: TObject);
var Mausposition,Startposition:TPoint;
x,y,Oben,Links:integer;
begin
zaehler:=zaehler+1;
Mausposition:=ScreenToClient(Mouse.CursorPos);
x:=Mausposition.x;
y:=Mausposition.y;
Oben:=Image1.Top;
Links:=Image1.Left;
if zaehler=1 then
begin
Startposition:=Mausposition;
Image1.Canvas.MoveTo(x-Links,y-Oben);
end
else
begin
if (Mausposition.x=Startposition.x-10) and (Mausposition.y>=Startposition.y-10) then
begin
Image1.Canvas.LineTo(Startposition.x-Links,Startposition.y-Oben);
zaehler:=0;
end
else
Image1.Canvas.LineTo(x-Links,y-Oben);
end;
end;

end.

Ich hoffe jemand hat eine Lösung wie ich das Problem beheben kann.
Danke schon einmal im Voraus Maehks

Hallo Maehks,

du machst hier wieder einen der Fehler, die du in dem anderen Programm gemacht hast. Lies dir mal etwas zum Thema globale und lokale Variablen durch.

Ein Ansatzpunkt für dich, setze einen Breakpoint auf diese Zeile

if (Mausposition.x = Startposition.x - 10) and (Mausposition.y \>= Startposition.y - 10) then begin

und sieh dir die Inhalte der Variablen an.

Zudem solltest du deinen Quelltext formatieren so dass er leichter lesbar ist. Hier dein Quelltext wie ich ihn formatiert habe.

procedure TForm1.Image1Click(Sender: TObject);
var
 Mausposition, Startposition : TPoint;
 x, y, Oben, Links : integer;
begin
 zaehler := zaehler + 1;
 Mausposition := ScreenToClient(Mouse.CursorPos);
 x := Mausposition.x;
 y := Mausposition.y;
 Oben := Image1.Top;
 Links := Image1.Left;
 if (zaehler = 1) then begin
 Startposition := Mausposition;
 Image1.Canvas.MoveTo(x - Links, y - Oben);
 end else begin
 if (Mausposition.x = Startposition.x - 10) and
 (Mausposition.y \>= Startposition.y - 10) then
 begin
 Image1.Canvas.LineTo(Startposition.x - Links, Startposition.y - Oben);
 zaehler := 0;
 end else
 Image1.Canvas.LineTo(x - Links, y - Oben);
 end;
end;

Gruß Mike

Danke, eigentlich hätte ich auch selbst drauf kommen können, dass das eine globale Variable sein muss.

Manchmal muss man nur mit der Nase darauf gestupst werden :smile:
Freud mich dass ich wieder helfen konnte.

Gruß Mike