喫茶XRAYトップページ


[806] ワードへのbitmap貼り付け方法について返信 削除
2006/5/31 (水) 09:28:22 まるじ
XRAYさん、こんにちは。
初めて投稿します"まるじ"といいます。
いつも有意義なコンポーネントの紹介、素晴らしいです。
ワード操作にお詳しいと思いご相談させていただきます。

あらかじめ文章を入れたWordを開いて、ClipbrdのBitmapを
貼り付けたいのですが、うまくいきません。
元の文章が消されてしまい図だけ張り付きます。
(ワードの"元に戻すボタン"で書き込んであった文章は戻せます。)
開いた文章を消さずにBitmapを貼り付ける方法をご存知であれば
ご教授いただければ幸いです。

ただ貼り付けてるからダメなんですよね・・・。

//usesにComObj追加
------------------------------------------
  private
   WApp, Word : Variant;
  end;

const
  wdPasteBitmap = $00000004;
var
  Form1: TForm1;

implementation

{$R *.DFM}
procedure TForm1.Button1Click(Sender: TObject);
begin
 WApp  := CreateOleObject('Word.Application');
 Word  := WApp.Documents.Open('"C:\□□\□□\sample.doc"');
 Word  := Word.Content.PasteSpecial(,,,,wdPasteBitmap);
 WApp.Visible := True;
end;

どうぞよろしくお願いいたします。

[807] Re:ワードへのbitmap貼り付け方法について返信 削除
2006/5/31 (水) 21:10:29 Mr.XRAY
▼ まるじさん、こんにちは。

> 元の文章が消されてしまい図だけ張り付きます。
> (ワードの"元に戻すボタン"で書き込んであった文章は戻せます。)


まず、以下のことを教えて下さい。
(1) 開発Delphiのバージョン
(2) 開発Windowsのバージョンとワードのバージョン
(3) その図を貼付けた時に、ワードの文書のどの位置にどのくらい
    の大きさとなっているか。
    (例 用紙の横幅一杯とか、mmのサイズとか)
