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 + -
显示快捷键?