[リストへもどる]   [VBレスキュー(花ちゃん)]
一括表示

投稿時間:2005/08/09(Tue) 09:37
投稿者名:たけぽい
Eメール:
URL :
タイトル:
リッチテキストについて
VB6.0
はじめまして、リッチテキストで質問です。
リッチテキストはデフォルトではOLEドラッグドロップがオートになってます。
このときは文字を選択してドラッグすると移動させることができますが、ファイルをD&Dすると
アイコンがそのまま貼り付けられてしまいます。
そこで手動にしたところ、ファイルが貼り付けられることはなくなりましたが今度は
文字の移動もできなくなってしまいました。(ドラッグはできるが消える)

ためしに、ドラッグされたらドラッグ先のカーソル位置に選択された文字列を移動させる処理を
組んだところ、手動モードではなぜかドラッグ中にカーソルが移動しませんでした。
そのためドラッグする前の位置に貼り付けられ、文字が消えることは無くなりましたがドラッグ前と結局変わらない状況でした。

ファイルの貼り付けを禁止しつつ文字の移動ができるようにするにはどうすればよいのでしょうか?
※このときファイルをD&Dしたらフルパスが取れるようにしたいと思っています(取得の仕方は知ってます)


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

よろしくお願いします。長文失礼しました。

投稿時間: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

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

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

投稿時間:2005/08/15(Mon) 17:10
投稿者名:たけぽい
Eメール:
URL :
タイトル:
Re^2: リッチテキストについて
文字の移動はできるようになりました。サブクラス化はまだ勉強中なので
できるかどうかわかりませんががんばってみます。

どうもありがとうございました。