VB6.0用掲示板の過去のログ(No.2)−VBレスキュー(花ちゃん)
[記事リスト] [新規投稿] [新着記事] [ワード検索] [管理用]

投稿日: 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


- 関連一覧ツリー (★ をクリックするとツリー全体を一括表示します)

- 返信フォーム (この記事に返信する場合は下記フォームから投稿して下さい)

- VBレスキュー(花ちゃん) - - Web Forum -