Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Probleme mit Canvas (https://www.delphipraxis.net/100788-probleme-mit-canvas.html)

crtl 3. Okt 2007 22:21


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

Cyberbob 4. Okt 2007 01:54

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?).

oki 4. Okt 2007 06:54

Re: Probleme mit Canvas
 
Moin,

was soll das:
Delphi-Quellcode:
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;
Und wo soll das hin führen? Werden die Repeat-schleifen auch mal verlassen? Das solltest du als erstes mit dem Debugger teten.

Gruß oki

Bernhard Geyer 4. Okt 2007 07:33

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 19:00 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz