VBGood网站全文搜索 Google

搜索VBGood全站网页(全文搜索)

VB爱好者乐园(VBGood)

 找回密码
 立即注册
搜索
楼主: 19900603

[原创] [开源]之另类Edit[代码着色器完美版]无权限,免金币

[复制链接]
发表于 2012-8-28 16:40:00 | 显示全部楼层
19900603 发表于 2012-8-28 13:21
不行 得到的地址不一样。。我想获取某行对应的ExtTextOut_Hook函数里 lpString 缓存指针

StrPtr(TextBox.Text)应该是一个副本,Text是VB属性,不是Text内部Buffer

点评

哎 愁了。。。。。你逛下E文站看看能否找到。。  发表于 2012-8-28 16:53
回复 支持 反对

使用道具 举报

 楼主| 发表于 2012-8-29 22:21:04 | 显示全部楼层
加了个行号显示的功能。。。优化了部分代码 简单啊。。
PS: 原来 Vb写的Dll在API里可以传递对象(控件,窗体之类的) 0.0  


本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x

点评

对象当然可以传递,就是个指针而已、、、、、  发表于 2012-8-31 14:25
额 我用的 他默认的方式 不清楚。。。  发表于 2012-8-30 15:14
为什么状态栏上出现乱码?  发表于 2012-8-30 15:06
回复 支持 反对

使用道具 举报

 楼主| 发表于 2012-8-30 02:34:41 | 显示全部楼层
重新优化了Dll 现在支持 多个 TextBox 了 每个TextBox 都可以设置  获取 高亮和关键字等各项属性
支持 动态 添加 删除对象 屏蔽右键菜单等。。。 先放图 继续完善




本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
回复 支持 反对

使用道具 举报

发表于 2012-8-30 12:33:00 | 显示全部楼层
19900603 发表于 2012-8-30 02:34
重新优化了Dll 现在支持 多个 TextBox 了 每个TextBox 都可以设置  获取 高亮和关键字等各项属性
支持 动态 ...


点击VB崩溃
点击C++没有看到代码高亮效果

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x

点评

.....你又用E文系统了。。 你在中文系统测试下试试  发表于 2012-8-30 15:16
拖动滚动条崩溃  发表于 2012-8-30 12:34
回复 支持 反对

使用道具 举报

发表于 2012-8-30 12:36:36 | 显示全部楼层
19900603 发表于 2012-8-30 02:34
重新优化了Dll 现在支持 多个 TextBox 了 每个TextBox 都可以设置  获取 高亮和关键字等各项属性
支持 动态 ...

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
回复 支持 反对

使用道具 举报

发表于 2012-8-30 13:55:10 | 显示全部楼层
19900603 发表于 2012-8-26 13:56
怪不得。。 改字体后 绘字的方式又改变了

您好   我这么编个代码   想让每个字节 分别显示在不同的text控件中   但是运行
出不来      要想分别显现的怎么改呀  谢谢了   红色是我后加的
Private Sub cmdSendHex_Click() '16进制发送
    Dim sj() As Byte
    Dim sj_Txt As String
    Dim i As Integer
    Dim Mystring As String
    sj_Txt = TxtSend
    If (Len(TxtSend) Mod 3 = 0) Or ((Len(TxtSend) + 1) Mod 3 = 0) And Len(TxtSend) <> 0 Then '检验16进制字符串长
        ReDim sj(Len(sj_Txt) / 3 - 1)
        For i = 0 To Len(sj_Txt) Step 3
           sj(i / 3) = Val("&H" & Mid(sj_Txt, i + 1, 2))
        Next
        If MSComm1.PortOpen = True Then
            MSComm1.Output = sj
        Else
            MSComm1.PortOpen = True
            Shape1.FillColor = vbGreen
            MSComm1.Output = sj
        End If
    Else
        MsgBox ("格式不对!")
    Mystring = sj_Txt
    Text3.Text = Mid(Mystring, 1, 2)
    Text4.Text = Mid(Mystring, 3, 2)
    Text5.Text = Mid(Mystring, 5, 2)
    Text6.Text = Mid(Mystring, 7, 2)
    Text7.Text = Mid(Mystring, 9, 2)
    Text8.Text = Mid(Mystring, 11, 2)

End If
End Sub

点评

是每个字节还是每个字符啊?  发表于 2012-8-30 15:19
回复 支持 反对

使用道具 举报

 楼主| 发表于 2012-8-30 15:21:59 | 显示全部楼层
xu77527050 发表于 2012-8-30 13:55
您好   我这么编个代码   想让每个字节 分别显示在不同的text控件中   但是运行
出不来      要想分别显 ...

发个完整代码看看
回复 支持 反对

使用道具 举报

发表于 2012-8-30 15:41:17 | 显示全部楼层
19900603 发表于 2012-8-30 15:21
发个完整代码看看

Option Explicit
    Dim a As Integer
    Dim BytReceived() As Byte
    Dim strData As String
    Dim lenInput As Integer
    Dim bytSendByte() As Byte    '发送二进制数据
    Dim strSendText As String    '发送文本数据
    Dim blnAutoSendFlag As Boolean
    Dim openFlag As Boolean

