API FindText函数用法

作者&投稿:谷赖 (若有异议请与网页底部的电邮联系)
Excel中text函数中format_text参数的具体用法和格式~

 Excel中的TEXT函数是将一数值转换为按指定格式表示的文本的函数,也就是把数字转换成文本格式。其语法格式为:TEXT(value,format_text),Value可以是数值、计算结果为数值的公式,或对数值单元格的引用。而Format_text是所要选用的文本格式。但如果问一下Format_text具体有哪些文本格式,可能有很多人就说不清了。其实我们可以在打开的“单元格格式”对话框中选择“数字”选项卡,在“分类”列表框中选择“特殊”,然后在右侧的“类型”框中选择“中文小写数字”最后再返回到左侧“分类”列表框中单击“自定义”, 就能看到format_text的具体格式样式了。

vb中FindWindow函数可以用来返回窗体的句柄。
1、VB6.0中的API声明:
Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long
2、具体使用:
dim i as long
i=FindWindow(vbNullString,"窗体的标题")
注意:这里的vbNullString是空的,没有任何字符,即不传递。和""空字符串是不一样的!
3、例子:
有一个标题名字是计算器的窗体或软件,获取这个计算器的句柄
Option Explicit
Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long
Private Sub Command1_Click()
Dim i As Long
i = FindWindow(vbNullString, "计算器")
msgbox& i '显示窗体句柄
End sub

VB 6.0

'模块代码

Public Type FINDREPLACE
lStructSize As Long ' size of this struct 0x20
hwndOwner As Long ' handle to owner's window
hInstance As Long ' instance handle of.EXE that
' contains cust. dlg. template
flags As Long ' one or more of the FR_??
lpstrFindWhat As Long ' ptr. to search string
lpstrReplaceWith As Long ' ptr. to replace string
wFindWhatLen As Integer ' size of find buffer
wReplaceWithLen As Integer ' size of replace buffer
lCustData As Long ' data passed to hook fn.
lpfnHook As Long ' ptr. to hook fn. or NULL
lpTemplateName As Long ' custom template name
End Type

