投稿日 | : 2005/02/23(Wed) 20:14 |
投稿者 | : MIYA |
Eメール | : |
URL | : |
タイトル | : テキストボックス内でのドラッグ&ドロップが出来ない |
テキストボックス内でAPIにてワードラップを抑止(EM_SETWORDBREAKPROCを使用)しているとマウスに
よるドラッグ&ドロップ操作ができません。
テキストボックスのプロパティは、OLEDragMode=自動、OLEDropMode=自動、MultiLine=trueにしてい
ます。
試しにワードラップ抑止の処理させないで実行するとドラック&ドロップ操作が出来てしまいます。
どうしてワードラップ抑止の処理させると出来なくなるのか判りません。ワードラップ抑止の処理を
有効にしたまま、ドラッグ&ドロップ処理が出来るようにすることが出来ないでしょうか?
御教授をお願い致します。
実行環境:Windows XP Home Edition SP2、VB 6.0 SP5
以下がワードラップ抑止のソースです。(標準モジュール内に作成しています)
(ワードラップ抑止処理の呼び出しは、テキストボックスのChangeイベントより呼び出しています)
' ワードラップ関数に置き換えることを示す定数の宣言
Public Const EM_SETWORDBREAKPROC = &HD0
Public Function NonWordrap(txtText As TextBox)
Dim lngSubProcAddress As Long
Dim strSaveText As String
Dim lngSaveStart As Long
Dim lngWin32apiResultCode As Long
' テキストを保存
strSaveText = txtText.text
lngSaveStart = txtText.SelStart
' テキストを初期化
txtText.text = ""
' コールバック関数のアドレスをLong値に変換
lngSubProcAddress = _
GetSubProcAddress(AddressOf EditWordBreakProc)
' ワードラップを抑止
lngWin32apiResultCode = _
SendMessage(txtText.hWnd, _
EM_SETWORDBREAKPROC, _
0, _
ByVal lngSubProcAddress)
' 保存したテキストを戻す
txtText.text = strSaveText
txtText.SelStart = lngSaveStart
End Function
' コールバック関数のアドレスをLong値に変換
'
Public Function GetSubProcAddress _
(ByVal lngProcAddress As Long) As Long
GetSubProcAddress = lngProcAddress
End Function
'
' コールバック関数 - ワードブレイク処理
'
Public Function EditWordBreakProc _
(ByVal lpch As Long, _
ByVal ichCurrent As Long, _
ByVal cch As Long, _
ByVal action As Long) As Long
' 抑止処理なし
EditWordBreakProc = 0
End Function