こんばんわ。今回初めて質問させて頂きます。
やりたいことは以下のとおりです。
AとBという画面があるとします。
Aという画面には様々なボタンと
TOleContainerに、ワード2003?が入っています。
Bという画面にはエディタとツリーとボタンがあり、
ツリーから内容を選んで、エディタに反映させる機能があります。
Bの画面を閉じる時、「反映」というボタンを押下すると、
別画面のエディタ等にB画面のエディタの内容が反映される仕組みです。
(B画面は共通画面で、他の画面でも使われています)
今回やりたい事は、B画面のエディタ内容をA画面のワードに反映させたいのです。
現在の手法では、B画面で「反映」ボタン押下後、
A画面のワードをアクティブにし、右クリックから貼り付け。
という操作でしか反映出来ません。
(B画面でクリップボードに保存しているので、後はワード標準機能の貼り付けを利用しているようです)
この操作が面倒なので「反映」ボタン押下後、
A画面のワードに直接反映させたい。という要望なのですが、
こういう操作は可能なのでしょうか?
Delphiは超初心者なのですが、個人的には無理なんじゃないかなぁ。
と思っています。
※TOleContainerはワードを表示させているだけのように見えるから
もし、こういう方法があるよ。等がありましたらご教授下さい。
宜しくお願いいたします。
Delphi7 WindowsXP OfficeXP
>可能・不可能
超 容易に 可能
こんにちわっ!
参考程度にしかなりませんが、
TMemoを使用すると、
Memo1.SelectAll;//すべて選択
Memo1.CopyToClipboard;//右クリックのコピー
Memo1.XXXXXXXXXXXXXXX;//右クリックの貼り付け
ができます。
※XXXXXXXXXX:忘れました。Pasteなんとかだったような気が・・・。
まるで試してませんが、以下ではどうですか?
ワード.SetFocus;
keybd_event(VK_CONTROL, 0, 0, 0);
keybd_event(Byte('V'), 0, 0, 0);
keybd_event(Byte('V'), 0, KEYEVENTF_KEYUP, 0);
keybd_event(VK_CONTROL, 0, KEYEVENTF_KEYUP, 0);
みなさん、レスありがとうございます。
若干書き込みに言葉が足りなかったようなので補足します。
A画面は共通画面の為、出来れば触りたくありません。
(関連画面を全てテストしなくてはならなくなるので;)
B画面のみ修正して完了出来たら言うことありません。
で、早速レス頂いた内容で試してみました。
deldelさんのレス内容で試したのですが、
このプログラムを入れるとすれば、どこが適正でしょうか。。。?
OnActivateに入れると、実現可能ですが、
例えばB画面を開く前に、テキストエディタ等でコピーしていると、
その内容が貼り付けられてしまいます。。。
この場合、やはりB画面も修正して、例えば反映ボタン押下(=画面終了)
時に、なんらかのフラグ?を使ったり値返しするのがよいのでしょうか。
まだ、調査中ですが、他画面から帰ってきた時。
みたいな便利なイベントは。。。ありませんよねぇ;;
質問ばかりで申し訳ありませんがわかる範囲で結構です。宜しくお願いいたします。
単純にOnActivateに
ClipBoard.Clear; <uses節に ClipBrd 必要
の一文追加では望む動きにはなりませんか?
私も初心者なので,的はずれな回答してるかもしれませんが・・・
B画面で「反映」ボタン押下後、エディタの内容を
クリップボードにコピー後、ですね。
レスありがとうございます。
>Ruさん
ありがとうございます。教えていただいた方法でクリップボードの中身は
クリア出来ました。
ただ、他画面から帰ってきた時にOnActivateにその文言があると、
コピーした内容が消えてしまう気がします
(現状、他画面から帰ってきた時OnActivateが走っていないのか消えませんが(それも謎))
>deldelさん
教えて頂いた場所に入れたらばっちり出来ました!
上記のような謎な現象が残ったままですが、
OnActivateで貼り付けるPGは止めたので問題ないと思います。
ありがとうございました!
Delphiはまだプログラミング3日目なのでいろいろ苦労しています;
これからもお世話になると思いますがどうぞ宜しくお願いします。
ツイート | ![]() |