Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Genau 1 cm abmessen (https://www.delphipraxis.net/92763-genau-1-cm-abmessen.html)

Stefan92 25. Mai 2007 13:58


Genau 1 cm abmessen
 
Liste der Anhänge anzeigen (Anzahl: 1)
Hallo Leute,

ich weiss jetzt zwar nicht genau ob ich in die richtige Rubrik poste, schildere mein Problem aber trotzdem mal.

Es geht darum eine Zeichnung mit zwei Fluchtpunkten anzufertigen. Die Fluchtpunkte befinden sich in den beiden oberen Ecken des Blattes, wenn es quer liegt.
Anbei ist ein Screenshot, mit dem das ganze hoffentlich klarer wird, erstmal nur mit einem Fluchtpunkt.
Von den Fluchtpunkten sollen Strahlen bis nach unten zum Papierrand ausgehen, sodass ein Hilfsraster entsteht.
Das Problem liegt darin, dass ich zwischen den Strahlen genau 1 cm abmessen muss, und falls ich das Programm weitergeben werde, muss die Auflösung auch noch beachtet werden.
Wie stelle ich das an?

Gruß

Stefan

Klaus01 25. Mai 2007 14:02

Re: Genau 1 cm abmessen
 
Du mußt irgendwie die Auflösung (dpi draft per Inch) des Monitors ermitteln.
Mit diesem Wert kann dann der Abstand ermittelt werden.

Zu dpi beim Monitor lief hier vor einiger Zeit mal ein Thread.
Mal nach dpi & Monitor suchen: -> http://www.delphipraxis.net/internal...ht=dpi+monitor

Grüße
Klaus

BenjaminH 25. Mai 2007 14:07

Re: Genau 1 cm abmessen
 
Zitat:

Zitat von Klaus01
dpi draft per Inch

Kleine Korrektur :zwinker: das heißt dots per inch

Stefan92 25. Mai 2007 14:13

Re: Genau 1 cm abmessen
 
Ok, ich guck es mir mal an.
Wenn ich noch Fragen hab, meld ich mich.

Gruß

Stefan

Luckie 25. Mai 2007 14:14

Re: Genau 1 cm abmessen
 
Setz den MSDN-Library durchsuchenSetMapMode auf MM_LOMETRIC oder MM_HIMETRIC, dann kannst du die Angaben in Millimetern machen.

Stefan92 25. Mai 2007 14:51

Re: Genau 1 cm abmessen
 
Hm, ich hab mich zwar in der Hilfe schon schlau gemacht bezüglich SetMapMode, aber wie wende ich das jetzt prinzipiell an? Was ändert sich durch diese Funktion?
Ich will ja weiterhin Canvas benutzen.

Gruß

Stefan

Luckie 25. Mai 2007 15:19

Re: Genau 1 cm abmessen
 
Was heißt anwenden? Du legst damit einfach die Maßeinheit und den Ursprung des Koordinatensystems fest.

Stefan92 25. Mai 2007 19:01

Re: Genau 1 cm abmessen
 
Sorry, ich bin manchmal ein bisschen schwer von Begriff,

aber welches Koordinatensystem meinst du? :?
Ist es schon vorher da oder muss ich das noch implementieren?
Bis jetzt benutze ich ja lediglich eine Paintbox :gruebel: .
Ich hoffe ich hab nix falsch gemacht und bitte um Verständnis, ich habe bis jetzt relativ wenig Programmiererfahrung.

Gruß

Stefan

Khabarakh 25. Mai 2007 19:10

Re: Genau 1 cm abmessen
 
Du hast doch sicher schon einmal Koordinaten bei einer Canvas-Funktion angegeben, also muss wohl zwangsweise auch schon ein Koordinatensystem vorhanden sein :zwinker: . Das bisherige besitzt die Einheit 1 Pixel, sein Ursprung liegt in der Ecke oben links, die x-Achse verläuft nach rechts und die y-Achse nach unten. All das kannst du mit der genannten Funktion beliebig ändern.

Stefan92 25. Mai 2007 19:37

Re: Genau 1 cm abmessen
 
Ah, ich verstehe...
Dann geh ich gleich mal wieder coden um es auszuprobieren. :coder:

Gruß

Stefan

[edit]
Es gibt doch noch was, was ich nicht verstehe:
Delphi-Quellcode:
 setmapmode(MM_HIMETRIC,handle);
Diesen Code habe ich angegeben, welcher normalerweise bewirken sollte, dass eine logische Einheit 0,01 mm entspricht. Nun habe ich aber schon bei 50 Einheiten quasi 1 cm, aber eben wieder nicht ganz genau.
Irgendwas stimmt da noch nicht.
Oder muss ich beim Handle etwas Bestimmtes angeben?

SirThornberry 25. Mai 2007 19:53

Re: Genau 1 cm abmessen
 
Handle muss das der Canvas sein für das du den MapMode ändern willst. Steht aber alles in der Hilfe.

Stefan92 25. Mai 2007 20:04

Re: Genau 1 cm abmessen
 
Ich habs jetzt so versucht:
Delphi-Quellcode:
pcanvas := (sender as TPaintbox).Canvas;
pcanvas.pen.color := ClBlack;
setmapmode(MM_HIMETRIC,pcanvas.Handle);
Aber es klappt leider dennoch nicht.
Ich weiss ich geh euch bestimmt mittlerweile schon auf die Nerven, aber ich kriegs einfach net hin :wall: .

Gruß

Stefan

Hawkeye219 25. Mai 2007 20:23

Re: Genau 1 cm abmessen
 
Hallo Stefan,

vielleicht findest du einen Fehler, wenn du die Beschreibung von SetMapMode (insbesondere die Parameterliste) noch einmal genau studierst.

Gruß Hawkeye

SirThornberry 25. Mai 2007 20:33

Re: Genau 1 cm abmessen
 
geht es ums drucken oder um die größe auf dem Bildschirm? Die größe auf dem Bildschirm kannst du nicht bestimmen. Denn es lässt sich nicht ermitteln wie das Bild bei einer Röhre gestreckt wurde etc.

Stefan92 25. Mai 2007 20:40

Re: Genau 1 cm abmessen
 
Um den Bildschirm gehts.
Aber bei Programmen wie Word und so, hat man ja auch eine Messskale, mit der man den Rand justieren kann.
Ich habe bei der SETMAPMODE-Funktion jetzt die beiden Parameter vertauscht:
Delphi-Quellcode:
 setmapmode(pcanvas.handle,MM_HIMETRIC);
Jetzt wird plötzlich gar nichts mehr gezeichnet.

Gruß

Stefan

SirThornberry 25. Mai 2007 21:05

Re: Genau 1 cm abmessen
 
Der erste Parameter muss das Handle sein und der zweite der Modus. Das du jetzt plötzlich nichts mehr siehst liegt vermutlich daran das du nicht bedacht hast das die Y-Achse jetzt in die andere Richtung verläuft.
Hast du die Hilfe auch wirklich angeschaut?

Stefan92 25. Mai 2007 21:22

Re: Genau 1 cm abmessen
 
Zitat:

MM_HIMETRIC Each logical unit is mapped to 0.01 millimeter. Positive x is to the right; positive y is up.
Das ist doch eigentlich wie sonst auch. x geht nach rechts und y nach oben.
Um die ganze Geschichte jetzt mal etwas zu beschleunigen schick ich euch mal den ganzen Code:
Delphi-Quellcode:
procedure TFFluchtpunkt.PaintBox1Paint(Sender: TObject);
var
   pcanvas : TCanvas;
   i,x: Integer;
begin
  pcanvas := (sender as TPaintbox).Canvas;
  pcanvas.pen.color := ClBlack;
  setmapmode(pcanvas.handle,MM_HIMETRIC); //Hier liegt der Hund begraben
  x:=Paintbox1.Left+50;
  for i := 1 to 28 do
  begin
     pcanvas.LineTo(x,1000);
     pcanvas.MoveTo(0,0);
     x:=x+50;
  end;
  pcanvas.MoveTo(Paintbox1.Width,0);
  x:=Paintbox1.Width;
  for i := 1 to 29 do
  begin
    pcanvas.Lineto(x,1000);
    pcanvas.MoveTo(Paintbox1.Width,0);
    x:=x-50;
  end;
end;
Die Hilfe im Win SDK hab ich mir durchgelesen.

Gruß

Stefan

Apollonius 25. Mai 2007 21:31

Re: Genau 1 cm abmessen
 
Haha, wie normal auch... Normalerweise geht in Delphi y nach unten. Du musst jetzt negative y-Werte einsetzen.

Stefan92 25. Mai 2007 21:55

Re: Genau 1 cm abmessen
 
Mann ist das kompliziert oder ich zu blöd :wall: .
Für heute leg ich die Sache wahrscheinlich erstmal aufs Eis.
Hier mein aktueller Code, der auch nicht so funktioniert wie er soll:
Delphi-Quellcode:
procedure TFFluchtpunkt.PaintBox1Paint(Sender: TObject);
var
   pcanvas : TCanvas; // Hilfsvariable
   i,x: Integer;
begin
  // Canvas der Paintbox besorgen
  pcanvas := (sender as TPaintbox).Canvas;
  pcanvas.pen.color := ClBlack;
  setmapmode(pcanvas.handle,MM_LOMETRIC);
  x:=Paintbox1.Left+10000;
  for i := 1 to 28 do
  begin
     pcanvas.LineTo(x,-50000);
     pcanvas.MoveTo(0,0);
     x:=x+1000;
  end;
  pcanvas.MoveTo(Paintbox1.Width,0);
  x:=Paintbox1.Width+10000;
  for i := 1 to 29 do
  begin
    pcanvas.Lineto(x,-50000);
    pcanvas.MoveTo(Paintbox1.Width,0);
    x:=x-1000;
  end;
end;
Ich bin so verwirrt, dass ich kaum noch weiss, welche Zahl was macht...
Ich schlaf nochmal drüber.

Gruß

Stefan

BenjaminH 25. Mai 2007 21:56

Re: Genau 1 cm abmessen
 
Zitat:

Zitat von Apollonius
Haha, wie normal auch... Normalerweise geht in Delphi y nach unten. Du musst jetzt negative y-Werte einsetzen.

Dann müsste ja, wenn ich etwas um den Ursprung herum zeichne das jedesmal sichtbar sein.
Ist es aber nicht:
Delphi-Quellcode:
Canvas.Rectangle(-10,-10,10,10);
Ist nur sichtbar, wenn ich den MapMode nicht umschalte.
Strange.

Hawkeye219 25. Mai 2007 22:02

Re: Genau 1 cm abmessen
 
Benjamin, überlege einmal, wie groß der sichtbare Teil deiner Zeichnung ist.

Zitat:

MM_HIMETRIC Each logical unit is mapped to 0.01 millimeter. Positive x is to the right; positive y is up.
Gruß Hawkeye

BenjaminH 25. Mai 2007 22:13

Re: Genau 1 cm abmessen
 
Zitat:

Zitat von Hawkeye219
Benjamin, überlege einmal, wie groß der sichtbare Teil deiner Zeichnung ist.

Ahhh, danke, ich dachte die ganze Zeit das sei ein Schreibfehler und hab an 0.01 cm gedacht. Mh komisch, dann wäre das immer noch klein gewesen.. egal, jetzt klappt's :thumb:


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