AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Trotz Rundung prezise zeichnen

Ein Thema von Dunkelbunt27 · begonnen am 3. Feb 2011 · letzter Beitrag vom 3. Feb 2011
Antwort Antwort
Benutzerbild von Dunkelbunt27
Dunkelbunt27

Registriert seit: 10. Aug 2010
232 Beiträge
 
Delphi XE Professional
 
#1

Trotz Rundung prezise zeichnen

  Alt 3. Feb 2011, 18:31
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
Miniaturansicht angehängter Grafiken
bild2.png  
  Mit Zitat antworten Zitat
Namenloser

Registriert seit: 7. Jun 2006
Ort: Karlsruhe
3.724 Beiträge
 
FreePascal / Lazarus
 
#2

AW: Trotz Rundung prezise zeichnen

  Alt 3. Feb 2011, 18:37
Das Problem ist das round() – änder mal den Variablentyp in single oder double und verschiebe das 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;

{ ... }
  Mit Zitat antworten Zitat
Benutzerbild von rollstuhlfahrer
rollstuhlfahrer

Registriert seit: 1. Aug 2007
Ort: Ludwigshafen am Rhein
1.529 Beiträge
 
Delphi 7 Professional
 
#3

AW: Trotz Rundung prezise zeichnen

  Alt 3. Feb 2011, 18:41
Deine Längen- und Höhenbestimmung für Zeilen und Spalten stimmt nicht.

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

Bernhard
Bernhard
Iliacos intra muros peccatur et extra!
  Mit Zitat antworten Zitat
Benutzerbild von Dunkelbunt27
Dunkelbunt27

Registriert seit: 10. Aug 2010
232 Beiträge
 
Delphi XE Professional
 
#4

AW: Trotz Rundung prezise zeichnen

  Alt 3. Feb 2011, 18:44
@ 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!
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 21:28 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