Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Trotz Rundung prezise zeichnen (https://www.delphipraxis.net/158054-trotz-rundung-prezise-zeichnen.html)

Dunkelbunt27 3. Feb 2011 18:31

Trotz Rundung prezise zeichnen
 
Liste der Anhänge anzeigen (Anzahl: 1)
Hallo Delphi Praxis,

Ich rechne ein Netz aus Waagerechten udn Senkrechten Linien in einer Schleife aus.
Delphi-Quellcode:
KaestchenBreite      :=round((Zeichenflaeche.Width-RandLinks-RandRechts)/AnzahlSpalten);
KaestchenHoehe       :=round((Zeichenflaeche.Height-RandOben-RandUnten)/AnzahlZeilen);
Delphi-Quellcode:
for Zeilenzaehler := 0 to AnzahlZeilen do
   begin
      Form1.Canvas.MoveTo(RandLinks,RandOben + Zeilenzaehler*Kaestchenhoehe);
      Form1.Canvas.LineTo((Zeichenflaeche.Width-RandRechts),RandOben + Zeilenzaehler*Kaestchenhoehe);
    end;

   for Spaltenzaehler := 0 to AnzahlSpalten do
    begin
      Form1.Canvas.MoveTo(RandLinks + Spaltenzaehler*KaestchenBreite ,RandOben);
      Form1.Canvas.LineTo(RandLinks + Spaltenzaehler*KaestchenBreite ,(Zeichenflaeche.Height-RandOben));
    end;
Das Ganze sieht aus wie im Anhang.
Wenn ich die Größe des Programmsändere ändert sich auch die Größe des Rasters, bei einigen Größen treten durch die Rundung Fehler auf.
Es dürfen aber auch unten rechts nur volle Kästchen entstehen.

Weiß jemand, wie ich immer volle Kästchen bekomme?

FG Dunkelbunt

Namenloser 3. Feb 2011 18:37

AW: Trotz Rundung prezise zeichnen
 
Das Problem ist das
Delphi-Quellcode:
round()
– änder mal den Variablentyp in
Delphi-Quellcode:
single
oder
Delphi-Quellcode:
double
und verschiebe das
Delphi-Quellcode:
round()
in die Berechnung in der Schleife:
Delphi-Quellcode:
KaestchenBreite := (Zeichenflaeche.Width - RandLinks - RandRechts)/AnzahlSpalten;
KaestchenHoehe := (Zeichenflaeche.Height - RandOben - RandUnten)/AnzahlZeilen;

for Zeilenzaehler := 0 to AnzahlZeilen do
   begin
      Form1.Canvas.MoveTo(RandLinks, round(RandOben + Zeilenzaehler*Kaestchenhoehe));
      Form1.Canvas.LineTo(Zeichenflaeche.Width-RandRechts, round(RandOben + Zeilenzaehler*Kaestchenhoehe));
   end;

{ ... }

rollstuhlfahrer 3. Feb 2011 18:41

AW: Trotz Rundung prezise zeichnen
 
Deine Längen- und Höhenbestimmung für Zeilen und Spalten stimmt nicht.

Vermutlich ist
Delphi-Quellcode:
(Zeichenflaeche.Width-RandRechts)
keiner als
Delphi-Quellcode:
RandLinks + AlzahlSpalten*KaestchenBreite
.

Bernhard

Dunkelbunt27 3. Feb 2011 18:44

AW: Trotz Rundung prezise zeichnen
 
@ rollstuhlfahrer
Doch, es stimmt so wie es ist, aber trotzdem danke, du hast ja nur einen kleinen Ausschnitt gesehen.

@ NamenLozer
Super! Nun funktioniert es genau wie es soll.

Danke euch beiden! :dp:


Alle Zeitangaben in WEZ +1. Es ist jetzt 04:56 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