如何把Word嵌入到Delphi的Form里?(100分)

  • 主题发起人 主题发起人 nofault
  • 开始时间 开始时间
N

nofault

Unregistered / Unconfirmed
GUEST, unregistred user!
我想把Word嵌入我的Form中,我能够从中取出句子,替换、插入。等。看到很多例子,都是启动了Word单独的窗体,那如何把它嵌进来呢?最好有源代码,谢谢各位大虾啦!:)[:D]
 
关注,我也正在试图实现这个功能...
 
OLE可以把Word嵌入Delphi的Form,
VBA可以轻松操作Word文档内容.
 
请讲清楚一点,最好有原码
 
不知道用TOleContainer能不能达到你的要求,

呵呵~~~~~~~~~~~~~~~~~~~
 
也是用OLEcontainer[:)]
 
高手说的都太简单了
 
To zhijl1027
老兄,看来你有什么好搞头的东东呀,说来听听吧!!!!
据我所知用 Ole技术是最佳方法,
没有第三方愿意做一个与其相仿的兼容东东吧,
他给人的接口相当强大了,只是要去挖掘而已,
WPS有多少个呀,相信用WPS的人比较少吧,

呵呵~~~~~~~~~~~~~~~~~~~~~~~~
 
顶啊,大家帮忙!
 
用TOleContainer的速度好象很慢呀!!!
 
支持TOleContainer,至于速度慢,可能调入的时候会慢点,使用时的速度我觉得和TOleContainer没关系
 
说到底了,
楼主想要什么样的答案??

呵呵~~~~~~~~~~~~~~~~~~~~~`
 
能有一些源码参考,那是多么奢侈的一个要求阿,嬉戏[:D]
 
给以一段代码,这段代码是在一个ole容器中打开一个word文档,
并得到这个文档的页数
unit1.pas
----------------------------
代码:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, ExtCtrls, OleCtnrs,OleServer, word2000,ComCtrls,ComObj,activex,
  Menus;
type
  TForm1 = class(TForm)
    Panel1: TPanel;
    Edit1: TEdit;
    Button1: TButton;
    OpenDialog1: TOpenDialog;
    OleContainer1: TOleContainer;
    MainMenu1: TMainMenu;
    est1: TMenuItem;
    OPen1: TMenuItem;
    Close1: TMenuItem;
    GetPages1: TMenuItem;
    procedure Button1Click(Sender: TObject);
    procedure OPen1Click(Sender: TObject);
    procedure GetPages1Click(Sender: TObject);
    procedure Close1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

function Off_GetOleObject (const ClassName: string; var blCreate: Boolean): IDispatch;
{ 如果Word没有运行,则启动它,并返回一个自动化对象; 如果Word已经启动,就返回正在运行的实例的自动化对象。}
var  ClassID: TGUID;
     Unknown: IUnknown;
begin
  blCreate := False;
  ClassID := ProgIDToClassID(ClassName);
  if Succeeded (GetActiveObject(ClassID, nil, Unknown)) then
    OleCheck (Unknown.QueryInterface (IDispatch, Result))
  else
  begin
    blCreate := True;
    Result := CreateOleObject (ClassName);
  end;
end;

function Off_GetWordDocPages(v_Parawd: OleVariant; v_Paradocs: OleVariant;
    strFName: string; var strTitle: string;blOpenFile: Boolean): Boolean;
var v_Docs, v_wd, v_Name, v_Range, v_Text: OleVariant;
    blWd, blDoc, blCreate: Boolean;
begin
  blWd := False;
  blDoc := False;
  v_Docs := unassigned;
  v_wd := unassigned;
  v_Range := unassigned;
  v_Text := unassigned;
  v_Name := strFName;

  try
    try
      {连接word}
      if (VarIsEmpty(v_ParaWd)) then
      begin
        v_Wd := Off_GetOleObject('Word.Application', blCreate);
        {打开文档}
        v_Docs := v_Wd.Documents.Open(FileName:=v_Name, ReadOnly:=True,AddToRecentFiles:=False);
        blWd := True;
        blDoc := True;
        //FWordApplication := v_Wd;
      end
      else
      begin
        v_Wd := v_ParaWd;
        if (not VarIsEmpty(v_ParaDocs)) then
          v_Docs := v_ParaDocs
        else
        begin
          if (not blOpenFile) and (v_Wd.Documents.Count > 0) then
            v_Docs := v_Wd.ActiveDocument
          else
          begin
             v_Docs := v_Wd.Documents.Open(FileName:=v_Name, ReadOnly:=True, AddToRecentFiles:=False);
             blDoc := True;
          end;
        end;
      end;

      {提取Title}
      v_Text := v_Docs.BuiltInDocumentProperties[wdPropertyPages];
      strTitle := v_Text;
      if (blDoc) and (not VarIsEmpty(v_Docs)) then
         v_Docs.Close(wdDoNotSaveChanges, wdOriginalDocumentFormat, EmptyParam);
      Result := True;
    except
      Result := False;
    end;
  finally
    if (blWd) and (blCreate) and (not VarIsEmpty(v_Wd)) then
      v_Wd.quit;
    v_Wd := unassigned;
  end;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
  if (not OpenDialog1.Execute) then Exit;
  Edit1.Text := OpenDialog1.FileName;
end;

procedure TForm1.OPen1Click(Sender: TObject);
begin
  OleContainer1.CreateObjectFromFile(Edit1.Text, False);
end;

procedure TForm1.GetPages1Click(Sender: TObject);
var v_obj, v_wd: OleVariant;
    s: string;
begin
  v_obj := OleContainer1.OleObject;
  v_wd := v_obj.Application;
  Off_GetWordDocPages(v_wd, unassigned, Edit1.Text, s, False);
  Application.MessageBox(PChar('共有' + s + '页'), '提 示', MB_OK + MB_ICONINFORMATION);
end;

procedure TForm1.Close1Click(Sender: TObject);
begin
  OleContainer1.Close;
end;

end.
 
word文件可以打开了,但是显示的文本为什么左边有一列的宽度被遮盖住了
还有怎么样能控制word的按钮按我的意愿,要或者不要,还有版式
 
请问VBA技术怎么用?????
有例题共巷吗????
 
听说,关于OLE技术,只有在MS的编程软件里才能非常稳定的工作,其他的编程工具就算支持OLE,也会出现莫名其妙的错误!
不知道这个是不是真的,好像是李维的一本书里写的。。
 
最好的办法就是OLE!
 
后退
顶部