![]() |
Re: DisplayWidth (TField) in Milimeter umrechnen
Mir geht es doch gar nicht darum,das ich genau die gleich grösse haben will! ich hab nur die DisplayWidth und wenn ich das an List&Label übergebe, dann sind es Millimeter... ich könnte doch eigentlich von der durschnittlichen Breite eines Zeichen (in List&Label ist es Arial 10) die ich mit TTextMetric -> Objekt.tmAveCharWidth x DisplayWidth errechnen wie gross, die Spalte in List&Label sein soll.
Die Displayresolution kann ich doch einfach abfragen oder? und die pixel per inch bekomm ich doch auch raus, als kann man doch auhc alles in millimeter umrechen egal ob 22" oder 14" monitor! Mit geht es nciht darum, das ich es original getreu millimeter nachbilden möchte, sondern, das wenn ich Spalten auf meinem Grid vergrössere, das diese im richtigen verhältnis zunehmen, sodass L&L richtig druckt! Wenn net ist auch net so schlimm, dann nehm ich ein Faktor mit dem ich arbeite um umzurechnen oder lass es so! Die Hauptfunktionalität besteht ja schon! und da das Projekt von der IHK genehmigt wurd und ich später ne Präsenatation darüberhalten muss, wird das nicht stören! Trotzdem danke |
Re: DisplayWidth (TField) in Milimeter umrechnen
hi nochmal,
du musst aber die ausmaße des angezeigten bildes auf dem monitor wissen, da du sonst kein verhältnis hast. denn dein text könnte auf dem monitor beliebig vergrößert oder verkleinert werden, obwohl er unverändert ausgedruckt wird. denn für das auge verändert sich was, aber nciht für den computer. also kann der benutzer so keine richtige vorstellung vom ergebnis bekommen. verstehst du? du musst die ausmaße des bildes kennen, dass auf dem monitor angezeigt wird. und das geht nur mit lineal ;) und je nachdem, wie genau diese ausmaße abgelesen und dem programm mitgeteilt werden, wird der ausdruck auch stimmen. Aenogym |
Re: DisplayWidth (TField) in Milimeter umrechnen
Stimmt... Also geht es net... dann lass ich das kleine Feature weg...
|
Re: DisplayWidth (TField) in Milimeter umrechnen
wieso? du kannst doch eine kallibrierung einbauen, in der der user ein bestimmtes rechteck abmisst und die daten eingibt.
|
Re: DisplayWidth (TField) in Milimeter umrechnen
Zitat:
Aenogym |
Re: DisplayWidth (TField) in Milimeter umrechnen
Setzt den MapMode auf MM_LOMETRIC dann liefert dir die Funktion GetTextMetrics die Werte in 1/10 Millimeter. Es ist sowieso zu empfeheln auf den Drucker Canvas nur in besagten MapMode zu arbeiten. Rechnest du in Pixel, sieht das ganze auf einem Ghostscript Drucker wieder ganz anderes aus.
|
Re: DisplayWidth (TField) in Milimeter umrechnen
Sorry, aber das mit dem Quadrat wird nicht realisierbar sein, da das Projekt einer Erweiterung in unserem Warenwirtscahftssystem ist. Dem Kunden kann ich so was nicht zumuten! Bei einer so grossen Software sieht das bischen komisch aus, wenn man z.B. in den Basisdaten ein Kalibrierungsbereich hat ;)
@Luckie Geht das auch auf dem Desktop? Als, wenn ich mir von TFont, das Handle nehme und dann TTextMetric zurückbekomme? Ich kann nämlich nicht auf den Druckerzeichenfläche zugreifen, da wir List&Label von Combit als Reportsoftware einsetzen! Für mein Projekt wird es ein bischen "vergewaltigt", da List&Label mehr dafür gedacht ist mit vorhanden Daten Listen zu designen! Mein Projekt ist aber dynamisch... Ich hoffe ihr versteht was mein Projekt ist, damit ihr mir auch helfen könnt... wenn weiter Aufklärungsbedarf besteht erklär ich es nochmal ausführlich! |
Re: DisplayWidth (TField) in Milimeter umrechnen
Nur so zur Info!!! Es geht doch!
Delphi-Quellcode:
Durch die Änderunge des MapMode erhalte ich Millimeterangaben und durch die Ermittlung der durchschnittlichen Zeichen weite kann ich die tatsächliche Weite in Millimeter für List&Label bestimmen! Ihr habt mich schon voll krank gemacht! ich dachte schon mein Projekt wäre nicht so wie ich es will,aber hab es doch hinbekommen! Wenn man nun noch die gleiche Schriftart und Grösse im Grid, wie auch in List&Label benutzt, dann geht das... Habs mit den verschiedensten Grids ausprobiert und es funzt...
function TLLGenerischerDruck.GetDisplayWidthInMillimeter(FieldNo:Integer):Integer;
var OldMapMode:Integer; TM: TEXTMETRIC; begin Result := FGrid.Fields[FieldNo].DisplayWidth; //Kein Millimeterangabe! Sondern Anzahl der Zeichen OldMapMode := GetMapMode(FGrid.Canvas.Handle); if SetMapMode(FGrid.Canvas.Handle, MM_LOMETRIC) <> 0 then begin if GetTextMetrics(FGrid.Canvas.Handle, TM) then begin result := Ceil(TM.tmAveCharWidth / 10 * FGrid.Fields[FieldNo].DisplayWidth); //Berechnung für Millimeter; end; end; SetMapMode(FGrid.Canvas.Handle, OldMapMode); end; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 09:36 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz