![]() |
Probleme mit Canvas
Hallo, Ich habe Probleme mit der Canvas Funktion und würde mich freuen, wenn mir jemand einen Tipp geben könnte.
Delphi-Quellcode:
procedure TFormPalettierung.SpeedButtonZeichnenClick(Sender: TObject);
var Breite, Hoehe : Integer; c,v,p : Single; begin Lv := StrToFloat (EditLaenge.Text); Bv := StrToFloat (EditBreite.Text); Hv := StrToFloat (EditHoehe.Text); repaint; if ComboBoxPalettenwahl.ItemIndex = 0 then Breite := 1200; if ComboBoxPalettenwahl.ItemIndex = 0 then Hoehe := 800; if ComboBoxPalettenwahl.ItemIndex = 1 then Breite := 1200; if ComboBoxPalettenwahl.Itemindex = 1 then Hoehe := 1000; imageDraufsicht.Canvas.rectangle(0,0, Breite div 5 , Hoehe div 5 ); Lv:= Lv/5; Bv:= Bv/5; Hv:= Hv/5; Breite := Breite div 5; Hoehe := Hoehe div 5; v:=1; c:=1; begin repeat c:=c+1 until (c+1) * Bv > Breite; if (c+1) * Bv > Breite then c:= c-1; repeat v:=v+1 until (v+1) * Lv > Hoehe; if (v+1) * Lv > Hoehe then v:= v-1; end; //1.Senkrechte imageDraufsicht.Canvas.MoveTo(round(Bv),0); imageDraufsicht.Canvas.LineTo(round(Bv),round(v * Lv)); //1.Waagerechte imageDraufsicht.Canvas.MoveTo(0,round(Lv)); imageDraufsicht.Canvas.LineTo(round(c * Bv),round(Lv)); //2.Senkrechte if 2*Bv < Breite then begin imageDraufsicht.Canvas.MoveTo(round(2 * Bv ),0); imageDraufsicht.Canvas.LineTo(round(2 * Bv ),round(v * lv)); end; //2.Waagerechte if 2 * Lv < Hoehe then begin imageDraufsicht.Canvas.MoveTo(0,round(2 * Lv)); imageDraufsicht.Canvas.LineTo(round(2 * Bv),round(2 * Lv)); end; Das zeichnen der Senk- / Waagerechten müsste eigentlich mit repeat, while etc.. funktionen gemacht werden, da evtl. eine große Anzahl dieser vorkommen kann und diese von den Parametern c und v abhängt, jedoch hängt sich das Programm immer auf sobald ich diese Funktionen nutze. Evtl. hat jemand einen Hinweis. Danke |
Re: Probleme mit Canvas
Debugge doch mal deine Prozedur und schau, wo er hängen bleibt.
Nicht für ungut aber so wie du das geschrieben hast, ist der Code schwer lesbar. Ist das die ganze funktion? Sieht aus, als würe in der Mitte was fehlen (wo kommt das überflüssige begin her?). |
Re: Probleme mit Canvas
Moin,
was soll das:
Delphi-Quellcode:
Und wo soll das hin führen? Werden die Repeat-schleifen auch mal verlassen? Das solltest du als erstes mit dem Debugger teten.
begin
repeat c:=c+1 until (c+1) * Bv > Breite; if (c+1) * Bv > Breite then c:= c-1; repeat v:=v+1 until (v+1) * Lv > Hoehe; if (v+1) * Lv > Hoehe then v:= v-1; end; Gruß oki |
Re: Probleme mit Canvas
Zusätzlicher Hinweis:
Das Zeichnen von GUI-Controls soolte immer in der OnPaint/OnDraw-Methode erfolgen bzw. bei Ableitungen von Controls in der Paint-Methode. Um das neuzeichnen zu erreichnen sollte das Control mittels Invalitate "ungültig" gemacht werden. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 11:03 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 by Thomas Breitkreuz