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