精华内容
下载资源
问答
  • VB编程学习

    2020-02-01 12:08:10
    Visual Basic 程序设计 1.对象 对象是具有特殊属性(数据)...对象事件由VB预设好的能被对象识别的动作,如单击,双击等 对象方法 对象名称.方法名称 窗体常用属性: 自动重画(AutoRedraw):对象.AutoRedra...

    Visual Basic 程序设计

    1.对象

    • 对象是具有特殊属性(数据)和行为方式的实体,建立一个对象后期操作通过与该对象有关的属性、事件和方法来描述;

    • 对象属性的设置方法: 对象名.属性名称 = 新设置的属性

    • 对象事件由VB预设好的能被对象识别的动作,如单击,双击等

    • 对象方法 对象名称.方法名称

    • 窗体常用属性:

      • 自动重画(AutoRedraw):对象.AutoRedraw=[Boolean] 用于窗体或者图片刷新或重画

      • Backcolor'背景颜色
        BorderStyle'边框类型 
        Caption'定义窗体标题,form1.Caption[= String]
        ControlBox'
        Enable'
        Font'字形
        ForColor'
        Icon'图标,设置最小化时显示的图标
        Visible'可见性
        
        
    • 窗体事件:

      • Click(单击)事件
      • DblClick(双击)事件
      • Load事件,启动程序时对属性和变量进行初始化,自动触发事件
      • Unload事件,清除窗体
    • 关闭程序命令: End

      sub Command_click()
      	End
      End sub
      

    3.数据类型

    • 字符串:

      Dim name As String *10 '定义定长字符串,不足以空格填充
      
    • 数值: 整型(Integer,Long),浮点数(以e或d表示,single,double)

    • 其他类型:(1)字节(Byte);(2)布尔(Boolean);(3) Date;(4) Object

    • 常量: [Public|Private] Const name [As type]= expression

    • 变量:[Dim,Static,Redim,Public] name As type = expression

      • Dim 用于标准模块,窗体,或过程中定义变量或数组
      • Static用于过程中定义静态变量及数组变量,每次引用时其值会继续保留
      • Public在标准模块中定义全局变量或数组
    • 变量的作用域:

      • VB程序由三种模块组成,窗体模块(Form)、标准模块(Module)、类模块

      • 局部变量:在过程中定义的变量,作用域为所在的过程,使用 Dim,Static定义

      • 模块变量:使用Private声明,作用域单个窗体,在标准模块的声明部分声明

      • 全局变量:可在每个模块、每个过程,在标准模块的声明部分声明,使用Public或Global

      • [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-l5KgSd0Z-1580530026591)(C:\Users\WangWeikai\AppData\Roaming\Typora\typora-user-images\1580447141150.png)]

      • [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-mmP03Kxw-1580530026593)(C:\Users\WangWeikai\AppData\Roaming\Typora\typora-user-images\1580447210556.png)]

      • 时间函数详解:

        Format(Now(),"yyyy/MM/dd H:mm:ss")
        
        字符说明
        (:)时间分隔符。在某些区域设置中,可以使用其他字符表示时间分隔符。时间分隔符在格式化时间值时分隔小时、分钟和秒。格式化输出中用作时间分隔符的实际字符由系统的 LocaleID 值确定。
        (/)日期分隔符。在某些区域设置中,可以使用其他字符表示日期分隔符。日期分隔符在格式化日期值时分隔日、月和年。格式化输出中用作日期分隔符的实际字符由您的区域设置确定。
        (%)用于表明不论尾随什么字母,随后字符都应该以单字母格式读取。也用于表明单字母格式应以用户定义格式读取。有关更多详细信息,请参见下面的内容。
        d将日显示为不带前导零的数字(如 1)。如果这是用户定义的数字格式中的唯一字符,请使用 %d
        dd将日显示为带前导零的数字(如 01)。
        ddd将日显示为缩写形式(例如 Sun)。
        dddd将日显示为全名(例如 Sunday)。
        M将月份显示为不带前导零的数字(如一月表示为 1)。如果这是用户定义的数字格式中的唯一字符,请使用 %M
        MM将月份显示为带前导零的数字(例如 01/12/01)。
        MMM将月份显示为缩写形式(例如 Jan)。
        MMMM将月份显示为完整月份名(例如 January)。
        gg显示时代/纪元字符串(例如 A.D.
        h使用 12 小时制将小时显示为不带前导零的数字(例如 1:15:15 PM)。如果这是用户定义的数字格式中的唯一字符,请使用 %h
        hh使用 12 小时制将小时显示为带前导零的数字(例如 01:15:15 PM)。
        H使用 24 小时制将小时显示为不带前导零的数字(例如 1:15:15)。如果这是用户定义的数字格式中的唯一字符,请使用 %H
        HH使用 24 小时制将小时显示为带前导零的数字(例如 01:15:15)。
        m将分钟显示为不带前导零的数字(例如 12:1:15)。如果这是用户定义的数字格式中的唯一字符,请使用 %m
        mm将分钟显示为带前导零的数字(例如 12:01:15)。
        s将秒显示为不带前导零的数字(例如 12:15:5)。如果这是用户定义的数字格式中的唯一字符,请使用 %s
        ss将秒显示为带前导零的数字(例如 12:15:05)。
        F显示秒的小数部分。例如,ff 将精确显示到百分之一秒,而 ffff 将精确显示到万分之一秒。用户定义格式中最多可使用七个 f 符号。如果这是用户定义的数字格式中的唯一字符,请使用 %f
        T使用 12 小时制,并对中午之前的任一小时显示大写的 A,对中午到 11:59 P.M 之间的任一小时显示大写的 P。如果这是用户定义的数字格式中的唯一字符,请使用 %t
        tt对于使用 12 小时制的区域设置,对中午之前任一小时显示大写的 AM,对中午到 11:59 P.M 之间的任一小时显示大写的 PM。对于使用 24 小时制的区域设置,不显示任何字符。
        y将年份 (0-9) 显示为不带前导零的数字。如果这是用户定义的数字格式中的唯一字符,请使用 %y
        yy以带前导零的两位数字格式显示年份(如果适用)。
        yyy以四位数字格式显示年份。
        yyyy以四位数字格式显示年份。
        z显示不带前导零的时区偏移量(如 -8)。如果这是用户定义的数字格式中的唯一字符,请使用 %z
        zz显示带前导零的时区偏移量(例如 -08
        zzz显示完整的时区偏移量(例如 -08:00
    • 字符串函数

      • 删除空白字符函数:

        • LTrin$(字符串):去掉左边的空白字符
        • RTrin$(字符串):去掉右边的空白字符
        • Trin$(字符串):去掉字符串两边的空白字符
      • 字符串截取函数:

        • Left$(字符串,n):返回字符串前n个字符
        • Mid 中部截取函数:Mid$(字符串,p,n) 从第p个字符开始向后截取n个字符
        • 右部截取:Right$(字符串,n)
      • 字符串长度:Len(字符串),Len(变量名)

      • space(n) 生成n个空格

      • 字母大小写转换:Ucase(字符串);Lcase(字符串)

      • [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ku4qVk1d-1580530026595)(C:\Users\WangWeikai\AppData\Roaming\Typora\typora-user-images\1580453506731.png)]

    4.数据输入输出

    • Print方法:在文件中打印文字
    • Cls:清楚Print打印的文本
    • MsgBox: MsgBox(msg[,type] [,title])
      • msg为将显示的消息,type为窗口类型,title为窗口标题
      • [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-KlKrjV5n-1580530026597)(C:\Users\WangWeikai\AppData\Roaming\Typora\typora-user-images\1580454668587.png)]
      • [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ovqglOBR-1580530026598)(C:\Users\WangWeikai\AppData\Roaming\Typora\typora-user-images\1580454701257.png)]

    5.常用控件

    • 定时器 Timer:
      • Timer.Enable = Boolean 控制定时器的开关
      • Timer.Interval = 1000 ’设置定时器的时间间隔,ms
    • Tab顺序:
      • 对象.TabIndex = 0 ’顺序由0开始排序

    6.控制结构

    • If 语句:

      if 条件 Then
        语句1
      Else if 条件 then
         语句2
      End if
      
    • IIf语句:

      IIf(条件,true语句1,False 语句2)
      
    • select多分支结构

      select case 测试表达式1
      case 表达式表列1
          语句块1
      case 表达式表列2
          语句块2
      case Else 
          语句块3
      end select
      
      
    • For 循环控制结构

      For 循环变量 = 初值 To 终值 [Step 步长]
      [循环体]
      [Exit for]’退出循环
      Next [循环变量]'Next后的循环变量与For的相同
      
    • While循环控制结构

      While  条件
          [语句块]
      Wend
      

    7.数组

    • 数组的定义
      • Dim 数组名(下标上界)As 类型名称;
      • Dim 数组名 (第一维上界,第二维下界) AS类型名称
      • 类型:Integer,Long,Single,Double,Currency,String等
      • 数组必须先定义后使用,默认上界为10,下界为0或1,使用1为下界需要指定
      • Dim 数组名([下界 To]上界) As 类型名称
      • 数组初始化:数组变量名 = Array(数组元素值);numbers=Array(1,2,3,4)

    8.过程

    • Sub 过程:

      [Static][Private][Public] Sub 过程名 [(参数列表)]
          语句块
          [Exit Sub]
          End Sub
      
      • 参数列表:[ByVal] 变量名[()] [As 数据类型]
      • Sub过程不能嵌套
    • Function 过程:

      [Static] [Private] [Public] Function过程名[(参数表列)] [As 类型]
          语句块
          [过程名=表达式]
          [Exit Function]
              [语句块]
          End Function
      
      • Function具有返回值,类型是 Integer,Long,Single,Double,Currency,String
      • [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-E0kIfnSl-1580530026599)(C:\Users\WangWeikai\AppData\Roaming\Typora\typora-user-images\1580479411367.png)]

    8.文件

    • 文件的打开和关闭:对文件进行操作之前必须先打开或建立

      • Open 文件名 [For 方式] [Access 存取类型] [锁定] As [#] 文件号 [Len=记录长度]

      • 文件名为幺打开或者建立的文件名称(包括路径)

      • 方式:指定文件的输入输出方式,

        • Output 指定顺序输出方式;
        • Input 指定顺序输入方式;
        • Append 指定输出方式,打开文档时写入的数据附加到原来文件的后面;
        • Random 指定随机存取方式;
        • Binary 指定二进制方式
      • 存取类型

        • Read 打开只读文件
        • Write 打开只写文件
        • Read Write 打开读写文件,只对随机文件、二进制文件以及Append方式打开的文件有效
      • close用于关闭已打开文件

      • vb.net中的文件操作

         Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
                Dim sd As String = "openfile"
                FileOpen(1, "log.dat", OpenMode.Append, OpenAccess.ReadWrite)
                Print(1, "shhfff" & vbCrLf) '写入字符无""
            Write(1, sd & vbCrLf) '写入字符串带有 "xxx",
                FileClose(1)
            End Sub
        

    9.SerialPort的使用

    • 串口初始化

      Private Sub Serial_con()
              SerialPort1.PortName = ComboBox1.Text '串口名称
              SerialPort1.BaudRate = Val(ComboBox2.Text) '波特率
              SerialPort1.DataBits = Val(ComboBox3.Text) '数据位
              SerialPort1.StopBits = Val(ComboBox5.Text) '停止位
              SerialPort1.Parity = Val(ComboBox4.Text) '校验位
              SerialPort1.Open() '打开串口
          End Sub
      
    •   '选择发送命令
          Public Function ComSelect() As String
              Dim ComIndex As Integer
              ComIndex = Val(ComboBox7.Text)
              Select Case ComIndex
                  Case 16
                      ComSelect = "01 03 00 00 00 10 44 06"
                  Case 15
                      ComSelect = "01 03 00 00 00 0F 05 CE"
                  Case 14
                      ComSelect = "01 03 00 00 00 0E C4 0E"
                  Case Else
                      ComSelect = InputBox("请输入16进制通讯命令:")
              End Select
          End Function
          '将待发送数据转换为16进制
          Public Function Comforsend(ByVal CommandString As String) As Byte()
              Dim TestArray() As String = Split(CommandString) '分割通信数据
              Dim hexBytes() As Byte '定义数组
              ReDim hexBytes(TestArray.Length - 1) '重定义
              Dim i As Integer
              For i = 0 To TestArray.Length - 1
                  hexBytes(i) = Val("&h" & TestArray(i))
              Next
              Comforsend = hexBytes
          End Function
          '发送数据
          Public Sub PortSend(ByVal Senddata As Byte())
              Try
                  SerialPort1.Write(Senddata, 0, Senddata.Length)
              Catch ex As Exception
                  MessageBox.Show(ex.Message & "发送数据错误")
              End Try
          End Sub
      
    • 接收数据

      Public Sub Recideal()
              Dim n As Integer
              Dim i As Integer
              Dim rc() As Byte
              Dim RecStr As String = ""
              n = SerialPort1.BytesToRead
              ReDim rc(n)
              ReDim Recieve_String(n)
              Try
                  If n > 0 Then
                      For i = 0 To (n - 1)
                          rc(i) = SerialPort1.ReadByte()
                          Recieve_String(i) = Val(rc(i))
                          RecStr += rc(i) & ","
                      Next
                  End If
              Catch ex As Exception
                  MessageBox.Show(ex.Message & "接收数据错误")
              End Try
          End Sub
      
    展开全文
  • VB编程资源大全

    2007-10-17 20:47:23
    grad.ZIP 在 windows 95 中实现渐变的标题栏的例子(19KB) 7,clrcombo.ZIP 从combobox中选择颜色(325KB) 8,coolbar.ZIP 在vb4中显示ie风格的coolbar(30KB) 9,gradient.ZIP 实现渐变效果...
  • *.pgx中的图片(13KB) 28,f029.ZIP VB编程中突破64K的文本显示限制(3KB) 29,f028.ZIP 文件的拖拉操作(5KB) 30,f027.ZIP 实现多文档界面的记事本, 需要active threed control(29KB) 31,f026....
  • 1,abkemail.ZIP 简单的email控件(18KB ) 2,abkpop.ZIP 一个简单的POP3控件(5KB) 3,winpopup.ZIP 允许您的 VB 程序通过网络发送和接收 Winpopup 信息(20KB) 4,autodial.ZIP 自动拨号的控件(30...
  • (11KB) 40,prop20vb6.ZIP 可以实现与VB中属性栏同样的效果,如字体、颜色、浏览等(150KB) 41,ab2eval.EXE 使用 ActiveBar 2.0 基本上可以做出 Office 2000 的各种程序界面(包括菜单、工具栏、垂直...
  • o011.zip 16进制数转换成十进制, 16进制转换成二进制等(1KB) 642,o010.zip 转换二进制数为16进制数(1KB) 643,o009.zip 指定两个日期, 计算相隔的天数(2KB) 644,o008.zip 非常COOL的文字效果(9...
  • o011.zip 16进制数转换成十进制, 16进制转换成二进制等(1KB) 642,o010.zip 转换二进制数为16进制数(1KB) 643,o009.zip 指定两个日期, 计算相隔的天数(2KB) 644,o008.zip 非常COOL的文字效果(9...
  • o011.zip 16进制数转换成十进制, 16进制转换成二进制等(1KB) 642,o010.zip 转换二进制数为16进制数(1KB) 643,o009.zip 指定两个日期, 计算相隔的天数(2KB) 644,o008.zip 非常COOL的文字效果(9...
  • (11KB) 40,prop20vb6.ZIP 可以实现与VB中属性栏同样的效果,如字体、颜色、浏览等(150KB) 41,ab2eval.EXE 使用 ActiveBar 2.0 基本上可以做出 Office 2000 的各种程序界面(包括菜单、工具栏、垂直...
  • o011.zip 16进制数转换成十进制, 16进制转换成二进制等(1KB) 642,o010.zip 转换二进制数为16进制数(1KB) 643,o009.zip 指定两个日期, 计算相隔的天数(2KB) 644,o008.zip 非常COOL的文字效果(9...
  • Java波浪文字制作方法及源代码 1个目标文件 摘要:Java源码,初学实例,波浪文字 Java波浪文字,一个利用Java处理字符的实例,可以设置运动方向参数,显示文本的字符数组,高速文本颜色显示字体的 FontMetrics对象,...
  • 对pdf指定区域截图并提取文字

    万次阅读 多人点赞 2020-12-30 00:20:32
    截图PDF指定区域并提取文件 需求:PDF文件结构都一致,对于下图红框区域截图并提取文本 测试pdfplumber库 先试用一下pdfplumber看看能否提取出文本 import pdfplumber with pdfplumber.open("测试文档.pdf") as p: ...

    作者:小小明

    截图PDF指定区域并提取文件

    需求:PDF文件结构都一致,对于下图红框区域截图并提取文本

    image-20201215131128765

    测试pdfplumber库

    先试用一下pdfplumber看看能否提取出文本

    import pdfplumber
    with pdfplumber.open("测试文档.pdf") as p:
        page = p.pages[0]
        print(page.extract_text())
    

    运行结果:

    Date of Test : 2020-11-05 R
    Test Engineer : ? e
    s
    KAYSER-THREDE Contact Name : WX u
    l
    00 EVAluation Version: 2.1.7 sample.def ta
    1 n
    t
    0
    8
    Z0
    Y, 6
    X, 
    g] 40 1
    n [ . P
    o
    ati20 ag
    r
    e e
    cel  o
    ac0 f J
    071H 7
    -20 .0; Vo = 15 / 2020-11HEAD00ead Acce 822-75
    0-40 3.889 m1-0500E2ACleration -HFC
    1080 /s; M = 11 RA / CFC SP 1 Res A_202
    g]60 60 kg 1000ultant 0_11_
    t [ 0
    n 5
    ulta40  13
    s
    e _
    r0 2
    2 5
    00
    0 F
    -200 10 20 30 40 50 60 70 80 90 100 110 120 130 140 150 160 170 180 190 200 rid
    a
    time [ms] y
    , 6
    .1
    A1
    Analysis Interval:  0 - 1000 [ms] naly.202
    Max(61 ms) = 72 g; Min(4.3 ms) = 0.04043 g s0
    cHoICn t=.  A330m7 (s5(55.64. 6-1 6 -6 .539 m.61s )m; Hs)IC =3 665 =.7 340 g7; ( c5u5.m4 .- A 636m.3s m =s 7);0 H.1I8C g15 = 307 (55.4 - 66.3 ms) is: IA  11:2
    T3
    

    试用后发现,pdfplumber提取对这种存在旋转文字的pdf文字提取效果非常糟糕,即使是正常顺序的位置,也出现了交错现象。

    通过PyMuPDF实现区域截图和区域文字提取

    官方文档:https://pymupdf.readthedocs.io/en/latest/index.html

    Github:https://github.com/pymupdf/PyMuPDF

    安装:

    pip install pymupdf
    

    截图

    先测试截取左下角的部分:

    from IPython.display import Image
    import fitz
    
    pdfDoc = fitz.open("测试文档.pdf")
    page = pdfDoc[0]
    mat = fitz.Matrix(1, 1)  # 1.5表示放大1.5倍
    rect = page.rect
    clip = fitz.Rect(0, 0.87*rect.height,
                     rect.width*0.8, rect.height)
    pix = page.getPixmap(matrix=mat, alpha=False, clip=clip)
    display(Image(pix.getImageData()))
    

    png

    • fitz.Matrix(1, 1)的两个参数表示宽度和高度的放大系数,上面的截的图较小可以通过该参数放大
    • fitz.Rect有好几种坐标模式,我选择了(x0, y0, x1, y1)这种坐标模式来定位要截取的区域
    • page.getPixmap传入放大系数和区域即可获取图片对象,可直接获取图片的数据也可以写入到文件保存起来

    再测试截取右上角部分:

    clip = fitz.Rect(0.8*rect.width, 0.27*rect.height,
                     rect.width*0.9, rect.height)
    pix = page.getPixmap(matrix=mat.preRotate(-90), alpha=False, clip=clip)
    display(Image(pix.getImageData()))
    

    png

    mat.preRotate(-90)实现了截取区域逆时针旋转90度。

    保存图片很简单,只需调用writeImage即可:

    pix.writeImage("tmp.png")
    

    文字提取

    通过fitz.Rect要提取文字的区域即可:

    a_text = page.getText(clip=clip)
    print(a_text)
    
    1. Page of J7822-75-HFCA_2020_11_05 13_25
    Head Acceleration SP 1 Resultant
    11HEAD0000E2ACRA / CFC1000
    75 / 2020-11-05
    0.0; Vo = 13.889 m/s; M = 1160 kg
    Friday, 6.11.2020  11:23
    Analysis: IAT
    

    这段文本提取的效果还不错!

    再测试一下左下角部分:

    output_11_0

    clip = fitz.Rect(0, 0.87*rect.height,
                     rect.width*0.8, rect.height)
    b_text = page.getText(clip=clip)
    print(b_text)
    
    Max(61 ms) = 72 g; Min(4.3 ms) = 0.04043 g
    cont. A3ms(56.61 - 59.61 ms) = 65.74 g; cum. A3ms = 70.18 g
    HIC = 307 (55.4 - 66.3 ms); HIC36 = 307 (55.4 - 66.3 ms); HIC15 = 307 (55.4 - 66.3 ms)
    Analysis Interval:  0 - 1000 [ms]
    

    文本行顺序处理

    文字的行顺序似乎与原始图片的文本顺序不一致。不过我们可以借助pandas自定义排序,还原到一致的顺序。

    import pandas as pd
    
    tmp = pd.DataFrame(b_text.splitlines(), columns=["a"])
    tmp["b"] = (tmp.a.str[:2]).astype("category")
    tmp.b.cat.set_categories(
        ['An', 're', 'vi', 'Ma', 'co', 'VC', 'ES'], inplace=True)
    tmp.sort_values('b', inplace=True)
    b_text = '\n'.join(tmp.a.to_list())
    print(b_text)
    
    Analysis Interval:  0 - 1000 [ms]
    Max(61 ms) = 72 g; Min(4.3 ms) = 0.04043 g
    cont. A3ms(56.61 - 59.61 ms) = 65.74 g; cum. A3ms = 70.18 g
    HIC = 307 (55.4 - 66.3 ms); HIC36 = 307 (55.4 - 66.3 ms); HIC15 = 307 (55.4 - 66.3 ms)
    

    完整代码

    import fitz  # pip install PyMuPDF
    import os
    from IPython.display import Image
    import pandas as pd
    
    pdf_path = "测试文档.pdf"
    if not os.path.exists("imgs"):
        os.mkdir("imgs")
    
    result = []
    with fitz.open(pdf_path) as pdfDoc:
        for i in range(pdfDoc.pageCount):
            page_num = i+1
            print("--------------", page_num, "--------------")
            page = pdfDoc[i]
            mat = fitz.Matrix(1.3, 1.3)  # 1.5表示放大1.5倍
            rect = page.rect
    
            clip = fitz.Rect(0.8*rect.width, 0.27*rect.height,
                             rect.width*0.9, rect.height)  # 想要截取的区域
            pix = page.getPixmap(matrix=mat.preRotate(-90),
                                 alpha=False, clip=clip)  # 将页面转换为图像
            pix.writeImage(f"imgs/{page_num}_a.png")
            img1 = pix.getImageData()
            display(Image(img1))
            a_text = page.getText(clip=clip)
            print(a_text)
    
            clip = fitz.Rect(0, 0.87*rect.height,
                             rect.width*0.8, rect.height)
            pix = page.getPixmap(matrix=mat.preRotate(90), alpha=False, clip=clip)
            pix.writeImage(f"imgs/{page_num}_b.png")
            img2 = pix.getImageData()
            display(Image(img2))
            b_text = page.getText(clip=clip)
            tmp = pd.DataFrame(b_text.splitlines(), columns=["a"])
            tmp["b"] = (tmp.a.str[:2]).astype("category")
            tmp.b.cat.set_categories(
                ['An', 're', 'vi', 'Ma', 'co', 'VC', 'ES'], inplace=True)
            tmp.sort_values('b', inplace=True)
            b_text = '\n'.join(tmp.a.to_list())
            print(b_text)
            result.append((a_text, b_text))
    
    df = pd.DataFrame(result, columns=["A", "B"])
    df.to_excel("result.xlsx", index=False)
    

    前5页运行结果展示:

    -------------- 1 --------------

    png

    1. Page of J7822-75-HFCA_2020_11_05 13_25
    Head Acceleration SP 1 Resultant
    11HEAD0000E2ACRA / CFC1000
    75 / 2020-11-05
    0.0; Vo = 13.889 m/s; M = 1160 kg
    Friday, 6.11.2020  11:23
    Analysis: IAT
    

    png

    Analysis Interval:  0 - 1000 [ms]
    Max(61 ms) = 72 g; Min(4.3 ms) = 0.04043 g
    cont. A3ms(56.61 - 59.61 ms) = 65.74 g; cum. A3ms = 70.18 g
    HIC = 307 (55.4 - 66.3 ms); HIC36 = 307 (55.4 - 66.3 ms); HIC15 = 307 (55.4 - 66.3 ms)
    

    -------------- 2 --------------

    png

    2. Page of J7822-75-HFCA_2020_11_05 13_25
    Head Acceleration X SP 1
    11HEAD0000E2ACXA / CFC1000
    75 / 2020-11-05
    0.0; Vo = 13.889 m/s; M = 1160 kg
    Friday, 6.11.2020  11:23
    Analysis: IAT
    

    png

    Analysis Interval:  0 - 1000 [ms]
    Max(65.5 ms) = 8.15 g; Min(52.2 ms) = -7.426 g
    

    -------------- 3 --------------

    png

    3. Page of J7822-75-HFCA_2020_11_05 13_25
    Head Acceleration Y SP 1
    11HEAD0000E2ACYA / CFC1000
    75 / 2020-11-05
    0.0; Vo = 13.889 m/s; M = 1160 kg
    Friday, 6.11.2020  11:23
    Analysis: IAT
    

    png

    Analysis Interval:  0 - 1000 [ms]
    Max(59.4 ms) = 71.87 g; Min(52 ms) = -9.89 g
    

    -------------- 4 --------------

    png

    4. Page of J7822-75-HFCA_2020_11_05 13_25
    Head Acceleration Z SP 1
    11HEAD0000E2ACZA / CFC1000
    75 / 2020-11-05
    0.0; Vo = 13.889 m/s; M = 1160 kg
    Friday, 6.11.2020  11:23
    Analysis: IAT
    

    png

    Analysis Interval:  0 - 1000 [ms]
    Max(56.5 ms) = 20.39 g; Min(63.6 ms) = -23.43 g
    

    -------------- 5 --------------

    png

    5. Page of J7822-75-HFCA_2020_11_05 13_25
    Rib Left Upper Displacement Y SP 1
    11RIBSLEUPE2DSYC / CFC180
    75 / 2020-11-05
    0.0; Vo = 13.889 m/s; M = 1160 kg
    Friday, 6.11.2020  11:23
    Analysis: IAT
    

    png

    Analysis Interval:  0 - 1000 [ms]
    Max(314.8 ms) = 0.2821 mm; Min(52.9 ms) = -33.24 mm
    

    展开全文
  • ' 不指定要查找的文本内容,只按照样式搜索 .Replacement. Text = "#^&#" ' 使用^&表示原文本内容 .Format = True ' 设置按照样式进行搜索 End With Selection.Find.Execute Replace : = ...

    需求说明

    一个doc文档中有大量的特殊样式文本,使用相同的样式黑体,三号(16),红色(RGB:255 0 0),现在需要将这些特殊样式的文本都是使用#符号包围起来,如下图所示:
    在这里插入图片描述

    VBA代码实现

    Sub batchEdit()
    '
    ' 批量根据样式修改文本内容
    
    '
    With Selection.Find.Font
        .NameFarEast = "黑体"
        .Size = 16
        .Color = RGB(255, 0, 0)
    End With
    
    With Selection.Find
    .Text = ""  ' 不指定要查找的文本内容,只按照样式搜索
    .Replacement.Text = "#^&#"  ' 使用^&表示原文本内容
    .Format = True  ' 设置按照样式进行搜索
    End With
    
    Selection.Find.Execute Replace:=wdReplaceAll
    
    End Sub
    
    展开全文
  • VB编程的8个小技巧

    2004-11-08 13:17:00
    1、"&"替换"+"在很多人的编程语言中,用“+”来连接字符串,这样容易导致歧义。良好的习惯是用“&”来连接字符串. 不正确: Dim sMessage As StringsMessage = "1" + "2" 正确: Dim sMessage As StringsMessage = "1...
    1
    、"&"替换"+"
    在很多人的编程语言中,用“+”来连接字符串,这样容易导致歧义。良好的习惯是用“&”来连接字符串.

    不正确:
    Dim sMessage As String
    sMessage = "1" + "2"

    正确:
    Dim sMessage As String
    sMessage = "1" & "2"

    注意:"&"的后面有个空格

    2、变量命名大小写, 语句错落有秩,源代码维护方面

    下面大家比较一下以下两段代码:

    读懂难度很大的代码:

    Dim SNAME As String
    Dim NTURN As Integer

    If NTURN = 0 Then
    If SNAME = "vbeden" Then
    Do While NTURN < 4
    NTURN = NTURN + 1
    Loop
    End If
    End If

    容易读懂的代码:

    Dim sName As String
    Dim nTurn As Integer

    If nTurn = 0 Then
      If sName = "vbeden" Then
       Do While nTurn < 4
         nTurn = nTurn + 1
       Loop
      End If
    End If

    3请养成以下的“对象命名约定”良好习惯

    推荐使用的控件前缀

    控件类型 前缀 例子
    3D Panel pnl pnlGroup
    ADO Data ado adoBiblio
    Animated button ani aniMailBox
    Check box chk chkReadOnly
    Combo box, drop-down list box cbo cboEnglish
    Command button cmd cmdExit
    Common dialog dlg dlgFileOpen
    Communications com comFax
    Control (当特定类型未知时,在过程中所使用的) ctr ctrCurrent
    Data dat datBiblio
    Data-bound combo box dbcbo dbcboLanguage
    Data-bound grid dbgrd dbgrdQueryResult
    Data-bound list box dblst dblstJobType
    Data combo dbc dbcAuthor
    Data grid dgd dgdTitles
    Data list dbl dblPublisher
    Data repeater drp drpLocation
    Date picker dtp dtpPublished
    Directory list box dir dirSource
    Drive list box drv drvTarget
    File list box fil filSource
    Flat scroll bar fsb fsbMove
    Form frm frmEntry
    Frame fra fraLanguage
    Gauge gau gauStatus
    Graph gra graRevenue
    Grid grd grdPrices
    Hierarchical flexgrid flex flexOrders
    Horizontal scroll bar hsb hsbVolume
    Image img imgIcon
    Image combo imgcbo imgcboProduct
    ImageList ils ilsAllIcons
    Label lbl lblHelpMessage
    Lightweight check box lwchk lwchkArchive
    Lightweight combo box lwcbo lwcboGerman
    Lightweight command button lwcmd lwcmdRemove
    Lightweight frame lwfra lwfraSaveOptions
    Lightweight horizontal scroll bar lwhsb lwhsbVolume
    Lightweight list box lwlst lwlstCostCenters
    Lightweight option button lwopt lwoptIncomeLevel
    Lightweight text box lwtxt lwoptStreet
    Lightweight vertical scroll bar lwvsb lwvsbYear
    Line lin linVertical
    List box lst lstPolicyCodes
    ListView lvw lvwHeadings
    MAPI message mpm mpmSentMessage
    MAPI session mps mpsSession
    MCI mci mciVideo
    Menu mnu mnuFileOpen
    Month view mvw mvwPeriod
    MS Chart ch chSalesbyRegion
    MS Flex grid msg msgClients
    MS Tab mst mstFirst
    OLE container ole oleWorksheet
    Option button opt optGender
    Picture box pic picVGA
    Picture clip clp clpToolbar
    ProgressBar prg prgLoadFile
    Remote Data rd rdTitles
    RichTextBox rtf rtfReport
    Shape shp shpCircle
    Slider sld sldScale
    Spin spn spnPages
    StatusBar sta staDateTime
    SysInfo sys sysMonitor
    TabStrip tab tabOptions
    Text box txt txtLastName
    Timer tmr tmrAlarm
    Toolbar tlb tlbActions
    TreeView tre treOrganization
    UpDown upd updDirection
    Vertical scroll bar vsb vsbRate

    --------------------------------------------------------------------------------
    推荐使用的数据访问对象 (DAO) 的前缀
    用下列前缀来指示数据访问对象
    数据库对象 前缀 例子
    Container con conReports
    Database db dbAccounts
    DBEngine dbe dbeJet
    Document doc docSalesReport
    Field fld fldAddress
    Group grp grpFinance
    Index ix idxAge
    Parameter prm prmJobCode
    QueryDef qry qrySalesByRegion
    Recordset rec recForecast
    Relation rel relEmployeeDept
    TableDef tbd tbdCustomers
    User usr usrNew
    Workspace wsp wspMine

    --------------------------------------------------------------------------------

    应用程序频繁使用许多菜单控件,对于这些控件具备一组唯一的命名约定很实用。除了最前面 "mnu" 标记以外,菜单控件的前缀应该被扩展:对每一级嵌套增加一个附加前缀,将最终的菜单的标题放在名称字符串的最后。下表列出了一些例子。

    推荐使用的菜单前缀
    菜单标题序列 菜单处理器名称
    File Open mnuFileOpen
    File Send Email mnuFileSendEmail
    File Send Fax mnuFileSendFax
    Format Character mnuFormatCharacter
    Help Contents mnuHelpContents

    当使用这种命名约定时,一个特定的菜单组的所有成员一个接一个地列在 Visual Basic 的“属性”窗口中。而且,菜单控件的名字清楚地表示出它们所属的菜单项。

    为其它控件选择前缀

    对于上面没有列出的控件,应该用唯一的由两个或三个字符组成的前缀使它们标准化,以保持一致性。只有当需要澄清时,才使用多于三个字符的前缀。

    常量和变量命名约定
    除了对象之外,常量和变量也需要良好格式的命名约定。本节列出了 Visual Basic 支持的常量和变量的推荐约定。并且讨论标识数据类型和范围的问题。

    变量应该总是被定义在尽可能小的范围内。全局 (Public) 变量可以导致极其复杂的状态机构,并且使一个应用程序的逻辑非常难于理解。全局变量也使代码的重用和维护更加困难。

    Visual Basic 中的变量可以有下列范围

    范围 声明位置 可见位置
    过程级 过程,子过程或函数过程中的 ‘Private’ 在声明它的过程中
    模块级 窗体或代码模块(.frm、.bas )的声明部分中的 ‘Private’ 窗体或代码模块中的每一个过程
    全局 代码模块(.bas)的声明部分中的 ‘Public’ 应用程序中的每一处

    在 Visual Basic 的应用程序中,只有当没有其它方便途径在窗体之间共享数据时才使用全局变量。当必须使用全局变量时,在一个单一模块中声明它们,并按功能分组。给这个模块取一个有意义的名称,以指明它的作用,如 Public.bas。

    较好的编码习惯是尽可能写模块化的代码。例如,如果应用程序显示一个对话框,就把要完成这一对话任务所需要的所有控件和代码放在单一的窗体中。这有助于将应用程序的代码组织在有用的组件中,并减小它运行时的开销。

    除了全局变量(应该是不被传递的),过程和函数应该仅对传递给它们的对象操作。在过程中使用的全局变量应该在过程起始处的声明部分中标识出来。此外,应该用 ByVal 将参数传递给 Sub 过程及 function 过程,除非明显地需要改变已传递的参数值。

    随着工程大小的增长,划分变量范围的工作也迅速增加。在类型前缀的前面放置单字母范围前缀标明了这种增长,但变量名的长度并没有增加很多。

    变量范围前缀

    范围 前缀 例子
    全局 g gstrUserName
    模块级 m mblnCalcInProgress
    本地到过程 无 dblVelocity

    如果一个变量在标准模块或窗体模块中被声明为 Public,那么该变量具有全局范围。如果一个变量在标准模块或窗体模块中被分别声明为 Private,那么该变量有模块级范围。

    注意: 一致性是卓有成效地使用这种技术的关键;Visual Basic 中的语法检查器不会捕捉以 "p." 开头的模块级变量。

    常量
    常量名的主体是大小写混合的,每个单词的首字母大写。尽管标准 Visual Basic 常量不包含数据类型和范围信息,但是象 i、s、g 和 m 这样的前缀对于理解一个常量的值和范围还是很有用的。对于常量名,应遵循与变量相同的规则。例如:

    mintUserListMax  '对用户列表的最大限制
             '(整数值,本地到模块)
    gstrNewLine    '新行字符
             '(字符串,应用程序全局使用)

    变量
    声明所有的变量将会节省编程时间,因为键入操作引起的错误减少了(例如,究竟是 aUserNameTmp,还是 sUserNameTmp,还是 sUserNameTemp)。在“选项”对话框的“编辑器”标签中,复选“要求变量声明”选项。Option Explicit 语句要求在 Visual Basic 程序中声明所有的变量。

    应该给变量加前缀来指明它们的数据类型。而且前缀可以被扩展,用来指明变量范围,特别是对大型程序。

    用下列前缀来指明一个变量的数据类型。

    变量数据类型

    数据类型 前缀 例子
    String (字符串类型) str strFName
    Integer (短整数类型) int intQuantity
    Long (长整数类型) lng lngDistance
    Single (单精度浮点数类型) sng sngAverage
    Double (双精度浮点数类型) dbl dblTolerance
    Boolean (布尔类型) bln blnFound
    Byte (字节类型) byt bytRasterData
    Date (日期类型) dte dteNow
    Currency (货币计算与定点计算类型) cur curRevenue
    Object (对象类型) obj objCurrent
    Variant (变体类型) vnt vntCheckSum

    描述变量和过程名

    变量或过程名的主体应该使用大小写混合形式,并且应该足够长以描述它的作用。而且,函数名应该以一个动词起首,如 InitNameArray 或 CloseDialog。

    对于频繁使用的或长的项,推荐使用标准缩略语以使名称的长度合理化。一般来说,超过 32 个字符的变量名在 VGA 显示器上读起来就困难了。

    当使用缩略语时,要确保它们在整个应用程序中的一致性。在一个工程中,如果一会儿使用 Cnt, 一会儿使用 Count,将导致不必要的混淆。

    用户定义的类型
    在一项有许多用户定义类型的大工程中,常常有必要给每种类型一个它自己的三个字符的前缀。如果这些前缀是以 "u" 开始的,那么当用一个用户定义类型来工作时,快速识别这些类型是很容易的。例如,ucli 可以被用来作为一个用户定义的客户类型变量的前缀。

    4在简单的选择条件情况下,使用IIf()函数

    罗索的代码:
    If nNum = 0 Then
     sName = "sancy"
    Else
     sName = "Xu"
    End If

    简单的代码:
    sName=IIf(nNum=0,"sancy","Xu")

    5、尽量使用Debug.Print进行调试

    在很多初学者的调试中,用MsgBox来 跟踪变量值.其实用Debug.Print不仅可以达到同样的功效,而且在程序最后编译过程中,会被忽略.而MsgBox必须手动注释或删除.

    通常:
    MsgBox nName

    应该:
    Debug.Print nName

    6、 在重复对某一对象的属性进行修改时,尽量使用With....End With

    通常:
    Form1.Height = 5000
    Form1.Width = 6000
    Form1.Caption = "This is MyLabel"

    应该:
    With Form1
     .Height = 5000
     .Width = 6000
     .Caption = "This is MyLabel"
    End With
    这种结构程序执行效率比较高,特别在循环语句里。

    7、 MsgBox中尽量使用消息图标,这样程序比较有规范

    一般来说

    vbInformation 用来提示确认或成功操作的消息

    vbExclamation 用来提示警告的消息

    vbCritical 用来提示危机情况的消息

    vbQuestion 用来提示询问的消息

    8、 在可能的情况下使用枚举

    枚举的格式为
    [Public | Private] Enum name
    membername [= constantexpression]
    membername [= constantexpression]
    ....
    End Enum

    Enum 语句包含下面部分:

    部分 描述
    Public 可选的。表示该 Enum 类型在整个工程中都是可见的。Enum 类型的缺省情况是 Public。
    Private 可选的。表示该 Enum 类型只在所声明的模块中是可见的。
    name 必需的。该 Enum 类型的名称。name 必须是一个合法的 Visual Basic 标识符,在定义该 Enum 类型的变量或参数时用该名称来指定类型。
    membername 必需的。用于指定该 Enum 类型的组成元素名称的合法 Visual Basic 标识符。
    constantexpression 可选的。元素的值(为 Long 类型)。可以是别的 Enum 类型。如果没有指定 constantexpression,则所赋给的值或者是 0(如果该元素是第一个 membername),或者比其直接前驱的值大 1。

    说明
    所谓枚举变量,就是指用 Enum 类型定义的变量。变量和参数都可以定义为 Enum 类型。Enum 类型中的元素被初始化为 Enum 语句中指定的常数值。所赋给的值可以包括正数和负数,且在运行时不能改变。例如:

    Enum SecurityLevel IllegalEntry = -1 SecurityLevel1 = 0 SecurityLevel2 = 1 End Enum

    Enum 语句只能在模块级别中出现。定义 Enum 类型后,就可以用它来定义变量,参数或返回该类型的过程。不能用模块名来限定 Enum 类型。类模块中的 Public Enum 类型并不是该类的成员;只不过它们也被写入到类型库中。在标准模块中定义的 Enum 类型则不写到类型库中。具有相同名字的 Public Enum 类型不能既在标准模块中定义,又在类模块中定义,因为它们共享相同的命名空间。若不同的类型库中有两个 Enum 类型的名字相同,但成员不同,则对这种类型的变量的引用,将取决于哪一个类型库具有更高的引用优先级。

    不能在 With 块中使用 Enum 类型作为目标。

    Enum 语句示例
    下面的示例演示用 Enum 语句定义一个命名常数的集合。在本例中是一些可以选择的颜色常数用于设计数据库的数据输入窗体。

    Public Enum InterfaceColors
    icMistyRose = &HE1E4FF&
    icSlateGray = &H908070&
    icDodgerBlue = &HFF901E&
    icDeepSkyBlue = &HFFBF00&
    icSpringGreen = &H7FFF00&
    icForestGreen = &H228B22&
    icGoldenrod = &H20A5DA&
    icFirebrick = &H2222B2&
    End Enum

    好处是加快编程速度
    9写代码的时候,可以用中文写变量,写完后再用英文替换。这样写代码的时候思路比较清晰,而且方便调试,嘿嘿。
    展开全文
  • 初学者学习VB的时候一定会接触到数据的输出,其中本博文就挑Format函数来说说。 其中Format函数可以输出数值或者日期按指定的格式输出。 下面直接上图好了
  • vb.net 教程 5-1 字体(Font)

    千次阅读 热门讨论 2017-03-09 22:54:00
    '此方法返回 SizeF 结构,该结构表示 text 参数指定的、使用 font 参数绘制的字符串的大小,单位由 PageUnit 属性指定。--Msdn Dim sizeDrawText1 As SizeF Dim posDrawText1 As New Point(10, 50) Dim g As ...
  • VB编程技巧

    千次阅读 2006-04-11 13:16:00
    文章浏览广告 VB编程技巧几例 现在加入 http://14.66.102.214 VB5 引入枚举变量,使用它,我们可以显著地改变应用程序的易读性: Public Enum TimeOfDay Morning = 0 Afternoon = 1 Evening = 2 End Enum ...
  • VB编程的八个优良习惯 1、"&"替换"+" 2、变量命名大小写,语句错落有秩,源代码维护方面 3、请养成以下的“对象命名约定”良好习惯 4、在简单的选择条件情况下,使用IIf()函数 5、尽量使用Debug.Print进行...
  • 实例3 颜色渐变进度条  实例4 任意形状的窗体  实例5 无边框的窗体  实例6 渐变的窗体背景  实例7 透明的按钮  实例8 会动的窗体  实例9 调色程序  实例10 窗体分割条  实例11 自动完成文本框的...
  • VB6编程:DirectX 2D图形学习日志11对第7课的总结如下: 首先定义一下引用的函数类型: Private Main_Font As D3DXFont Private Main_Font_Description As IFont 'IFont 是VB6内部自带的stdole.tlb的一个引用 ...
  • VB6编程:DirectX 2D图形学习日志9对4-6课的总结 第6课创建顶点缓冲区,重点内容如下: **一 顶点缓冲区:**在2D或3D的游戏里,物体模型是用多边形网格来描述的,一般的是三角形,顶点缓冲区就是来存储用来描述物体...
  • vb.net GDI+入门——画笔、画刷和颜色

    千次阅读 2011-11-21 17:20:33
    GDI是Graphics Device Interface的缩写,含义是图形设备接口,它的主要任务是负责...在绘画的时候,画家需要使用画笔或者画刷来把不同的颜色涂抹到画布上,而我们在对图形图像进行编程的时候,也是通过画笔和画刷把不同
  • vb常用的内部函数(六):颜色函数

    千次阅读 2010-04-15 21:17:00
    RGB函数:RGB是通过指定红绿蓝不同的分量值得到不同的颜色。·格式:RGB(红色值,绿色值,蓝色值)·取值范围为0--255,分别代表所要颜色中的红、绿、蓝分量的大小。QBColor函数:用一个整数值对应RGB的常用颜色值...
  • VB.NET 教程_01_基础语法

    万次阅读 多人点赞 2018-08-08 00:48:58
    VB.Net是一种简单,现代,面向对象的计算机编程语言,由微软开发,将.NET Framework和公共语言运行库的强大功能与作为Visual Basic标志的生产力优势相结合。 Visual Basic .NET(VB.NET)是在.NET Framework上...
  • VB控件属性使用大全

    2011-12-15 12:02:34
    12 或非笔,显示颜色与画笔颜色反相的组合 13 复制笔,用ForeColor属性指定颜色,此为默认值 14 或笔非,画笔颜色显示颜色反相的组合 15 或笔,画笔颜色显示颜色的组合 16 白色 DrawStyle设定绘图相关方法使用...
  • CAD二次开发(VB)代码整理

    千次阅读 2019-06-24 11:16:05
     首先,编写将Excel表格导入CAD中显示为直线与文字的组合,其思路是:获得Excel中行数、列数及间距,按照相应比例绘制表格横竖线,然后读取Excel数据对应位置写入为CAD文字。 Sub E_cad() Dim mybook As ...
  • 6、当你直接用第5条的内容去获得前景色、背景色的话,你会发现获得的颜色是Empty,而获得字体之类,会产生错误:未将对象引用设置到对象的实例。所以,在使用以上属性前,必须要判断单元格是否具有 Style 属性: ...
  • 版权声明:本文为博主原创文章,转载请在显著位置标明本文出处以及作者网名,未经作者允许不得...ScrollBars:显示的滚动条类型。以下设置: Both 在需要时同时显示水平滚动条和垂直滚动条 ForcedBoth 始终同时...
  • C#基础教程-c#实例教程,适合初学者

    万次阅读 多人点赞 2016-08-22 11:13:24
    它使用组件编程,和VB一样容易使用。C#语法和C++和JAVA语法非常相似,如果读者用过C++和JAVA,学习C#语言应是比较轻松的。 用C#语言编写的源程序,必须用C#语言编译器将C#源程序编译为中间语言(MicroSoft ...
  • 用于长度型尺寸标注编辑的属性十分丰富,TextOverride属性可用于修改尺寸标注的文本,该属性适用于除了导线型标注之外的所有尺寸标注对象,尺寸标注的默认数值默认显示为AutoCAD自动计算的实际测量值。 要修改尺寸...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 4,474
精华内容 1,789
关键字:

vb编程显示指定颜色的文字