クリップボードを使わないで文字をコピー・ペーストするには?


てるリン95  2004-11-17 23:29:16  No: 117654  IP: [192.*.*.*]

VB6 SP6
  Win2000Pro SP4

クリップボードやドラッグ&ドロップを使わずに選択文字列を複写したいのですが
、VB6で自前クリップボードのようなプログラムは実装できるでしょうか?
コピー・ペースト対象は、テキストデータ(文字列)だけです。

いろいろ調べたのですが、クリップボード経由以外のやりかたが見つからないものですから、どうぞよろしくお願いいたします。

編集 削除
GOD  2004-11-17 23:35:45  No: 117655  IP: [192.*.*.*]

こんなのでいいの?
Private Sub Command1_Click()
    Text2 = Text1.SelText
End Sub

編集 削除
マグ  2004-11-18 08:44:20  No: 117656  IP: [192.*.*.*]

クリップボードにデータを入れたり読み込んだりしなければいいのでしたら、

変数にデータを入れたり、変数からデータを読み込んだりしたら、
いいのではないでしょうか?

編集 削除
てるリン95  2004-11-18 09:22:01  No: 117657  IP: [192.*.*.*]

みなさん早速のご回答ありがとうございます。ちょっぴり感激しちゃいました!(^^)!

GOD様、ご回答ありがとうございます。
  使いたい状況を具体的に書かずにごめんなさい。

  あるWebページのテキスト入力フィールドに入力した文字列を同一あるいは
  別ウインドウのテキスト入力フィールドに複写したいのですが・・・。

マグ様、ご回答ありがとうございます。
  まさにその通りだと思うのですが、どのようにしたらクリップボードを使
  わずに、選択した文字列を変数に入れたり、変数からはきだしたりできる
  のでしょうか?

編集 削除
マグ  2004-11-18 12:04:49  No: 117658  IP: [192.*.*.*]

このようにやりたいとか。

ソースは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

っとこんな感じになります。
ソースの記述法を提供されたっぽいから作ってみたら、
意外と難しくはありませんでした。

編集 削除
Say  2004-11-18 12:44:36  No: 117659  IP: [192.*.*.*]

要はプロセス間通信したいってことでしょう?
DDEがいちばん簡単です。
ヘルプでLinkItem,LinkMode,LinkTopicあたりを調べてください。

さもなくば、相手TextBoxのWindowHandleを取得して
WM_SETTEXTをSendMessageするとか。

データ量が多いなら共有メモリ使うとか。

編集 削除
てるリン95  2004-11-18 13:44:45  No: 117660  IP: [192.*.*.*]

マグ様、どうもありがとうございます。
  ソースまで提示していただき本当に申し訳ございません。まだ、.NETでは
  コーディングしたことないので良く読めないんですが、このコードは、
  TextBox内の選択文字列を変数に格納し、その変数の内容をTextBoxにセッ
  トするものでしょうか?
  すみません、もう少し自分でじっくり解読してみます。

Say様、どうもありがとうございます。
  「DDE」ですか、ちょっと思いつかなかったというか使ったことがないので  良く調べてみます。

> さもなくば、相手TextBoxのWindowHandleを取得して
> WM_SETTEXTをSendMessageするとか。

  上のほうにも書いたのですが今回は、Webページのテキスト入力エリアを対
  象にしていますので、ウインドウハンドルは持たないと思っているんです
  が間違ってますでしょうか?

> データ量が多いなら共有メモリ使うとか。

  MAXで、400byteくらいのテキストデータを想定していますので多くはない
  と思っていますが「共有メモリ」についても調べてみます。
  ありがとうございました。

編集 削除
マグ  2004-11-18 14:04:04  No: 117661  IP: [192.*.*.*]

ソース中に記載されているコメントを読めば、大まかな流れはつかめると思いますが、

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文は必要ありません。

編集 削除
Say  2004-11-18 16:38:26  No: 117662  IP: [192.*.*.*]

対象がWeb Page なら、Document Objectを使って
直接読み書きすればいいのでは?

編集 削除
てるリン95  2004-11-18 17:10:25  No: 117663  IP: [192.*.*.*]

マグ様、とても丁寧なコメントありがとうございます。本当に勉強になりました。

Say様、テキスト入力フィールドに入力した文字も、Document Objectで抜けるとは思いませんでした。早速やってみます。

お二方とも貴重な時間をさいて、たくさんの情報を提示していただき本当にありがとうございます。またよろしくお願いします。

編集 削除