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

投稿日: 2005/08/14(Sun) 10:12
投稿者Starfish
Eメール
URL
タイトルRe: リッチテキストについて

> ためしに、ドラッグされたらドラッグ先のカーソル位置に選択された文字列を移動させる処理を
> 組んだところ、手動モードではなぜかドラッグ中にカーソルが移動しませんでした。
> そのためドラッグする前の位置に貼り付けられ、文字が消えることは無くなりましたがドラッグ前と
結局変わらない状況でした。
>
> ファイルの貼り付けを禁止しつつ文字の移動ができるようにするにはどうすればよいのでしょうか?
> ※このときファイルをD&Dしたらフルパスが取れるようにしたいと思っています(取得の仕方は知って
ます)

 ためしに、ドロップ時に手動で移動させる処理を組みましたが、
特に問題はありませんでした。(Autoでは、ドラッグ先に、
キャレットのように表示されますが、それはできていません。)

 関連する、ソースを貼り付けておきます。EM_CHARFROMPOS は、 &HD7
です。それ以外は、APIビューアから拾ってください。

Private Sub RichTextBox1_OLEDragDrop(Data As RichTextLib.DataObject, Effect As Long, Button
As Integer, Shift As Integer, x As Single, y As Single)
Dim i As Long
Dim lngReturnValue As Long
Dim udtPointl As POINTL
    
    If Data.GetFormat(vbCFText) Then
        udtPointl.x = x \ Screen.TwipsPerPixelX
        udtPointl.y = y \ Screen.TwipsPerPixelY
        lngReturnValue = SendMessage(RichTextBox1.hwnd, EM_CHARFROMPOS, 0, udtPointl)
        RichTextBox1.SelStart = lngReturnValue
        RichTextBox1.SelText = Data.GetData(vbCFText)
        If (Shift And vbCtrlMask) = vbCtrlMask Then
            Effect = vbDropEffectCopy
        Else
            Effect = vbDropEffectMove
        End If
    ElseIf Data.GetFormat(vbCFFiles) Then
        For i = 1 To Data.Files.Count
            List1.AddItem Data.Files(i)
        Next
        Effect = vbDropEffectCopy
    Else
        Effect = vbDropEffectNone
    End If

End Sub

Private Sub RichTextBox1_OLEDragOver(Data As RichTextLib.DataObject, Effect As Long, Button
As Integer, Shift As Integer, x As Single, y As Single, State As Integer)

    If Data.GetFormat(vbCFText) Then
        If (Shift And vbCtrlMask) = vbCtrlMask Then
            Effect = vbDropEffectCopy
        Else
            Effect = vbDropEffectMove
        End If
    ElseIf Data.GetFormat(vbCFFiles) Then
        Effect = vbDropEffectCopy
    Else
        Effect = vbDropEffectNone
    End If

End Sub

> また、クリップボードに画像データがある状態で右クリック→貼り付けをすると画像が貼られてしま
います。
> さらにはファイルを右クリック→コピーをしてから同じ操作をすると結局ファイルアイコンが貼られ
てしまいます。
> これも防止したいのですがどうすればよいのかまったくわかりません。

 サブクラス化して、貼り付けようとしたときに、自分でクリップボードから貼り付ければ
テキストだけ貼り付ければできると思います。


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

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

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