一个vb程序,只有一个form 运行程序的时候,可以当form获得了焦点,当再去运行其他程序的时候,例如说,打开一个文本。会触发什么样的事件,或者怎样才能使这个事件被触发。form的lostfocus怎样才能被触发。
我的目的是为了在form失去焦点的时候,form中文本框的内容负值给剪切版.......
我应该怎么做呀..........先谢过各位大虾
我的目的是为了在form失去焦点的时候,form中文本框的内容负值给剪切版.......
我应该怎么做呀..........先谢过各位大虾
Private Sub Form_Deactivate()
Clipboard.Clear
Clipboard.SetText Text1.Text
End SubPrivate Sub Command1_Click()
Form2.Show
End Subform2中
Private Sub Command2_Click()
Text1.Text = Clipboard.GetText
End Sub
Private Sub Timer1_Timer()
If Me.hWnd <> GetActiveWindow Then
Clipboard.Clear
Clipboard.SetText Text1.Text
End If
End Sub
如果不是活动窗口,把值付给剪贴版
Option Explicit
'`定义相关的 API 函数
Public OldWindowProc As Long
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
Declare Function SetWindowLong Lib "user32" Alias "SetWindowLongA" (ByVal hwnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As Long
Public Const GWL_WNDPROC = (-4)
Public Const WM_ACTIVATE = &H6
Public Const WA_ACTIVE = 1
Public Const WA_CLICKACTIVE = 2
Public Const WA_INACTIVE = 0
Public Function NewWindowProc(ByVal hwnd As Long, ByVal msg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long '注意不要在这里面运行类似 Form1Show 或 End 等等破坏性的操作
If msg = WM_ACTIVATE Then
If (wParam = WA_ACTIVE Or wParam = WA_CLICKACTIVE) Then
Form1.Caption = "活动窗口" '窗口得到焦点时
' Clipboard.Clear
' Clipboard.SetText Form1.Text1.Text Else
Form1.Caption = "非活动窗口" ' `窗口失去焦点时
Clipboard.Clear
Clipboard.SetText Form1.Text1.Text
End If
End If
NewWindowProc = CallWindowProc(OldWindowProc, hwnd, msg, wParam, lParam)
End Function
窗体里的代码:(包含一个TEXT1)Option ExplicitPrivate Sub Form_Load()
OldWindowProc = SetWindowLong(hwnd, GWL_WNDPROC, AddressOf NewWindowProc) '`设置相关的窗口信息
End Sub
End Sub
用这个事件不行吗?