大富翁遗留问题.....难.....难.....难.....200奖励,大拿请入(0分)

  • 主题发起人 主题发起人 aq100
  • 开始时间 开始时间
A

aq100

Unregistered / Unconfirmed
GUEST, unregistred user!
打开word的工具栏,选择里面的控件工具箱,在word文档中添加控件,例如label控件, checkbox控件等,问如何通过DELPHI的OLE对象取得控件的属性,并设置它得属性值,以label标签为例,
var
oleword:variant;
begin
oleword.createoleobject('word.application');
......
{oleword.........label1.caption='this is a label';}
......
end;
如何搞定下面这一句代码,200富翁元立刻开户打入你的帐号
{oleword.........label1.caption='this is a label';}

最有挑战性的问题,大拿请关注






 
看似简单,其实不然,试试你久知道了
 
这么简单的问题自己去查
 
大拿,有高招不烦说说啊,我可是在大富翁上没有找到答案,第一次
 
我已经试过了
word.ActiveDocument.InlineShapes.Item(0).Range.Text:='eeee';
 
用vba不知行否?我没试过
 
为什么要用delphi?用VB不行吗?装了VB的话,双击label VB IDE就打开了
别用Delphi!
 
如果用VB那控制是比较不错,可是如果VB能实现的话,那DELPHI也一定可以实现的阿 ,现在地问题是我查不到这方面的资料,我看到一个用VC实现的,可是看不到代码,我的目的是
通过在WORD里面设置label来进行数据的填充和检索,这个功能在实际项目中,可是非常非常有用的
 
我试了一下,下面的代码能加上,但不能修改属性,不知谁能解决这个问题?
var NewTemplate,ItemIndex,tmp,Unit1:OleVariant;
First:Boolean;
s:string;
{$ifNdef Office97}
DocTYpe,IsVisible:OleVariant;
{$endif}
begin
Screen.Cursor:=crHourGlass;
try
First:=True;
Application.ProcessMessages;
While First do begin
try
Wordapp.Connect;
First:=False;
except
if First then
First:=False
else
MessageDlg('连接失败', mtError, [mbOk], 0);
end;
end;
NewTemplate:=False;
ItemIndex:=1;
WordApp.Caption := 'MyDocz';
{$ifdef Office97}
WordApp.Documents.Add(EmptyParam, NewTemplate);
{$Else}
DocType:=0;
isVisible:=True;
WordApp.Documents.Add(EmptyParam, NewTemplate,DocType,isVisible);
{$endif}
WordApp.Options.CheckSpellingAsYouType := False;
WordApp.Options.CheckGrammarAsYouType := False;
tmp:=wdMove;
Unit1:=wdLine;
WordApp.Selection.EndKey(Unit1,tmp);
Wordapp.Visible := True;
Wordapp.Activate;
tmp:=wordapp.Selection.Range;;
unit1:='Forms.CommandButton.1';
with wordapp.Selection.InlineShapes.AddOLEControl(unit1,tmp) do begin
caption:='sdfsdf';
end;
// wordapp.Selection.InlineShapes
finally
Screen.Cursor:=crDefault;
end;
end;
 
以下段落已经可以读取到word里面所有控件的类型了,如果是label则显示form.label.1.
现在我还不能读取到这个控件的caption,希望哪位大拿能搞定读取caption和设置caption这一块

下面附上delphi和vcC的部分代码

procedure TForm1.Button3Click(Sender: TObject);
var
objcount,i:integer;
s:widestring;
wdDrv:Idispatch;
begin
objcount:=wdapp.ActiveDocument.InlineShapes.Count;
for i:=0 to objcount do
begin
s:=wdapp.ActiveDocument.InlineShapes.Item(i).OLEFormat.ClassType; //显示word里面的控件的类型名称
wddrv:=wdapp.ActiveDocument.InlineShapes.Item(i).OLEFormat.Object;
if(s='Forms.Label.1') then
begin
showmessage(s);
end;
end;
end;

//////////////////////////////////////////////////////////////////////////////
COleDispatchDriver drv; //如何把这句转换成delphi语句

