Entwickler-Ecke
Windows API - SetMapMode
adler - Sa 01.10.05 14:55
Titel: SetMapMode
Hallo.
Ich glaube mein SetMapMode(Handle, MM_...) funktioniert nicht.
So sieht es aus:
Delphi-Quelltext
1: 2: 3:
| SetMapMode(Panel1.Handle, MM_LOMETRIC); Panel1.Height := 550; Panel1.Width := 850; |
Und müsste dann eigentlich 55 mm Hoch und 85 mm Breit sein oder?
Bitte um Hilfe.
Moderiert von
raziel: Topic aus Sonstiges verschoben am Di 04.10.2005 um 09:34
Sprint - Sa 01.10.05 15:21
SetMapMode erwartet als ersten Parameter ein DeviceContext Handle und kein Fensterhandle.
adler - Sa 01.10.05 15:48
Und den hat ein Panel nicht oder?
Was kann ich dann nehmen?
Sprint - Sa 01.10.05 16:03
adler hat folgendes geschrieben: |
| Und den hat ein Panel nicht oder? Was kann ich dann nehmen? |
Mit
GETWINDOWDC,
GETDC oder mit der Delphi Funktion GetDeviceContext (TWinControl) eins erzeugen.
adler - Sa 01.10.05 16:24
Die Antwort versteh ich nicht, habe mir die Suche mal angeguckt, aber ich versteh es nicht, kannst du nicht ein Beispiel machen?
Wie ich das erzeugen soll.
Sprint - Sa 01.10.05 16:40
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9:
| var DC: HDC; begin
DC := GetDC(Panel1.Handle); ReleaseDC(Panel1.Handle, DC);
end; |
adler - Sa 01.10.05 16:52
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9:
| procedure TForm1.FormShow(Sender: TObject); var DC: HDC; begin DC := GetDC(Panel1.Handle); SetMapMode( DC , MM_LOMETRIC); Panel1.Height := 550; Panel1.Width := 850; end; |
Nunja, kein Fehler aber geht net so wie am Anfang.
Sprint - Sa 01.10.05 17:10
Heigth und Width sind Werte in Pixel und nicht Millimeter.
adler - Sa 01.10.05 17:18
Und wie gebe ich dann die breite und höhe in mm an?
Ich will die ja in mm einstellen können.
Alstar - Sa 01.10.05 18:36
Musst Du umrechnen. Es gibt die Property
dann musst du nurnoch Inch in CM umrechenen und dann kannst du berechnen wieviele Pixel auf einen Millimeter passen ...
Alstar
Lannes - Sa 01.10.05 21:01
Hallo,
Screen.PixelPerInch gilt doch nur für die vertikalen Maße,
oder irre ich mich da :?:
Alstar - So 02.10.05 11:09
Na und? Pixel sind quadratisch. Sprich: Vertikale und Horizontale Maße sind gleich.
Alstar
Lannes - So 02.10.05 11:36
Hallo,
:gruebel:
Wie muss ich denn das interpretieren?
Delphi-Hilfe hat folgendes geschrieben: |
| Verwenden Sie die Eigenschaft PixelsPerInch, wenn Maße von Pixel in Zoll (und umgekehrt) konvertiert werden müssen. PixelsPerInch gilt nur für vertikale Maße. Die meisten Bildschirme verwenden für horizontale Maße einen anderen Skalierungsfaktor. Der Wert in PixelsPerInch wird von Windows gesetzt, wenn Delphi geladen wird. |
Ich rechne in einem aktuellen Programm mit PixelsPerInch,
bei einem 19" Röhrenbildschirm ist die Berechnung ok,
auf einem anderen Rechner mit 19" Flachbildschirm ist
nur die vertikale Berechnung in Ordnung.
Alstar - So 02.10.05 11:42
Axxo?! :gruebel:
Dein 19" LCD hat nicht zufällig die Auflösung von 1280 x 1024?!
Alstar
Lannes - So 02.10.05 12:20
Hallo,
genau, richtig geraten :wink:
In meinem Programm erstelle ich Tabellen im Richedit über RTF-Code.
Dazu errechne ich die Textbreite per TextWidth und erhalte einen Wert in Pixel.
Um die breite der Tabellenspalten festzulegen muss ich mit Twips arbeiten,
diese errechnen sich wie folgt:
1 Inch = 1440 Twips
1 Inch = ???? Pixel horizontal < da liegt das Problem
Alstar - So 02.10.05 13:15
Das Problem liegt darin, dass die Auflösungen bei 17" und 19" TFT-Monitoren etwas komisch ist.
1280 x 1024 ergibt ein Seitenverhältnis von 1.25:1 anstatt von normalerweise 1.33:1
[ot]
Gibt es eigentlich 19" TFTs mit einer höheren Auflösung als 1280 x 1024?
[/ot]
Alstar
BenBE - So 02.10.05 14:03
@Alstar: Ja, gibt es, allerdings kann sich die niemand leisten ...
Achso, noch was: Mein TFT hat physikalisch 38:30 cm bei 1.25:1 Bildverhältnis.
D.h. 1280 Pixel horizontal sind 38cm, 1024 Pixel vertikal sind 30cm. Um diese Informationen für jeden Monitor auslesen zu können, müsstest Du generell über die EDID-Informationen die Hardware abfragen. Da aber EDID nur bei Verfügbarkeit von DDC2 von der Grafikkarte abgefragt werden kann, ist ein Echtheitsgetreues Bild von den Maßstäben her nicht vollständig erreichbar.
Flocke - Mo 03.10.05 11:31
| Zitat: |
1 Inch = 1440 Twips
1 Inch = ???? Pixel horizontal < da liegt das Problem |
So:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8:
| function HorizontalResolution: integer; var dc: HDC; begin dc := GetDC(0); Result := GetDeviceCaps(dc, LOGPIXELSX); ReleaseDC(0, dc); end; |
Lannes - Mo 11.12.06 21:01
Hallo Flocke,
hab Deine Antwort vor einem Jahr wohl irgendwie übersehen,
es funktioniert, Danke :)
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2026 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!