ledangvan > 11-08-15, 10:26 AM
tranthanhan1962 > 11-08-15, 11:23 AM
(11-08-15, 10:26 AM)ledangvan Đã viết: Tôi có một report (In hóa đơn) trong report có các dòng : Tên người mua, Đơn vị mua, địa chỉ .... Các dòng này được đặt cố định để khi in vừa với tờ giấy A4, cỡ chữ 10.
Vấn đề là : Đối với những đơn vị có tên đơn vị vừa phải thì vừa với dòng in, tuy nhiên nhiều đơn vị có cái tên rất dài khi in bị mất chữ (Ô của dòng thì hạn chế, tôi không muốn cho xuống dòng bởi dòng Đơn vị mua và địa chỉ sát nhau - theo mẫu của tờ hóa đơn)
Tôi muốn : Nếu tên đơn vị mua dài vừa phải hoặc ngắn thì cỡ chữ vẫn là 10, còn nếu tên đơn vị dài thì sẽ tự động chuyển cỡ chữ sao cho vừa vặn với ô của dòng đó.
Có thể diễn giải chưa gãy góc, xin các bác, các chú, các anh, các em giúp đỡ. Xin chân thành cảm ơn
ledangvan > 05-10-15, 11:03 AM
ongke0711 > 05-10-15, 12:31 PM
Private Sub Detail_Print(Cancel As Integer, PrintCount As Integer)
Dim ctl As Control, strText As Variant, strName As String
Me.ScaleMode = 1
For Each ctl In Me.Detail.Controls
If ctl.ControlType = acTextBox And ctl.Name Like "v*" Then
strName = ctl.Name
If Nz(ctl.Tag, "") = "" Then
ctl.Tag = ctl.FontSize
End If
ctl.FontSize = ctl.Tag
Me.FontSize = ctl.FontSize
strText = ctl.Value
Do Until TextWidth(strText) < ctl.Width '- (ctl.Width * 0.26)
ctl.FontSize = ctl.FontSize - 1
Me.FontSize = ctl.FontSize
Loop
Do Until TextHeight(strText) < ctl.Height - (ctl.Height * 0.26)
ctl.FontSize = ctl.FontSize - 1
Me.FontSize = ctl.FontSize
Loop
End If
Next ctl
End Sub
ledangvan > 05-10-15, 12:51 PM
(05-10-15, 12:31 PM)ongke0711 Đã viết: Lúc trước tôi cũng có làm cái vụ này và tìm trên thấy trên mạng cái code này, nay share với bác.
- Copy code vào sự kiện On Print của Detail Report.
- Textbox nào cần tự động resize font để fit với textbox thì đặt tên với ký tự "v" ở đầu. Ví dụ: vTenCty. Muốn ký tự nào cũng được, nếu đổi thì sửa chút trong đoạn code.
Mã PHP:Private Sub Detail_Print(Cancel As Integer, PrintCount As Integer)
Dim ctl As Control, strText As Variant, strName As String
'This routine uses the TextWidth methods to determine the maximum size
'of font possible to ensure a text string is printed in full in the
'report's current font without loosing any characters.
Me.ScaleMode = 1 ' set all measurments to twips
For Each ctl In Me.Detail.Controls
If ctl.ControlType = acTextBox And ctl.Name Like "v*" Then
strName = ctl.Name
If Nz(ctl.Tag, "") = "" Then
ctl.Tag = ctl.FontSize
End If
' set the control's fontsize to a suitable large size to begin with
ctl.FontSize = ctl.Tag
' make sure the report font size is equal to the control's fontsize.
Me.FontSize = ctl.FontSize
' grab the text from the control
strText = ctl.Value
' evaluate the Loop until the text fits the Width of the box less 24%. Do this
' by reducing the font size incrementally and re-testing the Loop's criteria.
Do Until TextWidth(strText) < ctl.Width '- (ctl.Width * 0.26)
ctl.FontSize = ctl.FontSize - 1
' reset the report's font size so the TextWidth function will
' continue to track the reducing font size correctly.
Me.FontSize = ctl.FontSize
Loop
' now evaluate for the height of the text to make sure it fits vertically
Do Until TextHeight(strText) < ctl.Height - (ctl.Height * 0.26)
ctl.FontSize = ctl.FontSize - 1
' reset the report's font size so the TextHeight function will
' continue to track the reducing font size correctly.
Me.FontSize = ctl.FontSize
Loop
End If
Next ctl
End Sub
ongke0711 > 05-10-15, 01:04 PM
ledangvan > 05-10-15, 02:40 PM
ongke0711 > 05-10-15, 03:09 PM
tranthanhan1962 > 05-10-15, 03:49 PM
tanbacmy > 05-10-15, 03:51 PM