我已经可以做到这一点
就是在程序中控制Word文档中的文本窗体域的输入输出,问题在于当窗体锁定的时候,虽然
其他的区域不可以修改,只有文本窗体域可以接受输入输出,但现在变成所有的文本窗体
域都可以接受输入输出,而不能够进行单个控制文本窗体域的输入输出,虽然可以通过解
除域的方式使文本窗体域取消,但非常麻烦
是否可以通过光标输入焦点的控制来达到这一个目的呢???
就是说如果光标不在应该所处的文本窗体域的位置,则自动回到应该所处的文本窗体域。
各位大虾可以探讨一下。例程在下面:
==============================================================
其中,f1,f2就是2个文本窗体域
==============================================================
unit test;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls,COMobj,ActiveX,Word2000;
type
TForm1 = class(TForm)
Button1: TButton;
Memo1: TMemo;
Edit1: TEdit;
procedure FormCreate(Sender: TObject);
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
var Word_ole: Variant;
function GetWordObject (const ClassName: string): IDispatch;
{ 如果Word没有运行,则启动它,并返回一个自动化对象;
如果Word已经启动,就返回正在运行的实例的自动化对象。}
var
ClassID: TGUID;
Unknown: IUnknown;
begin
ClassID := ProgIDToClassID (ClassName);
if Succeeded (GetActiveObject (ClassID, nil, Unknown)) then
OleCheck (Unknown.QueryInterface (IDispatch, Result))
else
Result := CreateOleObject (ClassName);
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
{获取创建Word.Application自动化对象,
如果Word尚未运行,Word启动}
Word_ole := GetWordObject ('Word.Application');
end;
procedure TForm1.Button1Click(Sender: TObject);
var NewDocument,f1,f2: Variant;
begin
Word_ole.Visible := True;
Word_ole.UserName:='user
Word_ole.Caption:='测试';
//增加一个新的Word文档对象
NewDocument:=Word_ole.Documents.open('d:/test/test.doc');
f1:=NewDocument.Application.ActiveDocument.FormFields.Item(1);
f2:=NewDocument.Application.ActiveDocument.FormFields.Item(2);
//锁定窗体,保护文档
NewDocument.Application.ActiveDocument.Protect(NoReset:=False, Type:=wdAllowOnlyFormFields);
f1.Result:='你好2!!';
Edit1.Text:=f1.Result;
f2.Result:=Memo1.Text;
//取消域,恢复成文本
f2.Selection.Fields.Unlink;
//保护文档
// NewDocument.PrintPreview;
end;
end.