用TOleContainer是可行的,我在很久以前用TOleContainer将WORD嵌入到
自己的程序中,跟在实际中使用WORD没什么两样,只是那个程序要找一找才
行如果你需要,可以给你发过去,留下E-mail吧!
其实我不推荐使用上述方法的,为什么不通过程序直接打开WORD呢,那样似
乎更合理一些。我有一个EXCEL的例子,提供如下(WORD也差不多):
unit Main;interfaceuses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls, Grids, DBGrids, Db, DBTables;type
TForm1 = class(TForm)
Button1: TButton;
Query1: TQuery;
DataSource1: TDataSource;
DBGrid1: TDBGrid;
Edit1: TEdit;
procedure Button1Click(Sender: TObject);
procedure FormDestroy(Sender: TObject);
private
XLApp:Variant;
procedure InsertData;
procedure ChangeColumns;
procedure HandleRange;
{ Private declarations }
public
{ Public declarations }
end;var
Form1: TForm1;implementationuses Comobj;{$R *.DFM}procedure TForm1.Button1Click(Sender: TObject);
begin
XLApp:=CreateOleObject('Excel.Application');
XLApp.visible:=true;
XLApp.workbooks.add(emptyparam);
XLApp.Workbooks[1].worksheets[1].name:='Data';
InsertData;
// HandleRange;
// ChangeColumns;
end;procedure TForm1.FormDestroy(Sender: TObject);
begin
if not VarIsEmpty(XLApp) then
begin
XLApp.DisplayAlerts:=false;
XLApp.quit;
end;
end;procedure TForm1.InsertData;
var
i:Integer;
sheet:variant;
begin
sheet:=xlApp.Workbooks[1].worksheets['Data'];
query1.first;
for i:=1 to query1.RecordCount do
begin
sheet.cells[i,1]:=query1.fieldbyname('档案号').asstring;
sheet.cells[i,2]:=query1.fieldbyname('姓名').asstring;
sheet.cells[i,3]:=query1.fieldbyname('身份证号').asstring;
query1.next;
end;
edit1.text:=inttostr(query1.Recordcount);
// sheet.cells[i,1]:='=Sum(A1:A10)';
end;procedure TForm1.HandleRange;
var
Range:variant;
begin
Range:=XLApp.Workbooks[1].worksheets['Data'].range['C1:F25']; Range.Formula:='=RAND()';
Range.Columns.Interior.ColorIndex:=3;
// Range.Borders.LineStyle:=xlContinuous;
end;procedure TForm1.ChangeColumns;
var
ColumnRange:variant;
begin
ColumnRange:=XLApp.Workbooks[1].worksheets['Data'].Columns;
ColumnRange.Columns[1].ColumnWidth:=5;
ColumnRange.Columns.item[1].font.bold:=true;
ColumnRange.Columns[1].Font.color:=clBlue;
end;end.
自己的程序中,跟在实际中使用WORD没什么两样,只是那个程序要找一找才
行如果你需要,可以给你发过去,留下E-mail吧!
其实我不推荐使用上述方法的,为什么不通过程序直接打开WORD呢,那样似
乎更合理一些。我有一个EXCEL的例子,提供如下(WORD也差不多):
unit Main;interfaceuses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls, Grids, DBGrids, Db, DBTables;type
TForm1 = class(TForm)
Button1: TButton;
Query1: TQuery;
DataSource1: TDataSource;
DBGrid1: TDBGrid;
Edit1: TEdit;
procedure Button1Click(Sender: TObject);
procedure FormDestroy(Sender: TObject);
private
XLApp:Variant;
procedure InsertData;
procedure ChangeColumns;
procedure HandleRange;
{ Private declarations }
public
{ Public declarations }
end;var
Form1: TForm1;implementationuses Comobj;{$R *.DFM}procedure TForm1.Button1Click(Sender: TObject);
begin
XLApp:=CreateOleObject('Excel.Application');
XLApp.visible:=true;
XLApp.workbooks.add(emptyparam);
XLApp.Workbooks[1].worksheets[1].name:='Data';
InsertData;
// HandleRange;
// ChangeColumns;
end;procedure TForm1.FormDestroy(Sender: TObject);
begin
if not VarIsEmpty(XLApp) then
begin
XLApp.DisplayAlerts:=false;
XLApp.quit;
end;
end;procedure TForm1.InsertData;
var
i:Integer;
sheet:variant;
begin
sheet:=xlApp.Workbooks[1].worksheets['Data'];
query1.first;
for i:=1 to query1.RecordCount do
begin
sheet.cells[i,1]:=query1.fieldbyname('档案号').asstring;
sheet.cells[i,2]:=query1.fieldbyname('姓名').asstring;
sheet.cells[i,3]:=query1.fieldbyname('身份证号').asstring;
query1.next;
end;
edit1.text:=inttostr(query1.Recordcount);
// sheet.cells[i,1]:='=Sum(A1:A10)';
end;procedure TForm1.HandleRange;
var
Range:variant;
begin
Range:=XLApp.Workbooks[1].worksheets['Data'].range['C1:F25']; Range.Formula:='=RAND()';
Range.Columns.Interior.ColorIndex:=3;
// Range.Borders.LineStyle:=xlContinuous;
end;procedure TForm1.ChangeColumns;
var
ColumnRange:variant;
begin
ColumnRange:=XLApp.Workbooks[1].worksheets['Data'].Columns;
ColumnRange.Columns[1].ColumnWidth:=5;
ColumnRange.Columns.item[1].font.bold:=true;
ColumnRange.Columns[1].Font.color:=clBlue;
end;end.
解决方案 »
- 请各位指导一下
- 有没有什么控件,既可以在上面用键盘输入文字,而且也可以用鼠标在上面画图?在线等哈!!
- 问一个挺简单的基础问题,如何取得一个字符串的最后三位?在线等,急急急!
- 如何解决DrawGrid或StringGrid重画的问题,急等
- delphi中如何将数据库中的内容用word的形式打开并显示出来
- 求好的公用函数和公共常量和自定义公共数据类型单元,给分范围50-500
- 为什么在win2000下开发的exe程序……
- 我在一个按钮上按右键,让popupmenu弹出,请问怎么设置它弹出的位置?
- 这段代码该怎么改?
- 请大家介绍一下哪种数据库比较好!
- 第一次从网上下载控件,但却不会用,呜呜.....
- 什么工具可以检测程序的内存泄露
没有file菜单?? 还有,save怎么作??to:bigfox 我用server上的控件打开的word都是在后台的, 这里需要嵌入到程序中.和delphi自带的例子是不同的! 还有什么办法??