Hey, I actually found the VB code that I used to compute a small enough font to fit a string into given space. Might give you a start.
oFld is the actual customer name field from the Crystal report
definition.
-- Jeremy
Private Function getFontThatFits(ByVal oFld As FieldObject, ByVal
str As String, _
ByVal e As
System.Windows.Forms.PaintEventArgs) As System.Drawing.Font
'jhg 07/14/2004
Dim f As System.Drawing.Font
Dim s As Single
Dim sf As SizeF
Dim fldWidth As Int32
Dim gr As Graphics = Me.CreateGraphics 'jhg 04/26/2005
Dim twipsToPixelsLocal As Decimal = gr.DpiX / 1440 '182 / 2552
'jhg 04/25/2005
gr.Dispose()
fldWidth = oFld.Width * twipsToPixelsLocal 'jhg 04/25/2005
'fldWidth is the approx width of customer name field in
packLabel.rpt, expressed in pixels.
'182 is the empirically derived "width" of the crystal
customername field
'in pixels on a screen set to 1024 pixels total width.
s = oFld.Font.Size
's = shipCustFontSize
f = New System.Drawing.Font(oFld.Font.Name, s, oFld.Font.Style)
sf = e.Graphics.MeasureString(str, f)
While (sf.Width > fldWidth)
s = s - 0.5
f = New System.Drawing.Font(oFld.Font.Name, s,
oFld.Font.Style, oFld.Font.Unit)
sf = e.Graphics.MeasureString(str, f)
End While
getFontThatFits = f
'lblMsg.Text = "str width: " + sf.Width.ToString + "; fontsize:
" + s.ToString
End Function
From: [email protected]
[mailto:[email protected]] On Behalf Of dosiemoe
Sent: Wednesday, April 15, 2009 5:25 PM
To: [email protected]
Subject: [advanced_delphi] Calculate string length in millimeters based
on other HDC
Is it that impossible to calcutate how wide a given
string will print, in millimeters, if I don't have
the printer's canvas before-hand?
So a font is actually a logical font, it will be a
whole different things once we use SelectObject from
one canvas to another.
MSDN said there will be round off error when using
logical unit other than MM_TEXT, but I found that it
is ridiculously huge.
At first I thought it is going to be at most one char
wide.
I'm going to find out more about Portable TrueType
Metric, and Design Units.
------------
FIreHAzaR:-D
West Java, Indonesia
<<image001.jpg>>
<<image002.jpg>>
