Einzelnen Beitrag anzeigen

Benutzerbild von Jazzman_Marburg
Jazzman_Marburg

Registriert seit: 2. Aug 2004
359 Beiträge
 
#1

Raster in Millimeter vs. Pixel zeichnen

  Alt 6. Nov 2010, 13:14
Hallo Gemeinde,
mal wieder mit einem Brett vor dem Kopf unterwegs -- hoffe es findet sich ein Experte, der es mir kurzeitig entfernen hilft.

Ich zeichne ein Grid (Raster) so wie man es aus einem kariertem Rechenheft kennt. Bei einer Voreinstellung von 20 Pixeln wird also jede 20 Pixel eine vertikale bzw. eine horizontale Linie gemalt -- woraus also das Raster entsteht. Nun möchte ich dieses Raster auf Millimeter-Einheiten umstellen, und tue mich damit schwer.
Mein Algorithmus sieht z.Z. so aus:

1. Voreinstellung (irgendeine beliebige Größe)
Delphi-Quellcode:
FBigUnits := 20;
...
2. In der Procedure CalcUnits berechne ich, wieviele der FBigUnits auf meine Zeichenfläche passen (getrennt für horizontal und vertikal):
Delphi-Quellcode:
FBigHorizontalUnits := FHeight DIV FBigUnit;
FBigVerticalUnits := FWidth DIV FBigUnit;
3. In der Procedure DrawGrid zeichne ich anschließend die vertikalen und horizontalen Linien:
Delphi-Quellcode:
FOR i := 0 TO FBigVerticalUnits DO
BEGIN
  XPos := ROUND(i * FBigUnit);
  Canvas.MoveTo (XPos, 0);
  Canvas.LineTo (XPos, FHeight);
END;
Entsprechendes für die FBigHorizontalUnits.

So, jetzt möchte ich, dass nicht alle 20 Pixel eine Linie gezeichnet wird, sondern alle 20 Millimeter. Dazu habe ich bei DelphiAbout.com diese Procedure gefunden:
Delphi-Quellcode:
procedure PixelsPerMM(canvas: TCanvas; var x, y: single) ;
var
    H:HDC;
    hres,vres,
    hsiz,vsiz:integer;
begin
    H:=canvas.handle;
    hres := GetDeviceCaps(H,HORZRES) ; {display width in pixels}
    vres := GetDeviceCaps(H,VERTRES) ; {display height in pixels}
    hsiz := GetDeviceCaps(H,HORZSIZE) ; {display width in mm}
    vsiz := GetDeviceCaps(H,VERTSIZE) ; {display height in mm}
    x := hres/hsiz;
    y := vres/vsiz;
end;
Aber ich stehe auf dem Schlauch, wie dies jetzt in meinen o.g. Algorithmus passen soll. Sieht ja schon ziemlich danach aus, als ob sie geeigent wäre,
nur weiss ich nicht, was ich mit den x und y nach dem Aufruf von PixelPerMM anfange...

Jemand eine Idee, wie ich mein Raster auf Millimeter umgestellt bekomme?

Lieben Dank & Gruß
Jazzman
--- Delphi XE Starter, Windows 8 ---
  Mit Zitat antworten Zitat