Auf einem Imagefeld ein Vieleck zeichnen lassen

Für Fragen von Einsteigern und Programmieranfängern...
Antworten
darkdantedante
Beiträge: 9
Registriert: Fr 12. Okt 2012, 15:37

Auf einem Imagefeld ein Vieleck zeichnen lassen

Beitrag von darkdantedante »

Ich hab da schon wieder ein Problem :?
Und zwar habe ich ebend ein Programm geschrieben, in dem in ein Imagefeld ein Vieleck gezeichnet werden soll.
Die Anzahl der Ecken sollen aus einem Spineditfeld entnommen werden.
Würde mich freuen wenn jemand den Fehler findet ^^

Beim starten des Programmes passiert nichts, nur ein weißes Imagefeld wird angezeigt! :roll:

Code: Alles auswählen

procedure TForm1.Button1Click(Sender: TObject);
 
          VAR anzahl_ecken: integer;
              xm: integer;
              ym: integer;
              i: integer;
              radius: integer;
              x: integer;
              y: integer;
              winkelschritt: double;
              winkel: double;
 
begin
            radius:=200;
            form1.Image1.canvas.Brush.color:=clwhite;
            form1.Image1.canvas.Fillrect(rect(0,0,image1.width,image1.height));
            form1.Image1.canvas.Pen.color:=clblack;
            xm:=image1.width div 2;
            ym:=image1.Height div 2;
            anzahl_ecken:=strtoint(spinedit1.Text);
            winkelschritt:=2*pi/anzahl_ecken;
            image1.canvas.moveto(xm+radius,ym);
 
            FOR i:=1 TO anzahl_ecken DO
            winkel:=i*winkelschritt;
            x:=round(cos(winkel)*radius)+xm;
            y:=round(sin(winkel)*radius)+ym;
            image1.canvas.lineto(x,y);
            application.processmessages;   
end;
 
end.
Zuletzt geändert von Lori am Mi 24. Okt 2012, 17:04, insgesamt 1-mal geändert.
Grund: Bitte den Highlighter nutzen

Scotty
Beiträge: 768
Registriert: Mo 4. Mai 2009, 13:24
OS, Lazarus, FPC: Arch Linux, Lazarus 1.3 r44426M FPC 2.6.4
CPU-Target: x86_64-linux-qt/gtk2
Kontaktdaten:

Re: Auf einem Imagefeld ein Vieleck zeichnen lassen

Beitrag von Scotty »

Der Bereich wird beim jedem Repaint überschrieben. Verschiebe den Code in das OnPaint()-Ereignis. Dann solltest du zumindest etwas sehen.

darkdantedante
Beiträge: 9
Registriert: Fr 12. Okt 2012, 15:37

Re: Auf einem Imagefeld ein Vieleck zeichnen lassen

Beitrag von darkdantedante »

Scotty hat geschrieben:Der Bereich wird beim jedem Repaint überschrieben. Verschiebe den Code in das OnPaint()-Ereignis. Dann solltest du zumindest etwas sehen.
Hm...bin noch Anfänger und verstehe jetzt nicht genau was du meinst. :|

Linkat
Lazarusforum e. V.
Beiträge: 564
Registriert: So 10. Sep 2006, 23:24
OS, Lazarus, FPC: Linux Mint 22.1; Lazarus 4.0 FPC 3.2.2; RaspiOS
CPU-Target: AMD 64, ARM 64
Wohnort: nr Stuttgart

Re: Auf einem Imagefeld ein Vieleck zeichnen lassen

Beitrag von Linkat »

vor allen Dingen fehlt das begin in der for-Schleife:

Code: Alles auswählen

 
for i:=1 to anzahl_ecken do begin
.......
end;
for 
Linux Mint 21.3; Lazarus 3.4 FPC 3.2.2; RaspiOS

Scotty
Beiträge: 768
Registriert: Mo 4. Mai 2009, 13:24
OS, Lazarus, FPC: Arch Linux, Lazarus 1.3 r44426M FPC 2.6.4
CPU-Target: x86_64-linux-qt/gtk2
Kontaktdaten:

Re: Auf einem Imagefeld ein Vieleck zeichnen lassen

Beitrag von Scotty »

darkdantedante hat geschrieben:Hm...bin noch Anfänger und verstehe jetzt nicht genau was du meinst. :|
Dort wo du das OnClick()-Ereignis mit deiner Prozedur verbunden hast, kannst du ein OnPaint auswählen (falls du nicht das Standardereignis über den Doppelklick im Designer benutzt). Das Element nennt sich Objektinspektor. Das sind aber Grundlagen, die du besser in einem Einsteigerbuch nachliest.

darkdantedante
Beiträge: 9
Registriert: Fr 12. Okt 2012, 15:37

Re: Auf einem Imagefeld ein Vieleck zeichnen lassen

Beitrag von darkdantedante »

Linkat hat geschrieben:vor allen Dingen fehlt das begin in der for-Schleife:

Code: Alles auswählen

 
for i:=1 to anzahl_ecken do begin
.......
end;
for 
Vielen Dank, das war der Fehler!!! :oops:

Antworten