全國最多中醫師線上諮詢網站-台灣中醫網
發文 回覆 瀏覽次數:4389
推到 Plurk!
推到 Facebook!

print screen後再貼入word

 
senix
一般會員


發表:28
回覆:25
積分:10
註冊:2002-03-15

發送簡訊給我
#1 引用回覆 回覆 發表時間:2002-03-26 11:01:53 IP:211.21.xxx.xxx 未訂閱
各位前輩~請教一下 我想把某個Form 做print_screen後再貼入Word A.先做一段print_screen程式 B.用Bottom呼叫Word C.再將結果貼到Word 要如何做,會很複雜嗎? PS.可否詳細解說,有範例嗎.......謝謝各位
領航天使
站長


發表:12216
回覆:4186
積分:4084
註冊:2001-07-25

發送簡訊給我
#2 引用回覆 回覆 發表時間:2002-03-26 18:30:04 IP:61.219.xxx.xxx 未訂閱
先回答第一部份
uses clipbrd;
//....
var bitmap:tbitmap;
   MyFormat : Word;
   AData,APalette : THandle;
begin
  Bitmap := TBitmap.Create;
  bitmap.Width:=form1.Canvas.ClipRect.Right;
  bitmap.height:=form1.Canvas.ClipRect.Bottom;
  bitmap.Canvas.copyrect(form1.Canvas.ClipRect,form1.canvas,form1.Canvas.ClipRect);
  Bitmap.SaveToClipBoardFormat(MyFormat,AData,HPalette(APalette));
  ClipBoard.SetAsHandle(MyFormat,AData);
  Bitmap.Free;
end;
~~~Delphi K.Top討論區站長~~~
------
~~~Delphi K.Top討論區站長~~~
senix
一般會員


發表:28
回覆:25
積分:10
註冊:2002-03-15

發送簡訊給我
#3 引用回覆 回覆 發表時間:2002-03-27 11:12:34 IP:211.21.xxx.xxx 未訂閱
真好 站長親自回答 謝謝你的幫助^^
領航天使
站長


發表:12216
回覆:4186
積分:4084
註冊:2001-07-25

發送簡訊給我
#4 引用回覆 回覆 發表時間:2002-03-27 12:22:06 IP:61.219.xxx.xxx 未訂閱
再回答第二部份(貼上word)
uses comobj;
// ...
var  MsWord:Variant;
     fd:string;
begin
      MSWord := CreateOleObject('Word.Application');
      FD := 'c:/test.doc';
      MSWord.Documents.Open(FD);
      MSWord.Application.Visible := True;
      MsWord.Selection.paste;
end;
~~~Delphi K.Top討論區站長~~~
------
~~~Delphi K.Top討論區站長~~~
senix
一般會員


發表:28
回覆:25
積分:10
註冊:2002-03-15

發送簡訊給我
#5 引用回覆 回覆 發表時間:2002-03-27 19:14:04 IP:211.21.xxx.xxx 未訂閱
先謝謝站長~~ 我試了試,第二段的貼入WORD部分 Run到CreateOleObject時會出錯 我哪邊弄錯了嗎? 錯誤訊息如下 ...EOlesysError with message "CoInitialize has not been called"... 我的Delphi是4.0,與開開工具版本有關嗎??
領航天使
站長


發表:12216
回覆:4186
積分:4084
註冊:2001-07-25

發送簡訊給我
#6 引用回覆 回覆 發表時間:2002-03-27 19:46:58 IP:192.168.xxx.xxx 未訂閱
引言: 先謝謝站長~~ 我試了試,第二段的貼入WORD部分 Run到CreateOleObject時會出錯 我哪邊弄錯了嗎? 錯誤訊息如下 ...EOlesysError with message "CoInitialize has not been called"... 我的Delphi是4.0,與開開工具版本有關嗎??
我用的是delphi 5.0,可能4.0不支援comobj ~~~Delphi K.Top討論區站長~~~
------
~~~Delphi K.Top討論區站長~~~
senix
一般會員


發表:28
回覆:25
積分:10
註冊:2002-03-15

發送簡訊給我
#7 引用回覆 回覆 發表時間:2002-03-28 18:24:09 IP:211.21.xxx.xxx 未訂閱
4.0不支援comobj 那那那......怎麼辦^_^||
領航天使
站長


發表:12216
回覆:4186
積分:4084
註冊:2001-07-25

發送簡訊給我
#8 引用回覆 回覆 發表時間:2002-03-29 07:16:13 IP:61.219.xxx.xxx 未訂閱
引言: 4.0不支援comobj 那那那......怎麼辦^_^||
站長特地安裝4.0測試結果,OK!
uses comobj;
// ...
var  MsWord:Variant;     
     fd:string;
begin      
      MSWord := CreateOleObject('Word.Application');      
      FD := 'c:/test.doc';
      MSWord.Documents.Open(FD);
      MSWord.Application.Visible := True;
      MsWord.Selection.paste;
end;
以上程式確實可以正常執行阿? 是不是您的c:\不存在test.doc? 還有您的電腦有裝word嗎? ~~~Delphi K.Top討論區站長~~~
------
~~~Delphi K.Top討論區站長~~~
senix
一般會員


發表:28
回覆:25
積分:10
註冊:2002-03-15

發送簡訊給我
#9 引用回覆 回覆 發表時間:2002-03-29 10:53:18 IP:211.21.xxx.xxx 未訂閱
站長~~ 把這兩部分另開專案測試, 居然完全符合需求,沒問題, 但放進系統內就不行 都是物件的Click事件,不是嗎 怎麼辦ㄚ....謝謝 順帶一問>> 呼叫Word97與Word2000應該都可以..對吧 我是測試Word97,實際上要Word2000
領航天使
站長


發表:12216
回覆:4186
積分:4084
註冊:2001-07-25

發送簡訊給我
#10 引用回覆 回覆 發表時間:2002-03-29 12:12:02 IP:61.219.xxx.xxx 未訂閱
用Delphi 4.0 + Word 2000 都可啊? 列出程式
unit Unit1;    interface    uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  StdCtrls, Buttons;    type
  TForm1 = class(TForm)
    BitBtn1: TBitBtn;
    BitBtn2: TBitBtn;
    procedure BitBtn1Click(Sender: TObject);
    procedure BitBtn2Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;    var
  Form1: TForm1;    implementation
uses clipbrd,comobj;
{$R *.DFM}    procedure TForm1.BitBtn1Click(Sender: TObject);
var bitmap:tbitmap;
   MyFormat : Word;
   AData,APalette : THandle;
begin
  Bitmap := TBitmap.Create;
  bitmap.Width:=form1.Canvas.ClipRect.Right;
  bitmap.height:=form1.Canvas.ClipRect.Bottom;
  bitmap.Canvas.copyrect(form1.Canvas.ClipRect,form1.canvas,form1.Canvas.ClipRect);
  Bitmap.SaveToClipBoardFormat(MyFormat,AData,HPalette(APalette));
  ClipBoard.SetAsHandle(MyFormat,AData);
  Bitmap.Free;
end;    procedure TForm1.BitBtn2Click(Sender: TObject);
var  MsWord:Variant;
     fd:string;
begin
      MSWord := CreateOleObject('Word.Application');
      FD := 'c:/test.doc';
      MSWord.Documents.Open(FD);
      MSWord.Application.Visible := True;
      MsWord.Selection.paste;
end;    end.    
~~~Delphi K.Top討論區站長~~~
------
~~~Delphi K.Top討論區站長~~~
senix
一般會員


發表:28
回覆:25
積分:10
註冊:2002-03-15

發送簡訊給我
#11 引用回覆 回覆 發表時間:2002-04-05 20:00:46 IP:163.30.xxx.xxx 未訂閱
各位前輩~~ 然我依然沒試出來, 但還是謝謝各位熱心的指導, 我會繼續 TRY TRY ^^
lee
站長


發表:55
回覆:173
積分:45
註冊:2002-02-27

發送簡訊給我
#12 引用回覆 回覆 發表時間:2002-04-05 20:10:54 IP:61.219.xxx.xxx 未訂閱
引言: 各位前輩~~ 然我依然沒試出來,
沒試出來?請問是啥狀況? ~~~Delphi K.Top網站總管~~~
------
~~~Delphi K.Top網站總管~~~
天外來客
初階會員


發表:22
回覆:199
積分:44
註冊:2001-11-27

