投稿日 | : 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
> また、クリップボードに画像データがある状態で右クリック→貼り付けをすると画像が貼られてしま
います。
> さらにはファイルを右クリック→コピーをしてから同じ操作をすると結局ファイルアイコンが貼られ
てしまいます。
> これも防止したいのですがどうすればよいのかまったくわかりません。
サブクラス化して、貼り付けようとしたときに、自分でクリップボードから貼り付ければ
テキストだけ貼り付ければできると思います。