Private Sub cmdOpen_Click() '打开关闭端口
    If openFlag Then
        cmdOpen.Caption = "打开串口"
        MSComm1.PortOpen = False '打开端口
        Shape1.FillColor = vbRed
        Label1 = "COM" & a & " 关闭"
    Else
        OpenPortNum
        cmdOpen.Caption = "关闭串口"
        Shape1.FillColor = vbGreen
        Label1 = "COM" & a & " 打开"
    End If
    openFlag = Not openFlag
End Sub

Private Sub cmdSendASc_Click() '文本发送
    Dim sj_Txt As String
    sj_Txt = TxtSend
    If MSComm1.PortOpen = True Then
        MSComm1.Output = sj_Txt
    End If
End Sub

Private Sub cmdSendHex_Click() '16进制发送
    Dim sj() As Byte
    Dim sj_Txt As String
    Dim i As Integer
    sj_Txt = TxtSend
    If (Len(TxtSend) Mod 3 = 0) Or ((Len(TxtSend) + 1) Mod 3 = 0) And Len(TxtSend) <> 0 Then '检验16进制字符串长
        ReDim sj(Len(sj_Txt) / 3 - 1)
        For i = 0 To Len(sj_Txt) Step 3
           sj(i / 3) = Val("&H" & Mid(sj_Txt, i + 1, 2))
        Next
        If MSComm1.PortOpen = True Then
            MSComm1.Output = sj
        Else
            MSComm1.PortOpen = True
            Shape1.FillColor = vbGreen
            MSComm1.Output = sj
        End If
    Else
        MsgBox ("格式不对!")
      

    End If
End Sub

Private Sub OpenPortNum()
    On Error GoTo uerror
    For a = 1 To 16
        MSComm1.CommPort = a
        MSComm1.PortOpen = True
        If MSComm1.PortOpen = True Then
            'Print "可用Com号= "; a
            Exit Sub
        Else
        End If
    Next
    Exit Sub
uerror:
    'Print "出错或占用Com号= "; a
    Resume Next
End Sub

Private Sub Command1_Click()
txtReceive = ""
TxtSend = ""


End Sub

Private Sub Form_Load()
    MSComm1.Settings = "1200,n,8,1"
    MSComm1.InputMode = comInputModeBinary      '采用二进制传输
    MSComm1.InBufferCount = 0   '清空接受缓冲区
    MSComm1.OutBufferCount = 0  '清空传输缓冲区
    MSComm1.RThreshold = 1      '产生MSComm事件
    MSComm1.InBufferSize = 1024
    TxtSend = ""
    TxtSend = "" '800A00113135323634389794"
    txtReceive = ""
    Text2 = ""
    Call cmdOpen_Click
End Sub

Private Sub MSComm1_OnComm() '接收数据
    Dim strBuff As String
    Select Case MSComm1.CommEvent
        Case 2
            MSComm1.InputLen = 0
            strBuff = MSComm1.Input
            BytReceived() = strBuff
            jieshou
            lenInput = Len(strData)
            Text2 = lenInput \ 2
            '数据处理代码
    End Select
End Sub

Public Function jieshou() '接收数据处理为16进制
    Dim i As Integer
    For i = 0 To UBound(BytReceived)
        If Len(Hex(BytReceived(i))) = 1 Then
            strData = strData & "0" & Hex(BytReceived(i)) & " "
        Else
            strData = strData & Hex(BytReceived(i)) & " "
        End If
    Next
    txtReceive = strData
End Function
回复 支持 反对

使用道具 举报

发表于 2012-8-30 15:49:32 | 显示全部楼层
本帖最后由 xu77527050 于 2012-8-30 15:51 编辑
xu77527050 发表于 2012-8-30 13:55
您好   我这么编个代码   想让每个字节 分别显示在不同的text控件中   但是运行
出不来      要想分别显 ...


发送02 03 01 00 06  
接受02 04 01 00 00 07
想在text3中显示02   text4显示04    text5显示01  text6显示00   text7显示00   text8显示07   



界面设个这样的
  

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
回复 支持 反对

使用道具 举报

 楼主| 发表于 2012-8-30 15:55:01 | 显示全部楼层
本帖最后由 19900603 于 2012-8-30 15:56 编辑
xu77527050 发表于 2012-8-30 15:49
发送02 03 01 00 06  
接受02 04 01 00 00 07
想在text3中显示02   text4显示04    text5显示01  t ...


Private Sub Command1_Click()
    Dim Arry() As String, I As Long
    Arry() = Split("02 03 01 00 06", " ")
    For I = 0 To UBound(Arry)
        ShowText(I).Text = Arry(I)
    Next
End Sub
新建 TextBox 控件 改名为 ShowText 多复制几个(数组的)
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

文字版|手机版|小黑屋|VBGood  

GMT+8, 2022-7-1 03:31

VB爱好者乐园(VBGood)
快速回复 返回顶部 返回列表