现在有了另外一个问题!!!
我原来测试的程序是一个只有简单界面的程序:两个Panel,三个Button,一个ComboBox,
一个OLEContainer,所以在:
OLEContainer.DoVerb(ovShow);
ActiveControl := ComboBox1;
ActiveControl := OleContainer;
后,没有任何错误,而我在一个项目中,因为界面复杂,所有出现了一个错误。
是这样的,我调用的语句基本相同:
OleContainer.DoVerb(ovShow);
ActiveControl := DBGrid1; //<<--(1)
ActiveControl := OleContainer;
执行到(1)的时候出现错误:
Can't focus a disabled or invisible window.
出现这个错误后,文档是显示出来了,不过这个过程的随后语句就执行了。
而就算我在(1)前显式的调用:
DBGrid1.Enble := True;
DBGrid1.Visible := True;
也不行!!!!!!!!!!
为什么?????????????
此外,我加了try-except语句也不能屏蔽掉这个错误,为什么???
以下是我的源码:
==========================
procedure TMainPageFrm.spdbtnYYBWJShowFileClick(Sender: TObject);
var
sFileName, sqlstr: string;
bsFileCon: TADOBlobStream;
begin
case TWinControl(Sender).Tag of
1: begin //显示文件
Cursor := crHourGlass;
sqlstr := Format(cYYBWJSQLGetFile,[adoqryYYBWJ.FieldByName('id').AsInteger]);
with dmStockSrv.adoqryPan do
begin
Active := False;
Filtered := False;
SQL.Clear;
SQL.Append(sqlstr);
Active := True;
bsFileCon := TADOBlobStream.Create(TBlobField(FieldByName('FileCon')),
bmRead);
Active := False;
end;
try
sFileName := cTempFileName+'.'+adoqryYYBWJ.FieldValues['FileExt'];
vYYBWJOpenFile := ExtractFilePath(Application.ExeName)+sFileName;
bsFileCon.SaveToFile(vYYBWJOpenFile);
pnlYYBWJFileCon.Visible := True;//这个是包含OleContainer的Panel
oleYYBWJfile.CreateObjectFromFile(vYYBWJOpenFile,False);
oleYYBWJfile.DoVerb(ovShow);
try
ActiveControl := dbgYYBWJ;
except
end;
ActiveControl := oleYYBWJfile;
finally
bsFileCon.Free;
//==(2)-begin
spdbtnYYBWJShowFile.Tag := 2;
spdbtnYYBWJShowFile.Caption := cCloseFile;
pnlYYBWJFileName.Caption := adoqryYYBWJ.FieldByName('FileName').AsString
+'.'+adoqryYYBWJ.FieldByName('FileExt').AsString;
adoqryYYBWJ.DisableControls;
dbgYYBWJ.Enabled := False;
Cursor := crDefault;
//==(2)-end
end; //end try-finally
//====(3)====
end; //end case-1
2: begin //关闭文件
try
if FileExists(vYYBWJOpenFile) then
if not DeleteFile(vYYBWJOpenFile) then
Application.MessageBox('删除文件错误!','错误',0);
except
//屏蔽错误
end;
adoqryYYBWJ.EnableControls;
dbgYYBWJ.Enabled := True;
pnlYYBWJFileCon.Visible := False;
spdbtnYYBWJShowFile.Tag := 1;
spdbtnYYBWJShowFile.Caption := cShowFile;//<<--(4)
end;
end; //end case
end;
以上代码中,如果(2)的语句挪到try-finally的后面,即(3)的地方,则不会运行,而是跳到了
(4)的地方,请问这是怎么回事??
如果分不够,可以再加!!!我现在可用积分是3000多,该够了吧?