發送簡訊給我
#13 引用回覆 回覆 發表時間:2002-04-12 13:53:42 IP:211.21.xxx.xxx 未訂閱
總管大人~~ 就是說: 把這以上CODE另開專案測試, 完全符合需求,沒問題, 但放進系統內就不行 執行到CreateOleObject後 會出現..OLEsysError with message "CoInitialize has not been called"... 怎麼辦ㄚ....謝謝
senix
一般會員


發表:28
回覆:25
積分:10
註冊:2002-03-15

發送簡訊給我
#14 引用回覆 回覆 發表時間:2002-04-12 13:55:22 IP:211.21.xxx.xxx 未訂閱
總管大人~~ 就是說: 把這以上CODE另開專案測試, 完全符合需求,沒問題, 但放進系統內就不行 執行到CreateOleObject後 會出現..OLEsysError with message "CoInitialize has not been called"... 怎麼辦ㄚ....謝謝
lee
站長


發表:55
回覆:173
積分:45
註冊:2002-02-27

發送簡訊給我
#15 引用回覆 回覆 發表時間:2002-04-12 14:08:12 IP:61.219.xxx.xxx 未訂閱
引言: 執行到CreateOleObject後 會出現..OLEsysError with message "CoInitialize has not been called"...
這是因為主程式未加入 uses comobj;的關係 try it! ~~~Delphi K.Top網站總管~~~
------
~~~Delphi K.Top網站總管~~~
senix
一般會員


發表:28
回覆:25
積分:10
註冊:2002-03-15

發送簡訊給我
#16 引用回覆 回覆 發表時間:2002-04-18 13:51:07 IP:211.21.xxx.xxx 未訂閱
uses comobj嗎? 有ㄚ 我有use 真的有use~
lee
站長


發表:55
回覆:173
積分:45
註冊:2002-02-27

發送簡訊給我
#17 引用回覆 回覆 發表時間:2002-04-18 18:49:40 IP:61.219.xxx.xxx 未訂閱
引言: uses comobj嗎? 有ㄚ 我有use 真的有use~
我講的主程式是指呼叫上敘程式的.PAS程式中要加上 uses comobj; 這樣OLE才會被啟始化(Initialize) 是在"主程式"的implementation之前的USES不是之後的USES! try it ~~~Delphi K.Top網站總管~~~
------
~~~Delphi K.Top網站總管~~~
senix
一般會員


發表:28
回覆:25
積分:10
註冊:2002-03-15

發送簡訊給我
#18 引用回覆 回覆 發表時間:2002-05-03 00:11:28 IP:163.30.xxx.xxx 未訂閱
一定要分兩段寫嗎? 我是寫在同一個物件的CLICK下, clipbrd,comobj我是寫在INTERFACE 的 USES 中 ~~謝謝總管~~
lee
站長


發表:55
回覆:173
積分:45
註冊:2002-02-27

發送簡訊給我
#19 引用回覆 回覆 發表時間:2002-05-03 00:20:29 IP:61.219.xxx.xxx 未訂閱
引言: 一定要分兩段寫嗎? 我是寫在同一個物件的CLICK下, clipbrd,comobj我是寫在INTERFACE 的 USES 中 ~~謝謝總管~~
不如您將程式上傳至"會員求助程式檔案上傳區",我幫您Debug! ~~~Delphi K.Top網站總管~~~
------
~~~Delphi K.Top網站總管~~~
領航天使
站長


發表:12216
回覆:4186
積分:4084
註冊:2001-07-25

發送簡訊給我
#20 引用回覆 回覆 發表時間:2002-05-03 21:59:23 IP:61.219.xxx.xxx 未訂閱
找到一篇有關"CoInitialize has not been called"的文章,如下: 出現:OLE Error: CoInitialize has not been called怎麼辦?    程式一執行就出現'CoInitialize has not been called'訊息, 可用如下的程式解決:
在主程式 .DPR中:
 uses
  OLE2, //  <--- 確定加入OLE2
  Windows;    initialization
  CoInitialize(nil); // <-- 由程式啟動 CoInitialize()    end
 
~~~Delphi K.Top討論區站長~~~
------
~~~Delphi K.Top討論區站長~~~
系統時間:2024-04-20 22:34:00
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!