VB6 SP6
Win2000Pro SP4
クリップボードやドラッグ&ドロップを使わずに選択文字列を複写したいのですが
、VB6で自前クリップボードのようなプログラムは実装できるでしょうか?
コピー・ペースト対象は、テキストデータ(文字列)だけです。
いろいろ調べたのですが、クリップボード経由以外のやりかたが見つからないものですから、どうぞよろしくお願いいたします。
こんなのでいいの?
Private Sub Command1_Click()
Text2 = Text1.SelText
End Sub
クリップボードにデータを入れたり読み込んだりしなければいいのでしたら、
変数にデータを入れたり、変数からデータを読み込んだりしたら、
いいのではないでしょうか?
みなさん早速のご回答ありがとうございます。ちょっぴり感激しちゃいました!(^^)!
GOD様、ご回答ありがとうございます。
使いたい状況を具体的に書かずにごめんなさい。
あるWebページのテキスト入力フィールドに入力した文字列を同一あるいは
別ウインドウのテキスト入力フィールドに複写したいのですが・・・。
マグ様、ご回答ありがとうございます。
まさにその通りだと思うのですが、どのようにしたらクリップボードを使
わずに、選択した文字列を変数に入れたり、変数からはきだしたりできる
のでしょうか?
このようにやりたいとか。
ソースはVB.NETです。・・・・・実はVB6の環境がなくって(TT)
無料の開発ソフトを配っている所ってありますか?(期間限定なしで)
んでもって、ソースは・・・・・
Dim Clip As String 'クリップボートの代わり
Dim selection As Integer '位置を取得する
Dim mozi As String
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
'TextBoxの内容を空にする
TextBox1.Text = ""
End Sub
Private Sub MenuItem1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MenuItem1.Click
'次に(ニセ)クリップボードにデータを入れる
Clip = TextBox1.Text.Substring(TextBox1.SelectionStart, TextBox1.SelectionLength)
End Sub
Private Sub MenuItem2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MenuItem2.Click
selection = TextBox1.SelectionStart
'データをカットする
If selection >= 0 Then
mozi = TextBox1.Text.Substring(0, selection) & Clip & TextBox1.Text.Substring(selection)
'TextBoxの内容をクリアする
TextBox1.Text = ""
'TextBoxに表示
TextBox1.Text = mozi
End If
End Sub
っとこんな感じになります。
ソースの記述法を提供されたっぽいから作ってみたら、
意外と難しくはありませんでした。
要はプロセス間通信したいってことでしょう?
DDEがいちばん簡単です。
ヘルプでLinkItem,LinkMode,LinkTopicあたりを調べてください。
さもなくば、相手TextBoxのWindowHandleを取得して
WM_SETTEXTをSendMessageするとか。
データ量が多いなら共有メモリ使うとか。
マグ様、どうもありがとうございます。
ソースまで提示していただき本当に申し訳ございません。まだ、.NETでは
コーディングしたことないので良く読めないんですが、このコードは、
TextBox内の選択文字列を変数に格納し、その変数の内容をTextBoxにセッ
トするものでしょうか?
すみません、もう少し自分でじっくり解読してみます。
Say様、どうもありがとうございます。
「DDE」ですか、ちょっと思いつかなかったというか使ったことがないので 良く調べてみます。
> さもなくば、相手TextBoxのWindowHandleを取得して
> WM_SETTEXTをSendMessageするとか。
上のほうにも書いたのですが今回は、Webページのテキスト入力エリアを対
象にしていますので、ウインドウハンドルは持たないと思っているんです
が間違ってますでしょうか?
> データ量が多いなら共有メモリ使うとか。
MAXで、400byteくらいのテキストデータを想定していますので多くはない
と思っていますが「共有メモリ」についても調べてみます。
ありがとうございました。
ソース中に記載されているコメントを読めば、大まかな流れはつかめると思いますが、
Private Sub MenuItem1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MenuItem1.Click
'次に(ニセ)クリップボードにデータを入れる
Clip = TextBox1.Text.Substring(TextBox1.SelectionStart, TextBox1.SelectionLength)
End Sub
のソースは「コピー」の動作をさせています。
変数ClipにTextBoxでフォーカスを与えた文字列のみを入れています。
Private Sub MenuItem2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MenuItem2.Click
selection = TextBox1.SelectionStart
'データをカットする
If selection >= 0 Then
mozi = TextBox1.Text.Substring(0, selection) & Clip & TextBox1.Text.Substring(selection)
'TextBoxの内容をクリアする
TextBox1.Text = ""
'TextBoxに表示
TextBox1.Text = mozi
End If
End Sub
のソースは「貼り付け」の動作をしています。
まず、変数selectionにカーソル位置をいれて、
IF文でカーソル位置が0より小さいかどうかを判断させて、
次にTextBoxの文字列をカーソルの位置を基準に左と右に分けて、その真ん中に変数Clip(ニセクリップボード)入れて、
つなげた文字を変数moziに入れて、
TextBoxの文字を全て消し、
変数moziの内容をTextBoxに入れていると言うソースです。
ってミスをしているのに気がつきました。
よく、考えれば、IF文は必要ありませんでした。
すでにカーソルがテキスト内にある時点で必ず、どう考えても0以上に
なってしまいます。
っということでIF文は必要ありません。
対象がWeb Page なら、Document Objectを使って
直接読み書きすればいいのでは?
マグ様、とても丁寧なコメントありがとうございます。本当に勉強になりました。
Say様、テキスト入力フィールドに入力した文字も、Document Objectで抜けるとは思いませんでした。早速やってみます。
お二方とも貴重な時間をさいて、たくさんの情報を提示していただき本当にありがとうございます。またよろしくお願いします。