リッチテキストボックス内で好きな場所に選択文字列をドロップするには?

解決


マロン  2006-04-22 05:49:50  No: 131073

[開発環境: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


魔界の仮面弁士  2006-04-22 06:36:48  No: 131074

> その文字列を他の適当な場所にズルズルと移動させたいのですが
OLEDropMode を rtfOLEDropManual にせず、rtfOLEDropAutomatic の
ままにしておけば、自動的にそのような動作になるのでは。

> 当然ながら文章の末尾にしか選択文字列は付加されません。
途中に挿入するなら、SelStart/SelText。
座標からの位置判定は、EM_POSFROMCHAR あたりで。


魔界の仮面弁士  2006-04-22 06:40:40  No: 131075

> 座標からの位置判定は、EM_POSFROMCHAR あたりで。
ん…逆でしたね。EM_CHARFROMPOS の方です。m(_ _)m


マロン  2006-04-24 20:27:17  No: 131076

魔界の仮面弁士さん、ありがとうございます。
おっしゃるように、OLEDropMode を rtfOLEDropAutomatic とすると、たしかに好きな位置にドラッグすることができるのですが、それだと、外部(エクスプローラー)から画像ファイルなど何でもドロップできてしまいますよね。

リッチテキスト内の好きな位置にドラッグしたり、また外部からドロップされたファイルの形式を判断してテキスト形式ファイルだけを許可し、かつそのファイルを開いてエリア内に貼り付けるということは可能なんでしょうか。


KMM  2006-04-24 21:23:48  No: 131077

>途中に挿入するなら、SelStart/SelText。
>座標からの位置判定は、EM_POSFROMCHAR あたりで。
と書いているように見えるのですが気のせいでしょうか?


マロン  2006-04-24 21:45:28  No: 131078

すみません。質問の仕方が悪いみたいでした。
もちろん、SelStart/SelTextを使用しました。
それにより、任意の位置へのドロップはできるようになりました。
ありがとうございます。

ところが困ったことに、rtfOLEDropAutomaticを使用すると、ドラッグされたファイルを判定するために必要なOLEDragDropイベントが発生しないため、VBが勝手にドロップ処理をしてしまいます。

そこで、ファイルの判定処理もrtfOLEDropManual使用時のように可能で、かつ任意の場所へのドラッグ&ドロップもできないものだろうかと、お聞きしたかったのでした。すみませんでした。


KMM  2006-04-24 23:31:52  No: 131079

>もちろん、SelStart/SelTextを使用しました。
>それにより、任意の位置へのドロップはできるようになりました。
SelStart/SelTextが必要なのはrtfOLEDropManualの時じゃないの?
だから、そこで判定処理を追記すればいいだけのような。

何が聞きたいのかやっぱり分かりません。


KMM  2006-04-24 23:44:01  No: 131080

言葉足らずになると申し訳ないので補足

魔界の仮面弁士さんがいいたかったことは

>(OLEDropMode を rtfOLEDropManual にして)
>途中に挿入するなら、SelStart/SelText。
>座標からの位置判定は、EM_CHARFROMPOS あたりで。

()の部分が省略されている

ということだと思いますよ。
そこにOLEDropModeをrtfOLEDropAutomaticにし、かつSelStart/SelTextを使用して実現した。
との書き込みだったので??となっているわけです。


マロン  2006-04-26 16:39:13  No: 131081

すみません。rtfOLEDropAutomaticとrtfOLEDropManualでの処理結果を混同して書いてしまいました。

この件は、rtfOLEDropAutomaticを使用することで目的は達成できそうなので、解決ということにしたいと思います。
ありがとうございました。


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加