关于label的字体大小自动调整.

litaoa 2007-09-14 10:57:20
程序需要用到自动加载LABEL,加载的LABEL有大有小.里面的字体一般只是按设定的大小.这样程序就很不美观.

有什么方法可以让程序的LABEL宽度和高度发生变化里自动调整LABEl里面字体的大小呢.有做过的提提思路也可
...全文
1987 14 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
litaoa 2007-09-19
  • 打赏
  • 举报
回复
Label1.FontSize = (Label1.Width / Len(Label1.Caption)) / 20
If (Label1.Width / Len(Label1.Caption)) / 20 > Label1.Height / 20 Then
Label1.FontSize = Label1.Height / 20
End If
litaoa 2007-09-17
  • 打赏
  • 举报
回复
也不是很难,首先要指定一种字体,比如宋体(因为即使相同的字号,不同字体的大小也相差很多,因此先要指定一种字体作为标准,w为了兼容起见选择比较常见的字体)
然后估算一下该字体下不同字号的宽度(这个基本是和字体号成正比的)
然后按照你的LABEL宽度,除以字符串的长度,然后根据这个商的结果在上面字号中挑选一个最接近的字体号

这个我也试了,和我一开始的想法是一样的.不过这个当字多,LABEL宽,高度低的话,就不太适合了.显示不全.
litaoa 2007-09-17
  • 打赏
  • 举报
回复
AUTOSIZE 设为TRUe的话LABEl就会有大有小,就更不美观了
脆皮大雪糕 2007-09-17
  • 打赏
  • 举报
回复
建立一个窗体,上面随便放上些控件,随便写些字,然后再代码区粘铁下面的代码。窗体resize时所有控件及控件的字体都会等比例缩放

Option Explicit


Private mlngW As Long
Private mlngh As Long
Private Type TControlInfo
ctrl As Control
Left As Single
Top As Single
Width As Single
Height As Single
FontSize As Single
End Type
Dim SaveCtrl() As TControlInfo



Private Sub Form_Initialize()
On Error Resume Next
mlngW = Me.Width
mlngh = Me.Height
'保存控件的状态
ReDim SaveCtrl(Me.Controls.Count - 1) As TControlInfo
Dim i As Integer
Dim ctrl As Control
For i = 0 To Me.Controls.Count - 1
Set ctrl = Me.Controls(i)
With SaveCtrl(i)
Set .ctrl = ctrl
.Left = ctrl.Left
.Top = ctrl.Top
.Width = ctrl.Width
.Height = ctrl.Height
.FontSize = ctrl.Font.Size
End With
Next
End Sub

Private Sub Form_Resize()
On Error Resume Next
Dim lngW As Long
Dim lngh As Long
Dim lngf As Single
Dim i As Integer

lngW = Me.Width
lngh = Me.Height


' take the lesser of the two
If (lngW / mlngW) < (lngh / mlngh) Then
lngf = (lngW / mlngW)
Else
lngf = (lngh / mlngh)
End If


For i = 0 To UBound(SaveCtrl)
With SaveCtrl(i)
If .ctrl.Left < 0 Then
.ctrl.Left = ((.ctrl.Left + 75000) * (lngW / mlngW)) - 75000
ElseIf .Left < 0 Then
.ctrl.Left = (.Left + 75000) * (lngW / mlngW)
Else
.ctrl.Left = .Left * (lngW / mlngW)
End If
.ctrl.Top = .Top * (lngh / mlngh)
.ctrl.Width = .Width * (lngW / mlngW)
.ctrl.Height = .Height * (lngh / mlngh)


If .FontSize > 0 Then
If (.FontSize * lngf) < 8 Then
If (.FontSize * lngf) > 7 Then
.ctrl.Font.Size = 7
Else
.ctrl.Font.Size = .FontSize * lngf
End If
Else
.ctrl.Font.Size = .FontSize * lngf
End If
End If
End With
Next

End Sub
脆皮大雪糕 2007-09-17
  • 打赏
  • 举报
回复
看楼主的意思想接帖,稍候,写段代码给你参考
litaoa 2007-09-17
  • 打赏
  • 举报
回复
谢谢。。
guyehanxinlei 2007-09-17
  • 打赏
  • 举报
回复
友情帮顶
hui_hui_2007 2007-09-16
  • 打赏
  • 举报
回复
AUTOSIZE设为TRUE
terrywolf 2007-09-15
  • 打赏
  • 举报
回复
添加控件数组,先把LabelA(0)的属性设置好,然后再Load LabelA(1)就可以了。
嗷嗷叫的老马 2007-09-15
  • 打赏
  • 举报
回复
.................................
熊孩子开学喽 2007-09-14
  • 打赏
  • 举报
回复
还有个办法就是不管字体号和字体,直接将LABEL的AUTOSIZE设为TRUE,LABEL就会自动调节宽度了,当然,你要预留好位置,避免发生重叠的可能。
熊孩子开学喽 2007-09-14
  • 打赏
  • 举报
回复
也不是很难,首先要指定一种字体,比如宋体(因为即使相同的字号,不同字体的大小也相差很多,因此先要指定一种字体作为标准,w为了兼容起见选择比较常见的字体)
然后估算一下该字体下不同字号的宽度(这个基本是和字体号成正比的)
然后按照你的LABEL宽度,除以字符串的长度,然后根据这个商的结果在上面字号中挑选一个最接近的字体号

samwzhang 2007-09-14
  • 打赏
  • 举报
回复
然后自己换算下就行了
samwzhang 2007-09-14
  • 打赏
  • 举报
回复
20_____字号与界面显示的关系是20————————字号1=20界面显示单位

7,785

社区成员

发帖
与我相关
我的任务
社区描述
VB 基础类
社区管理员
  • VB基础类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