10457.html
来自「VB技巧问答10000例,是一个教程」· HTML 代码 · 共 23 行
HTML
23 行
<html>
<head>
<title>Re: 唔该...答下我呀..</title>
</head>
<body bgcolor="#FFFFFF" vlink="#808080">
<center>
<h1>Re: 唔该...答下我呀..</h1>
</center>
<hr size=7 width=75%>
<hr size=7 width=75%><p>
Posted by <a href="mailto:letsgo@ms6.url.com.tw">老怪</a> on March 01, 1999 at 08:54:23:<p>
In Reply to: <a href="10331.html">Re: 唔该...答下我呀..</a> posted by jutso on February 25, 1999 at 10:00:31:<p>
: : 请问如何使它们可以在Listbox 或其他工具做到对称显示...(好似 Getright 中间那个显示Local File , Resume , Progress.... 可以自由控制它的长度, 又可做到对称显示)<br>: : 不知何故中文显示总是不能对称.<br>: : 我以将它们定为一提定字长..<p>: : Private Type Rec<br>: : Name as String * 50<br>: : Itme as string * 100<br>: : Total as Long<br>: : End type<p>: : Dim Data as Rec<br>: : ....<br>: : ....<br>: : ....<br>: : ....<p>: : List1.Additem Data.Name + Data.Item + Str(Data.Total)<p>: : <br>: : 结果 :<p>: : 公司 名称 货品 数量<br>: : -------------------------------------------------------------------------------------<br>: : Company A Item 1 10<br>: : Com B TEST ABC 5<br>: : TEST C ABCDEFGH 10<br>: : 某某店 AAAAA 150<p>: 你可以试着用 msflexgrid 来代替 listbox,当然两者还是不太<br>: 一样,能不能代替看你是用来做什么用的了!<p>分散对齐输出:<br>'Windows 字型在列印时,常为栏位对齐而苦,因为就算字串字数完全一样,<br>'也可能因个别字元宽窄不同,而造成字串输出宽窄不同(最明显的例子是空白字元)。<br>'就因为此种特性,使得以往在 Dos 时代,用空白字元补齐字串长度,以求输出<br>'栏位对齐的方式变的不可行,因此详细计算输出物件的座标,移动输出的目前位置再<br>'加以输出,虽然是一件苦差,但为求输出的准确,似乎是免不了的事。<br>'本范例就在展示如何利用 VB 输出物件的 CurrentX,CurrentY 属性,达成所有输出<br>'字串画面长度一样,并有 Word 常用 "分散对齐" 格式的效果。<p>'测试本范例,请于 Form 上布置 Command1、Picture1<p>Option Explicit<br>Private Sub Command1_Click()<br>Dim SendArray(2) As String<br>Dim I As Byte<p> SendArray(0) = "1234567890"<br> SendArray(1) = "VB 6.0 问世"<br> SendArray(2) = "长度相同的字串输出"<p> For I = 0 To 2<br> '逐一把字串阵列送往字串输出自订函数显示,<br> '取字长度是 10 个中文字<br> FixWidthString 10, SendArray(I)<br> Next<br>End Sub<br>'分散对齐输出自订函数<br>'StringLength 取字长度<br>'AcceptString 对齐字串<br>Private Sub FixWidthString(ByVal StringLength As Integer _<br> , ByVal AcceptString As String)<br>'计算取字有多宽的字串变数<br>Dim CalcString As String<br>'两字间隔的宽度<br>Dim SepWidth As Single<br>Dim I As Integer<br>'储存上次输出的结尾位置<br>Dim oldY As Single, oldX As Single<p> '接收字串比取字长度长则截断<br> If Len(AcceptString) > StringLength Then<br> AcceptString = Left(AcceptString, StringLength)<br> End If<p> '将取字变数填满中文字<br> CalcString = String(StringLength, "国")<br> '计算两字间隔的宽度,原理是取字变数比传入字串多出的长度,<br> '要平均插入两字间隔中<br> SepWidth = (Picture1.TextWidth(CalcString) - _<br> Picture1.TextWidth(AcceptString)) / _<br> (Len(AcceptString) - 1)<p> '记住输出前的 Y 座标<br> oldY = Picture1.CurrentY<br> '输出第一字<br> Picture1.Print "[" & Mid(AcceptString, 1, 1)<br> '换算接续输出的 X 座标是多少<br> oldX = oldX + Picture1.TextWidth("[" & Mid(AcceptString, 1, 1))<p> For I = 2 To Len(AcceptString)<br> '回到输出前的 Y 座标<br> Picture1.CurrentY = oldY<br> '输出位置向右移一空白间隔<br> oldX = oldX + SepWidth<br> '输出座标移到 oldX<br> Picture1.CurrentX = oldX<br> Picture1.Print Mid(AcceptString, I, 1)<br> '换算接续输出的 X 座标是多少<br> oldX = oldX + Picture1.TextWidth(Mid(AcceptString, I, 1))<br> Next<br> Picture1.CurrentY = oldY<br> Picture1.CurrentX = oldX<br> '"[" 和 "]" 主要是为了标示输出宽度,正式使用时请拿掉。<br> Picture1.Print "]"<br>End Sub <br>向右对齐输出:<br>'测试本范例请于 Form 上布置 Picture1,Command1<br>'欲使用于列印,将输出物件由 Picture 转至 Printer<br>Option Explicit<br>Private Sub Command1_Click()<br> '以下两行是把数字在左边补齐五个字,但最后你会发觉这在输出<br> '对齐上一点用都没有,因为 Windows 字型宽窄不一,同样字数字串<br> '宽度就是不一样。<br> Picture1.Print Right(Space(5) & Format(123, "###"), 5)<br> Picture1.Print Right(Space(5) & Format(12, "###"), 5)<p> '下面是呼叫右齐输出自订函数,此函数完全放弃了以往 Dos 补字数对齐字串<br> '的方法,以图形座标换算的方式,把不等长字串放在不同位置输出,达成右齐<br> '输出的目的。<br> FixRightPrint CStr(123), 5<br> FixRightPrint CStr(12), 5<br> '用 "W" 字元的目的是告诉你,同样是英文字元,字宽差别有多大。<br> FixRightPrint "WWWWW", 5<br>End Sub<br>'右齐输出自订函数<br>'PrintString 是欲右齐输出之字串<br>'PrintLength 是设定输出之最大字数<br>'StartPos 是设定输出时向右偏移字数,省略为不右移。<br>'以字数换算宽度的概念来说,本涵数以大写 "W" 宽度为单位。<br>Private Sub FixRightPrint(ByVal PrintString As String, _<br> ByVal PrintLength As Integer, _<br> Optional ByVal StartPos As Integer)<br>'纵合最大字数及偏移字数之计算宽度字串<br>Dim CalcWidthString As String<br> '计算宽度字串等于最大字数加偏移字数<br> CalcWidthString = String(PrintLength + StartPos, "W")<br> '以单 Byte 字元为计算基准<br> PrintString = StrConv(PrintString, vbFromUnicode)<p> '只取 PrintLength 字数输出<br> If LenB(PrintString) > PrintLength Then<br> PrintString = LeftB(PrintString, PrintLength)<br> End If<p> '还原为双位元字<br> PrintString = StrConv(PrintString, vbUnicode)<p> With Picture1<br> '移动输出之 X 轴<br> .CurrentX = .TextWidth(CalcWidthString) - _<br> .TextWidth(PrintString)<br> End With<p> Picture1.Print PrintString<br>End Sub
<br>
<br><hr size=7 width=75%><p>
<a name="followups">Follow Ups:</a><br>
<ul><!--insert: 10457-->
</ul><!--end: 10457-->
<br><hr size=7 width=75%><p>
</body></html>
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?