Autor Beitrag
heinze
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 112

XP
D4 Prof
BeitragVerfasst: Do 02.09.04 14:39 
Hi

habe folgendes Problem mit canvas

Ich müste mehere Ringe ineinander zeichnen ( also ne Zielschscheibe) was auch klappt, nur happerts mit dem Masstab, weis vieleicht wer wie ich mm in pixel rechnen kann oder ob man iergendwie die messeinheit ändern kann?
iKilledKenny
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 394
Erhaltene Danke: 8

Win XP
D5 Prof, C# Express 2005
BeitragVerfasst: Do 02.09.04 14:44 
also canvas.pixelperinch gibt dir die pixel pro inch. ein inch hat 25,4 mm. der rest ist ein dreisatz:

bsp:

10 mm in pixel bei einer auflösung von 96 dpi:
pixel := 96 * 10 / 25.4

viele grüße
alex
MartinPb
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 698



BeitragVerfasst: Do 02.09.04 15:18 
1" = 2.54cm

Man sagt, daß ein Bildschirm 72 DPI hat. Stimmt nicht (mehr). Das war ein mal, denn jeder Bildschirm hat seine eigene DPI. Ein 14" hat eine andere wie 15" oder 17" oder 19". Wie soll es also ein Bildschirm DPI geben. Das geht noch weiter, denn es gibt die 640x480 und die 800x600 und die 1024x768 usw. Auflösung. Jede hat eine andere DPI. Man muß schon mit dem Zentimetermaß am Bildschirm nachmessen.

Vergessen wir also den Bildschirm. Auch wenn das System versucht aus der Auflösung und der Monitorgröße ein DPI zu berechnen, ganz genau wird es nicht sein.

Was schon genauer ist, daß sind die Drucker. Hier kann man relativ genau arbeiten. 600 DPI sind eben 600 Punkte pro Inch.

600 / 25.4

ergeben Menge an Pixeln pro Zentimeter (ca. 236).

Deshalb solltest du sagen ob du es drucken oder auf dem Monitor haben willst.

Aber um deine letzte Frage zu beantworten: ja, man kann auf das Metrische System umschalten. So auf die Schnelle weiß ich aber nicht wie.

_________________
Gruß
Martin
heinze Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 112

XP
D4 Prof
BeitragVerfasst: Fr 03.09.04 10:28 
Es muss nich ganz genau sein , nur auf den 1/100 mm :roll: jedenfalls bekomme ich von dem Gerät solche messangaben, aber wens nur bis auf den 1/10 mm geht reichts auch, das mit canvas.pixelperinch funzt nicht bei mir, weder in der Hilfe ist das eingetragen noch die Codeverfolständigung kennt sowas unter canvas.
Das mit 96 DPI findet man auch in der Systemsteuerung, der masstab stimmt auch ungefähr wen ich das orginal vor dem Bildschirm halte nur im inneren ist es dan zu klein, was aber auch an meinem Zeichen-funktion liegen kann
Matthias
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 121



BeitragVerfasst: Fr 03.09.04 11:01 
Hallo,

ausblenden Delphi-Quelltext
1:
  SetMapMode(Printer.Canvas.Handle, MM_HIMETRIC);					


und schon zeichnest Du mit einer Auflösung von 0,01 mm. Beachte, dass die positive Y-Richtung jetzt nach oben zeigt.

Wenn Sie weiterhin nach untern zeigen soll sieht der Code folgendermaßen aus:

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
var
  pt : TSize;
  x,y : integer;
...
begin
...
  Printer.BeginDoc;
  SetMapMode(Printer.Canvas.Handle, MM_HIMETRIC);
  setmapmode(Printer.Canvas.Handle,MM_ANISOTROPIC);// Übernimmt die Werte von MM_HIMETRIC
                                                   // ist jetzt aber frei scallierbar
  GetWindowExtEx(Printer.Canvas.Handle, pt);
  x := pt.cx;
  y := pt.cy;
  SetWindowExtEx(Printer.Canvas.Handle, x, -y, @pt); // Y-Achse drehen
...


cu
Matthias
heinze Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 112

XP
D4 Prof
BeitragVerfasst: Fr 03.09.04 13:27 
Ähmm das geht jetzt in die falsche Richtung oder ist das mit printer nicht zum ausdrucken?
Mal ne kleine Erklärung zu der Sache:
Ich hab für den Schützenverein wo ich dabei bin ein kleines Verwaltungsprog gemacht, wo die Leistungen eingegeben, gespeichert und ausgewertet werden können. Ausgewertet werden die Karten von einem Teiler-Gerät welches ich an den Rechner anschliesen will.
Die Daten die ich von den Gerät bekomme sind zb der Ring-Wert, den x und den y Abstand des Schußes ausgehend von mittelpunkt.
Mit den x und y werten will ich dan am Rechner Die Karte "nachzeichene" also nicht ausdrucken da dies ja sinnlos wäre.

Allerdings mit der rechnung von ikilldkenny (pixel := 96 * mm / 25.4 ) stimmt die sache schon zu 99% allerdings mus ich noch an der funktion noch etwas ändern da ich die größenangaben leicht falsch verstanden habe oder vieleicht auch canvas anders arbeitet und ich für den rand noch ein pixel abziehen muss
jasocul
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 6393
Erhaltene Danke: 147

Windows 7 + Windows 10
Sydney Prof + CE
BeitragVerfasst: Fr 03.09.04 14:19 
Ich will hier jetzt nichts falsches behaupten, aber die Form auf der du rummalst hat doch auch ein Canvas. Theoretisch musst Du dann also nur folgendes benutzen:
ausblenden Delphi-Quelltext
1:
 SetMapMode(Form1.Canvas.Handle, MM_HIMETRIC);					


Haut mich aber nicht, wenns nicht stimmt. Ich habe nur versucht logisch zu denken.