if(wcsstr(pCh, L".Label."))
{
IDispatchPtr pILabelDisp = (IDispatchPtr)pWordDoc->InlineShapes->Item(i)->OLEFormat->Object;
drv.AttachDispatch(pILabelDisp, FALSE); //转换成delphi语句
drv.SetProperty(0, VT_BSTR, '测试'); //转换成delphi语句
}

 
给你解决了
var NewTemplate,ItemIndex,tmp,Unit1:OleVariant;
First:Boolean;
s:string;
{$ifNdef Office97}
DocTYpe,IsVisible:OleVariant;
{$endif}
begin
Screen.Cursor:=crHourGlass;
try
First:=True;
Application.ProcessMessages;
While First do begin
try
Wordapp.Connect;
First:=False;
except
if First then
First:=False
else
MessageDlg('连接失败', mtError, [mbOk], 0);
end;
end;
NewTemplate:=False;
ItemIndex:=1;
WordApp.Caption := 'MyDocz';
{$ifdef Office97}
WordApp.Documents.Add(EmptyParam, NewTemplate);
{$Else}
DocType:=0;
isVisible:=True;
WordApp.Documents.Add(EmptyParam, NewTemplate,DocType,isVisible);
{$endif}
WordApp.Options.CheckSpellingAsYouType := False;
WordApp.Options.CheckGrammarAsYouType := False;
tmp:=wdMove;
Unit1:=wdLine;
WordApp.Selection.EndKey(Unit1,tmp);
Wordapp.Visible := True;
Wordapp.Activate;
tmp:=wordapp.Selection.Range;;
unit1:='Forms.Label.1';
wordapp.Selection.InlineShapes.AddOLEControl(unit1,tmp);
tmp:=1;
wordapp.Selection.InlineShapes.Item(1).Select;
wordapp.Selection.InlineShapes.Item(1).Select;
wordapp.Selection.InlineShapes.Item(1).OLEFormat.DoVerb(tmp);
wordapp.Selection.TypeText('sdfsdf');
finally
Screen.Cursor:=crDefault;
end;
end;
 
我根据你的代码修改测试了一下,在我的程序里总是报没有集合成员对象的错误,感觉比较郁闷,我需要在一篇word里面检索很多label标签控件,并且进行属性设置,所以还得麻烦大拿多多指教。
var
Form1: TForm1;
wdApp:variant;
wdDoc:variant;
implementation
uses ComObj, ComServ,OleCtrls;

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
Begin
wdApp:=CreateOleObject('Word.Application');
wdDoc:=wdApp.Documents.Open('c:/test.doc');
wdApp.Visible:=true;
wdApp.Options.CheckSpellingAsYouType := False;
wdApp.Options.CheckGrammarAsYouType := False
end;


procedure TForm1.Button2Click(Sender: TObject);
var
objcount,i:integer;
s:widestring;
begin
objcount:=wdapp.ActiveDocument.InlineShapes.Count;
tmp:=1;
for i:=1 to objcount do
begin
s:=wdapp.ActiveDocument.InlineShapes.Item(i).OLEFormat.ClassType;
if(s='Forms.Label.1') then
begin
/*********************************************************************/
/********************能帮忙完成这一块吗?*****************************/
/*********************************************************************/
判断 如果label.caption:="test"; //一篇word文档中有很多label标签控件
那么 label.caption:="测试"; //首先取caption的值,然后还要更改
/*********************************************************************/

showmessage(s); //显示word里面的控件的类型名称
end;
end;

end;
 
功夫不负有心人,今天比较爽,总算把它搞定了,在这非常感谢wfzha,功劳全在你的提示帮助下,多谢了。
to:wfzha
在下面的帖子里有200分,以前提的问题,遗憾的是没人能拿走,暂且偿还给你吧。
请入http://www.delphibbs.com/delphibbs/dispq.asp?lid=1894980
 
接受答案了.
 

Similar threads

S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
D
回复
0
查看
2K
DelphiTeacher的专栏
D
D
回复
0
查看
2K
DelphiTeacher的专栏
D
D
回复
0
查看
1K
DelphiTeacher的专栏
D
后退
顶部