用listbox吧,一行一行的,或者用Lable也可以啊,就是背景色改一下也样子和textbox差不多
解决方案 »
- 用Win32 API 如何创建日历控件?
- 大家帮我找找,看是那里没有“对象”好吗?我找了一天没找到错误地方
- ◆◆◆发现 VB6里面 超级离谱的 BUG !!!!!! 对VB感到气愤和失望 ◆◆◆
- mp3文件的时间长度获取
- 666()过来拿分
- 请问如何判断输入的text框中是合法的ip地址
- type中事不是只能包含一个数组?无论是动态还是静态的?
- PrintPreviewControl如何使用?
- 问:VB中将程序一启动就最大化怎么做啊
- true dbgrid 7.0 如何不绑定数据,而像mshflexgrid控件一样使用?
- 我设计了一个日历显示的程序方在text中在桌面上,经常调节位置,我想他能不能自动记录下上次的位置,即使关了计算机
- 怎样处理sqlser中sql语句中除零的问题比如sql="select 名称,sum(金额/数量) as 单价"
Private Sub Form_Load()
EnableWindow Text1.hwnd, False
End Sub
那样滚动条不也是不能动吗?
If Button = 2 Then
MsgBox ("不准复制")
End If
End Sub
1、设 text1.Locked=True
2、在Text得到初值时 text1.tag=text1.text
3、在 Text1_Change 事件中: text1.text=text1.tag
2、在Text得到初值时 text1.tag=text1.text
3、在 Text1_Change 事件中: text1.text=text1.tag
+++这个也不好阿,你会看到屏幕闪烁一下才消失。我想是如何把系统给得快捷菜单去了那才是最棒的啦
++我需要的就是这个API啦!!!!!!!!!!!!!!
Private Sub Command1_Click()
prevWndProc = GetWindowLong(Text1.hWnd, GWL_WNDPROC)
'GWL_WNDPROC:该窗口的窗口函数的地址
SetWindowLong Text1.hWnd, GWL_WNDPROC, AddressOf WndProc
'dwNewLong:Long,由nIndex指定的窗口信息的新值
Command1.Enabled = False
End Sub
Private Sub Form_Unload(Cancel As Integer)
If prevWndProc <> 0 Then
SetWindowLong Text1.hWnd, GWL_WNDPROC, prevWndProc
prevWndProc = 0
End If
End Sub
在TEXT的MOUSEDOWN事件中加入:
TEXT1.enable=false
text1.enable=true
popupmenu "自己的菜单"
去掉快捷菜单也不行,直接用快捷键同样可以!所以我提供的方法是最简单又最好的! 只要去掉菜单就可以,快捷键已无效了
++俺就是不要他!!!反正要让他完全只读
很多变量为定义错误 比如GWL_WNDPROC
If Clipboard.GetText() = Text1.Text Then Clipboard.Clear
End Sub
timer空间时间短些100ms
If Shift = 2 And KeyCode = 67 Then
If Clipboard.GetText() = Text1.Text Then Clipboard.Clear
End If
End Sub
Public Const GWL_WNDPROC = (-4)
Public Const WM_RBUTTONDOWN = &H204Declare 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 GetWindowLong Lib "user32" Alias "GetWindowLongA" _
(ByVal hWnd As Long, ByVal nIndex As Long) As Long
Declare Function SetWindowLong Lib "user32" Alias "SetWindowLongA" _
(ByVal hWnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) _
As LongPublic prevWndProc As Long '以前的windows过程Function WndProc(ByVal hWnd As Long, ByVal Msg As Long, _
ByVal wParam As Long, ByVal lParam As Long) As Long
If Msg = WM_RBUTTONDOWN Then
Else
WndProc = CallWindowProc(prevWndProc, hWnd, Msg, wParam, lParam)
End If
End Function
Option Explicit
Private Sub Command1_Click()
prevWndProc = GetWindowLong(Text1.hWnd, GWL_WNDPROC)
'GWL_WNDPROC:该窗口的窗口函数的地址
SetWindowLong Text1.hWnd, GWL_WNDPROC, AddressOf WndProc
'dwNewLong:Long,由nIndex指定的窗口信息的新值
Command1.Enabled = False
End Sub
Private Sub Form_Unload(Cancel As Integer)
If prevWndProc <> 0 Then
SetWindowLong Text1.hWnd, GWL_WNDPROC, prevWndProc
prevWndProc = 0
End If
End Sub
''模块代码
Option Explicit
Public Const GWL_WNDPROC = (-4)
Public Const WM_RBUTTONDOWN = &H204Declare 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 GetWindowLong Lib "user32" Alias "GetWindowLongA" _
(ByVal hWnd As Long, ByVal nIndex As Long) As Long
Declare Function SetWindowLong Lib "user32" Alias "SetWindowLongA" _
(ByVal hWnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) _
As LongPublic prevWndProc As Long '以前的windows过程Function WndProc(ByVal hWnd As Long, ByVal Msg As Long, _
ByVal wParam As Long, ByVal lParam As Long) As Long
If Msg = WM_RBUTTONDOWN Then
Else
WndProc = CallWindowProc(prevWndProc, hWnd, Msg, wParam, lParam)
End If
End Function
你是怎么知道这些常量的值?
Public Const GWL_WNDPROC = (-4)
Public Const WM_RBUTTONDOWN = &H204
你的方法果真惯用
或者在MSDN中查
尽是胡扯!!!
“关于text的只读问题”—— 用上面那种方法,谁说是只读的???用Ctrl+V就可以复制! : Random(随便) 你试过没有,就说“无效”?? 试试先!
: Polo(Polo) 你自己都搞不清自己的问题么???
你不要骗我了!!!我已经试验过了Ctrl+C, Ctrl+V都不管用了
我说的Ctrl+V是这样做: 1、先在其他地方选一段文字,Ctrl+C;
2、再在你的Text中选中一段文字,然后Ctrl+V;
如何??
++你的这种我也是过了不会的!!!
我怀疑你有没有试过
抱歉,刚刚发现,我同事把那个Text改称Locked=True了,所以才会.... 对不起,我错了!
写几个wndproc吗?呵呵,那可不好办.
我用的也是上面的方法,另加了一点小改动,做成控件,想要的留个email.
set text.autoverbmenu=false
是一个控件,有一个模块和一个control********************************
mDefine(bas)
********************************
Option ExplicitPublic Declare Sub CopyMemory _
Lib "kernel32" Alias "RtlMoveMemory" _
(pDest As Any, _
pSrc As Any, _
ByVal ByteLen As Long)Public Declare Function SetWindowLong _
Lib "user32" Alias "SetWindowLongA" _
(ByVal hWnd As Long, _
ByVal nIndex As Long, _
ByVal dwNewLong As Long) As LongPublic Declare Function GetWindowLong _
Lib "user32" Alias "GetWindowLongA" _
(ByVal hWnd As Long, _
ByVal nIndex As Long) As LongPublic 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 LongPublic Const GWL_WNDPROC = (-4)
Public Const GWL_USERDATA = (-21)Dim ctlShadowControl As TextEx
Dim ptrObject As LongPublic Function SubWndProc(ByVal hWnd As Long, _
ByVal Msg As Long, _
ByVal wParam As Long, _
ByVal lParam As Long) As Long On Error Resume Next ptrObject = GetWindowLong(hWnd, GWL_USERDATA)
CopyMemory ctlShadowControl, ptrObject, 4
SubWndProc = ctlShadowControl.WindowProc(hWnd, Msg, wParam, lParam)
CopyMemory ctlShadowControl, 0&, 4
Set ctlShadowControl = Nothing
End Function
*************************
TextEx(usercontrol)
*************************
Option ExplicitPrivate mWndProcOrg As LongPrivate mHWndSubClassed As LongPrivate Const WM_MOUSEACTIVATE = &H21Const m_def_CanPopup = 0
Dim m_CanPopup As BooleanPrivate Sub SubClass()
If mWndProcOrg Then Exit Sub
mWndProcOrg = SetWindowLong(txtEx.hWnd, GWL_WNDPROC, AddressOf SubWndProc)
mHWndSubClassed = txtEx.hWnd
Call SetWindowLong(mHWndSubClassed, GWL_USERDATA, ObjPtr(Me))
End SubPrivate Sub UnSubClass()
If mWndProcOrg = 0 Then Exit Sub
SetWindowLong mHWndSubClassed, GWL_WNDPROC, mWndProcOrg
mWndProcOrg = 0
End SubFriend Function WindowProc(ByVal hWnd As Long, _
ByVal uMsg As Long, _
ByVal wParam As Long, _
ByVal lParam As Long) As Long
If (Not (uMsg = 516)) Or (m_CanPopup) Then
WindowProc = CallWindowProc(mWndProcOrg, hWnd, uMsg, wParam, ByVal lParam)
End If
End FunctionPrivate Sub UserControl_Initialize()
txtEx.Top = 0
txtEx.Left = 0
SubClass
End SubPrivate Sub UserControl_Resize()
txtEx.Width = UserControl.Width
txtEx.Height = UserControl.Height
End SubPrivate Sub UserControl_Terminate()
UnSubClass
End SubPublic Property Get CanPopup() As Boolean
CanPopup = m_CanPopup
End PropertyPublic Property Let CanPopup(ByVal New_CanPopup As Boolean)
m_CanPopup = New_CanPopup
PropertyChanged "CanPopup"
End PropertyPrivate Sub UserControl_InitProperties()
m_CanPopup = m_def_CanPopup
End SubPrivate Sub UserControl_ReadProperties(PropBag As PropertyBag) m_CanPopup = PropBag.ReadProperty("CanPopup", m_def_CanPopup)
txtEx.Locked = PropBag.ReadProperty("Locked", False)
End SubPrivate Sub UserControl_WriteProperties(PropBag As PropertyBag) Call PropBag.WriteProperty("CanPopup", m_CanPopup, m_def_CanPopup)
Call PropBag.WriteProperty("Locked", txtEx.Locked, False)
End SubPublic Property Get Locked() As Boolean
Locked = txtEx.Locked
End PropertyPublic Property Let Locked(ByVal New_Locked As Boolean)
txtEx.Locked() = New_Locked
PropertyChanged "Locked"
End Property
并把text控件子类化,在wndproc中把想应的地址读出来,并调用这个usercotrol的一个过程,
在这个过程中把消息拦截,这个就可以一一对应,而且不用写多个过程.
有兴趣的看看吧.