(4) その図を選択した時に、周囲のグラブ(サイズ調整用の四角形の
    色(塗りつぶしか白か)
(5) もし、その図形をマウスで移動できるなら、移動したら元の
    文章が見えるようになるのか。

それと、テストコードで気づいたこと。
(1) たとえテストでも生成したオブジェクトは破棄しておく方が
    いいでしょう。予期せぬ状態を招くことがあります。
(2) 同様に、もし、クリップボードから画像を取得できなかった場合も
    考えておく。
(3) Wordという予約語の変数は使用しない。問題が発生した場合、バグ
    取りが困難となります。

例えば以下の様に。

procedure TForm1.Button1Click(Sender: TObject);
var
     S: String;
begin
     S:='C:\AAA\Test.doc';
     WApp  := CreateOleObject('Word.Application');
     try
       AWord  := WApp.Documents.Open(S);
       AWord.Content.PasteSpecial(,,,,wdPasteBitmap);
       //ここでAWord:=AWord.Content...としてしまうと、
       //後でAWordが何を指しているか不明となってしまう。
       //必要であれば別の変数を用意する。
     except
     end;
     WApp.Visible := True;
end;

procedure TForm1.FormDestroy(Sender: TObject);
begin
     //VarIsEmptyはDelphiのバージョンによっては使用不可?
     if not VarIsEmpty(WApp) then begin
       AWord :=unAssigned;
       WApp  :=unAssigned;
     end;
end;




[808] Re2:ワードへのbitmap貼り付け方法について返信 削除
2006/5/31 (水) 22:35:17 まるじ
XRAYさん、早速のご返事恐縮です。
以下、ご返事いたします。

> (1) 開発Delphiのバージョン

   D6 Personalを使用しています。

> (2) 開発Windowsのバージョンとワードのバージョン

   Win-XP HE です。

> (3) その図を貼付けた時に、ワードの文書のどの位置にどのくらい
>     の大きさとなっているか。
>     (例 用紙の横幅一杯とか、mmのサイズとか)


   左上の角(0.0だと思います)の位置に58%の大きさです。

> (4) その図を選択した時に、周囲のグラブ(サイズ調整用の四角形の
>     色(塗りつぶしか白か)

 
   何も色が付いているように見えないので白かもしれません・・。

> (5) もし、その図形をマウスで移動できるなら、移動したら元の
>     文章が見えるようになるのか。
>

   見えません。
   入れられている文字すべてが選択されて(?)貼り付けられる
   みたいで消されてしまっています。サンプルexeで図を貼り付けた
   あとに、ワードの元に戻すボタンを押すと図が消えて文字が出ます。

> それと、テストコードで気づいたこと。

   ありがとうございます。(実際に書き換えて試しました!)
   今後はご教示の内容で進めたいと思います。

ご返事が遅くなってすみません。よろしくお願いいたします。

 

[810] Re3:ワードへのbitmap貼り付け方法について返信 削除
2006/5/31 (水) 22:44:28 Mr.XRAY
▼ まるじさん
> > (5) もし、その図形をマウスで移動できるなら、移動したら元の
> >     文章が見えるようになるのか。
> >
>    見えません。
>    入れられている文字すべてが選択されて(?)貼り付けられる
>    みたいで消されてしまっています。サンプルexeで図を貼り付けた
>    あとに、ワードの元に戻すボタンを押すと図が消えて文字が出ます。


これをもう一度確認して下さい。というのは、
ワードの元に戻すというのは、動作を一つ戻すだけです。
つまり、この場合、クリップボードからの貼付けを戻すわけです。
それを戻して、文章が見えるということは、図を貼付けた後も文字は
消えていないことになります。

図はマウスで移動できるのでしょうか。もし、できなかったら、
図をクリックし、ポップアップメニュー(右クリック)で
   [図の書式]
   [レイアウト]タブをクリック
   [背面]を選択して[OK]
これで図が移動します。移動できたら、図サイズも極力小さくして
みて下さい。


[811] Re4:ワードへのbitmap貼り付け方法について返信 削除
2006/5/31 (水) 22:51:06 まるじ
> 図はマウスで移動できるのでしょうか。

  はい、図はマウスで移動できます。

[813] Re5:ワードへのbitmap貼り付け方法について返信 削除
2006/5/31 (水) 23:09:27 Mr.XRAY
▼ まるじさん
>   はい、図はマウスで移動できます。
図の現在のサイズはどのくらいですか。
極力小さくしてみて下さい。
(貼付けた後にサイズ変更をマウスで行えます)
それと、ワード2000のSPの番号は、いくつですか。
ワード2000は最低SP2をあてないと、図の貼付けにバグがあります。

[814] Re6:ワードへのbitmap貼り付け方法について返信 削除
2006/5/31 (水) 23:36:14 Mr.XRAY
それと、もう一つテスト方法。
最初のテスト用のワードの文書を、新規に文書を作成して(つまり、
空白の文書)、そこに適当に文章を数行でいいですから、作成して保存します。
この文書で試してみて下さい。

それから、そのクリップボードには、どんなアプリで[コピー]したのか
わかれば参考になると思います。


[815] Re7:ワードへのbitmap貼り付け方法について返信 削除
2006/6/1 (木) 10:19:06 まるじ
>それと、ワード2000のSPの番号は、いくつですか。

SP3です。
 
>それと、もう一つテスト方法。
>最初のテスト用のワードの文書を、新規に文書を作成して(つまり、
>空白の文書)、そこに適当に文章を数行でいいですから、作成して保存します。
>この文書で試してみて下さい。


ご指示通りの文書で試しました。結果は同じです。

>それから、そのクリップボードには、どんなアプリで[コピー]したのか
>わかれば参考になると思います。


PCのPrintScreenで画面をキャプチャーした図です。

気が付いたことですが、まったくの新規文書(当然、文字は入っていない)でも
その内容が消されます。

新規で文書を作ると「改行マークの矢印」がひとつだけ表示されています。
マウス左をクリックしながらドラックしていくと改行マークを含めて数ミリ反転します。
この状態で貼り付けを行うと、現在の文書内容のすべて削除されるようです。


[816] Re8:ワードへのbitmap貼り付け方法について返信 削除
2006/6/1 (木) 12:41:33 Mr.XRAY
▼ まるじさん
> 気が付いたことですが、まったくの新規文書(当然、文字は入っていない)でも
> その内容が消されます。


えっ?、ちょと意味がわかりません。新規で文字が入っていないというこ
とは、元々内容がないのでは?


[817] Re9:ワードへのbitmap貼り付け方法について返信 削除
2006/6/1 (木) 13:59:31 まるじ
> えっ?、ちょと意味がわかりません。新規で文字が入っていないというこ
> とは、元々内容がないのでは?


んーと、表現が悪くてすみません。あと言葉足らずで。
サンプルコードを使わずともワード文書だけで症状が再現できるので、それを
ご確認いただけますと助かります。

以下、症状の再現手順です。

@ワードで新規文書作成。
Aオートシェイプで文書下寄りに四角(なんでもいい)を壁画。
 文字でもいいんですが、文字無しで再現するため。
BPCの「PrintScreenボタン」を押し画面をキャプチャー。
 クリップボードに現在のモニター画面を記憶。
Cワード文書内の1行目全てをマウス左をクリックしながらドラックし反転。
 アウトラインモードと同様の作業。改行マークの右側まで反転していることを確認。
 (サンプルコードではこの動作がされている模様)
Dワードの「貼り付けボタン」を押す。
 図(画面のbitmap)が張り付いていることを確認。

ここまでで最初に壁画した四角が消されていることがわかると思います。
サンプルコードでは文書を開いた際に最終文字の改行マークまで全て選択して
貼り付けているようで、これがテンプレートとしたい文書の中身を消すことに
なってしまっている、と思うのですが。



[818] Re10:ワードへのbitmap貼り付け方法について返信 削除
2006/6/1 (木) 16:16:40 Mr.XRAY
▼ まるじさん
> Cワード文書内の1行目全てをマウス左をクリックしながらドラックし反転。
>  アウトラインモードと同様の作業。改行マークの右側まで反転していることを確認。


ということは、新規作成したワードに何か文章は入力するということですか?
アウトラインモード? と同じ?
どうも、まるじさんと私は、用語の解釈が違うようですね。

>サンプルコードを使わずともワード文書だけで症状が再現できるので、それを
>ご確認いただけますと助かります。


私の環境ではまるじさんの様に文字は消えません。
もちろん最初のテストコードでも...


注意 ネットでは○の中に数字の文字は使用禁止です。
http://mrxray.on.coocan.jp/Links.htm#Mail




[819] Re11:ワードへのbitmap貼り付け方法について返信 削除
2006/6/1 (木) 18:10:11 まるじ
▼ Mr.XRAYさん
> ということは、新規作成したワードに何か文章は入力するということですか?
 
 文章は入力しません。
 文字先頭より改行マークの右側まで反転させて選択する作業後に
 図を貼り付けます。
 
> アウトラインモード? と同じ?
> どうも、まるじさんと私は、用語の解釈が違うようですね。


  またまた言葉足らずで申し訳ありません。
 アウトラインモードで文字列を選択するとき、左にある四角のマスを押すと
 全ての文字を選ぶことができますが、これと同じですいう意味で「アウトライン
 モードと同様の作業」と単純に書いてしまいました。
 余計なコメントでした。
 
> 私の環境ではまるじさんの様に文字は消えません。
> もちろん最初のテストコードでも...


 同じコードを使って結果が異なるのであれば、ワード側の設定に違いが
 あるのかもしれません。設定を変えて試してみます。

> 注意 ネットでは○の中に数字の文字は使用禁止です。
> http://mrxray.on.coocan.jp/Links.htm#Mail


申し訳ありません。以後注意いたします。

[820] Re11:ワードへのbitmap貼り付け方法について返信 削除
2006/6/1 (木) 19:06:47 まるじ
▼ Mr.XRAYさん
> 私の環境ではまるじさんの様に文字は消えません。
> もちろん最初のテストコードでも...


違いの原因がわかりました。
ワードのオプション設定の違いでした。

私の方では「編集と日本語入力」-「選択した文字列を置き換え入力する」に
チェックが入ってました。入っていると、記載されている文字や図形が消され
て消えてしまうのですね。このチェックを外すと消えませんでした。
XRAYさんの設定ではチェックが外れていませんか?
このチェックを強制的に外すコードがわかれば解決できそうです。

[821] Re12:ワードへのbitmap貼り付け方法について返信 削除
2006/6/1 (木) 19:53:52 Mr.XRAY
▼ まるじさん

> 私の方では「編集と日本語入力」-「選択した文字列を置き換え入力する」に
> チェックが入ってました。入っていると、記載されている文字や図形が消され
> て消えてしまうのですね。このチェックを外すと消えませんでした。


確認しました。このオプションにチェックを入れると、確かに
まるじさんと同じになりました。

>このチェックを強制的に外すコードがわかれば解決できそうです。
これはマズイでしょう。オプションを変更してしまうというのは。
Collapseメソッドで選択解除でカーソル位置を変更した方がいいと
思います。
あるいは、PasteSpecialでなく他の方法を考えるとか。

procedure TForm1.Button1Click(Sender: TObject);
var
     S: String;
     ARange: Variant;
begin
     S:='C:\AAA\Test.doc';
     WApp  := CreateOleObject('Word.Application');
     try
       AWord  := WApp.Documents.Open(S);
       ARange := AWord.Content;
       ARange.Collapse;
       ARange.PasteSpecial(,,,,wdPasteBitmap);
     except
     end;
     WApp.Visible := True;
end;

これは例です。あくまで。
しかし、コード補完が利用できないのは辛い。私はやはりTWordApplication
の方を好みます。



[822] Re13:ワードへのbitmap貼り付け方法について返信 削除
2006/6/1 (木) 21:19:54 まるじ
▼ Mr.XRAYさん、ありがとうございます。
> Collapseメソッドで選択解除でカーソル位置を変更した方がいいと
> 思います。

Collapseメソッドというのは知りませんでした。
実際に試してみましたが、これで十分です!

色々と説明不足の点がありご迷惑おかけいたしました。
お詫び申し上げます。
ありがとうございました。



[823] Re14:ワードへのbitmap貼り付け方法について返信 削除
2006/6/1 (木) 22:38:17 Mr.XRAY
▼ まるじさん
> 実際に試してみましたが、これで十分です!

PasteSpecialというのは、現在のRangeを置換えてしまいます。
そこで前のレスではPasteSpecialでなく他の方法を...
と書きました。

ワードを開いた時点で、その文書(Range)に対して、いわゆる操作が可能と
なっているわけです。私もその時点で[選択した文字列を置き換え入力する]
のことを思い浮かべばよかったのですが、拙作のワード操作、エクセル操作
でも、前の状態を変更なしに操作することを重点においていますので、
(オプションを変更してしまうのはマズイと書いたのはそのポリシーが
 あるからです)
極力そのような状態での操作をしないように、考えています。
そのため、このオプションのことが頭に浮かばなかったとのでしょう。

[824] Re15:ワードへのbitmap貼り付け方法について返信 削除
2006/6/1 (木) 23:06:51 まるじ
▼ Mr.XRAYさん
ご教示ありがとうございます。理解いたしました。
行き詰ったときはご相談させていただくことがあろうかと思いますが
その時はどうぞよろしくお願いいたします。勉強します。




[812] Re4:ワードへのbitmap貼り付け方法について返信 削除
2006/5/31 (水) 22:56:28 まるじ
> > (5) もし、その図形をマウスで移動できるなら、移動したら元の
> >     文章が見えるようになるのか。


    図を貼り付けた後、文字は消えてしまいます。

INCM/CMT
Cyclamen v3.82