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