[開発環境:Win98/VB6SP6]
いつもお世話になります。
質問なのですが、リッチテキストボックス内に表示されている文章の任意の場所を適当に選択し、その文字列を他の適当な場所にズルズルと移動させたいのですが、その適当な場所に選択文字列をドロップするという方法がいまいちわかりません。
一応下記のようにやってみたんですが、当然ながら文章の末尾にしか選択文字列は付加されません。
何かうまい方法はないものでしょうか。
Private Sub RichTextBox1_OLEDragDrop(Data As RichTextLib.DataObject, Effect As Long, Button As Integer, Shift As Integer, x As Single, y As Single)
If Data.GetFormat(vbCFText) = True Then
RichTextBox1.Text = RichTextBox1.Text & Data.GetData(vbCFText)
Else
MsgBox "ドロップすることはできません。"
End If
End Sub
> その文字列を他の適当な場所にズルズルと移動させたいのですが
OLEDropMode を rtfOLEDropManual にせず、rtfOLEDropAutomatic の
ままにしておけば、自動的にそのような動作になるのでは。
> 当然ながら文章の末尾にしか選択文字列は付加されません。
途中に挿入するなら、SelStart/SelText。
座標からの位置判定は、EM_POSFROMCHAR あたりで。
> 座標からの位置判定は、EM_POSFROMCHAR あたりで。
ん…逆でしたね。EM_CHARFROMPOS の方です。m(_ _)m
魔界の仮面弁士さん、ありがとうございます。
おっしゃるように、OLEDropMode を rtfOLEDropAutomatic とすると、たしかに好きな位置にドラッグすることができるのですが、それだと、外部(エクスプローラー)から画像ファイルなど何でもドロップできてしまいますよね。
リッチテキスト内の好きな位置にドラッグしたり、また外部からドロップされたファイルの形式を判断してテキスト形式ファイルだけを許可し、かつそのファイルを開いてエリア内に貼り付けるということは可能なんでしょうか。
>途中に挿入するなら、SelStart/SelText。
>座標からの位置判定は、EM_POSFROMCHAR あたりで。
と書いているように見えるのですが気のせいでしょうか?
すみません。質問の仕方が悪いみたいでした。
もちろん、SelStart/SelTextを使用しました。
それにより、任意の位置へのドロップはできるようになりました。
ありがとうございます。
ところが困ったことに、rtfOLEDropAutomaticを使用すると、ドラッグされたファイルを判定するために必要なOLEDragDropイベントが発生しないため、VBが勝手にドロップ処理をしてしまいます。
そこで、ファイルの判定処理もrtfOLEDropManual使用時のように可能で、かつ任意の場所へのドラッグ&ドロップもできないものだろうかと、お聞きしたかったのでした。すみませんでした。
>もちろん、SelStart/SelTextを使用しました。
>それにより、任意の位置へのドロップはできるようになりました。
SelStart/SelTextが必要なのはrtfOLEDropManualの時じゃないの?
だから、そこで判定処理を追記すればいいだけのような。
何が聞きたいのかやっぱり分かりません。
言葉足らずになると申し訳ないので補足
魔界の仮面弁士さんがいいたかったことは
>(OLEDropMode を rtfOLEDropManual にして)
>途中に挿入するなら、SelStart/SelText。
>座標からの位置判定は、EM_CHARFROMPOS あたりで。
()の部分が省略されている
ということだと思いますよ。
そこにOLEDropModeをrtfOLEDropAutomaticにし、かつSelStart/SelTextを使用して実現した。
との書き込みだったので??となっているわけです。
すみません。rtfOLEDropAutomaticとrtfOLEDropManualでの処理結果を混同して書いてしまいました。
この件は、rtfOLEDropAutomaticを使用することで目的は達成できそうなので、解決ということにしたいと思います。
ありがとうございました。
ツイート | ![]() |