Public Declare Function FindText Lib "comdlg32.dll" Alias "FindTextA" (pFindreplace As FINDREPLACE) As Long
Public Declare Function SetWindowLong Lib "user32" Alias "SetWindowLongA" (ByVal hWnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As Long
Public Declare Function GetWindowLong Lib "user32" Alias "GetWindowLongA" (ByVal hWnd As Long, ByVal nIndex As Long) As Long
Public Declare Function CallWindowProc Lib "user32" Alias "CallWindowProcA" (ByVal lpPrevWndFunc As Long, ByVal hWnd As Long, ByVal Msg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
Public Declare Function GetDlgItem Lib "user32" (ByVal hDlg As Long, ByVal nIDDlgItem As Long) As Long
Public Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hWnd As Long, ByVal wMsg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
Public Declare Function SetFocus Lib "user32" (ByVal hWnd As Long) As Long
Public Declare Function IsDlgButtonChecked Lib "user32" (ByVal hDlg As Long, ByVal nIDButton As Long) As Long
Public Declare Function GetDlgItemText Lib "user32" Alias "GetDlgItemTextA" (ByVal hDlg As Long, ByVal nIDDlgItem As Long, ByVal lpString As String, ByVal nMaxCount As Long) As Long
Public Declare Function IsWindow Lib "user32" (ByVal hWnd As Long) As Long
Public Declare Function IsWindowVisible Lib "user32" (ByVal hWnd As Long) As Long

Public Const GWL_WNDPROC = (-4)
Public Const WM_LBUTTONDOWN = &H201
Public Const WM_KEYDOWN = &H100

Public Const FR_NOMATCHCASE = &H800
Public Const FR_MATCHCASE = &H4
Public Const FR_NOUPDOWN = &H400
Public Const FR_ENABLEHOOK = &H100
Public Const FR_UPDOWN = &H1
Public Const FR_NOWHOLEWORD = &H1000
Public Const FR_HIDEWHOLEWORD = &H10000
Public Const FR_WHOLEWORD = &H2
Public Const FR_FINDNEXT = &H8
Public Const EM_SETSEL = &HB1
Public Const WM_NCDESTROY = &H82
Public Const WM_COMMAND = &H111

Public Const GD_MATCHCASE = &H411
Public Const GD_SEARCHUP = &H420

Public Const MaxPatternLen = 50

Global gOldDlgWndHandle As Long
Global frText As FINDREPLACE
Global gTxtSrc As String
Global gHDlg As Long
Global gHTxtWnd As Long
Global szFindString As String

Public Function FnPtrToLong(ByVal lngFnPtr As Long) As Long
FnPtrToLong = lngFnPtr
End Function

Function FindTextHookProc(ByVal hDlg As Long, ByVal uMsg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long

Dim strPtn As String
Dim hTxtBox As Long
Dim ptnLen As Integer
Dim sp As Integer
Dim ep As Integer
Dim ret As Long

strPtn = Space(MaxPatternLen)

Select Case uMsg
Case WM_COMMAND
If wParam = 1 Then
ptnLen = GetDlgItemText(gHDlg, &H480, strPtn, MaxPatternLen)

If gOldDlgWndHandle <> 0 Then
FindTextHookProc = CallWindowProc(gOldDlgWndHandle, hDlg, uMsg, wParam, lParam)
End If

If ptnLen <> 0 Then
strPtn = Left(strPtn, ptnLen)
szFindString = strPtn

If IsDlgButtonChecked(gHDlg, GD_SEARCHUP) = 0 Then '向下查找

If IsDlgButtonChecked(gHDlg, GD_MATCHCASE) = 0 Then '区分大小写
sp = InStr(Form1.Text1.SelStart + Form1.Text1.SelLength + 1, LCase(gTxtSrc), LCase(strPtn))
Else
sp = InStr(Form1.Text1.SelStart + Form1.Text1.SelLength + 1, gTxtSrc, strPtn)
End If
sp = IIf(sp = 0, -1, sp - 1)
Else '向上查找

End If

If sp = -1 Then MsgBox "找不到 " & Chr$(34) & strPtn & Chr$(34), vbInformation, "提示"

ep = Len(strPtn)
ret = SendMessage(gHTxtWnd, EM_SETSEL, sp, sp + ep)
End If
ElseIf wParam = 2 Then
gHDlg = 0
Else
End If
If gOldDlgWndHandle <> 0 Then
FindTextHookProc = CallWindowProc(gOldDlgWndHandle, hDlg, uMsg, wParam, lParam)
End If
Case Else
If gOldDlgWndHandle <> 0 Then
FindTextHookProc = CallWindowProc(gOldDlgWndHandle, hDlg, uMsg, wParam, lParam)
End If
End Select

End Function

'窗体代码

Option Explicit

Private Sub Form_Load()
gHTxtWnd = Text1.hWnd
gTxtSrc = Text1.Text

szFindString = Chr$(0)

End Sub

Private Sub Text1_Change()
gTxtSrc = Text1.Text

End Sub

Private Sub Command1_Click()
Dim hCmdBtn As Long
Dim strArr() As Byte
Dim i As Integer

ReDim strArr(0 To Len(szFindString) + 1)

For i = 1 To Len(szFindString)
strArr(i - 1) = Asc(Mid(szFindString, i, 1))
Next i

frText.flags = FR_MATCHCASE Or FR_FINDNEXT Or FR_UPDOWN Or FR_NOWHOLEWORD Or FR_HIDEWHOLEWORD
frText.lpfnHook = 0& 'FnPtrToLong(AddressOf FindTextHookProc)
frText.lpTemplateName = 0&
frText.lStructSize = Len(frText)
frText.hwndOwner = Me.hWnd
frText.hInstance = App.hInstance
frText.lpstrFindWhat = VarPtr(strArr(0))
frText.lpstrReplaceWith = 0&
frText.wFindWhatLen = Len(szFindString)
frText.wReplaceWithLen = 0
frText.lCustData = 0

If gHDlg = 0 Then
gHDlg = FindText(frText)

hCmdBtn = GetDlgItem(gHDlg, 1)

'gOldDlgWndHandle = GetWindowLong(hCmdBtn, GWL_WNDPROC)
gOldDlgWndHandle = GetWindowLong(gHDlg, GWL_WNDPROC)

'If SetWindowLong(hCmdBtn, GWL_WNDPROC, AddressOf FindTextHookProc) = 0 Then
If SetWindowLong(gHDlg, GWL_WNDPROC, AddressOf FindTextHookProc) = 0 Then
gOldDlgWndHandle = 0
End If
End If

End Sub

查找功能已经实现,
向上查找没做,自己加一下吧,就是字符串查找了

我来学习一下。
微软的标准解答地址:http://support.microsoft.com/kb/267939/zh-cn
该知识库仅仅实现了查找第一个匹配字符串,原因在于模块中
If IsDlgButtonChecked(gHDlg, &H411) = 0 Then
sp = InStr(LCase(gTxtSrc), LCase(strPtn))
Else
sp = InStr(gTxtSrc, strPtn)
End If
的InStr语句没有给定第一个参数[start, ]其默认值=1,我也不知道怎么改。

AlphaBlend老兄好像做的也不成功,一个都没找到(也许我的机器原因?)他把start设置为Form1.Text1.SelStart + Form1.Text1.SelLength + 1。是否应该避免在模块里使用类似“Form1.Text1”的引用?
继续关注学习


鹰手营子矿区19529842932: API FindText函数用法 -
鄞殃鼻炎: VB 6.0 '模块代码 Public Type FINDREPLACE lStructSize As Long ' size of this struct 0x20 hwndOwner As Long ' handle to owner's window hInstance As Long ' instance handle of.EXE that ' contains cust. dlg. template flags As Long ' one or more ...

鹰手营子矿区19529842932: find函数 -
鄞殃鼻炎: 使用语法 FIND(find_text,within_text,start_num) Find_text 是要查找的文本. Within_text 是包含要查找文本的文本. Start_num 指定开始进行查找的字符.within_text 中的首字符是编号为 1 的字符.如果忽略 start_num,则假设其为 1. 注意...

鹰手营子矿区19529842932: 请问谁懂程序编程的?我现在学的就是程序编程vb.可我就是不懂怎样
鄞殃鼻炎: VB 编程技巧 VB中如何实现文本查找功能-Instr函数使用技巧 VB中如何实现文本查找... 从中可以看到三个对注册表操作的API函数的使用技巧. 首先要声明这三个API函数,...

鹰手营子矿区19529842932: vc++中的FINDREPLACE结构、ReplaceText和FindText函数怎么用 -
鄞殃鼻炎: ReplaceText函数功能.该函数创建一个系统定义的无模式对话框,此对话框使用户查找或替代一个串,或执行控制和替代操作. 函数原型:HWND Replace Text (LPFINDREPLACE Ipfr); 参数: Ipfr:指向一个包含初始化对话框的信息的...

鹰手营子矿区19529842932: 用API取字体信息
鄞殃鼻炎: 不用API函数 text1.text='你要调用的.Fonts 如: text1.text=text2.Fonts

鹰手营子矿区19529842932: excel字符串如何查找函数? -
鄞殃鼻炎: 使用 search 可确定字符或文本字符串在其他文本字符串中的位置,这样就可使用 mid 或 replace 函数更改文本.searchb 也可在其他文本字符串 (within_text) 中查找文本字符串 (find_text),并返回 find_text 的起始位置编号.此结果是基于每个字符所使用的字节数,并从 start_num 开始的.此函数用于双字节字符.

鹰手营子矿区19529842932: API问题:用SendMessage如何取得指定句炳窗口中的Text?
鄞殃鼻炎: 若何写?我想用SendMessage编写一个函数,用于取得指定窗口中文本的函数,不知函数形势: function GetText(H: THandle): PChar; begin end;

鹰手营子矿区19529842932: TEXT函数的用法 -
鄞殃鼻炎: text函数使用很简单也很好用 但是它不支持textbox 但是他支持容器类 例如 DIV td等等 用法:直接用JQ对象.text()即可 例如 $("#d1").text();<div id="d1">值是什么呢</div> 自己试一下就知道了,很容易的

鹰手营子矿区19529842932: matlab中text函数的语法使用 -
鄞殃鼻炎: 可以写个函数,如: ==================================================== function MARK(x,y)hold;text(x,y,'.','Color','r');text(x,y,['(' num2str(x) ',' num2str(y) ')']);hold; ==================================================== 结构参考,主要是第二个text句,具体想要啥效果可从text函数帮助文件里看看当然,标坐标点我感觉还是Data Cursor工具比较好,只不过手工而已,但效果较好得多

鹰手营子矿区19529842932: abap 开发中使用的函数read - text,怎么使用阿? -
鄞殃鼻炎: 函数Read_Text来进行读取,以下是该函数的调用方法: 使用该函数时,首先要进行声明,然后给变量附上初始值,并给变量以实际的含义,最后调用该函数,以下是调用该函数的方法: DATA: il_tline LIKE tline OCCURS 0 WITH HEADER ...

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 星空见康网