高分!高分! 高分了, 请帮忙看下以下代码 ( 积分: 300 )

  • 主题发起人 主题发起人 xj307
  • 开始时间 开始时间
X

xj307

Unregistered / Unconfirmed
GUEST, unregistred user!
1.我现在对childForm 只调用了 childForm.show;
但是我真正的目的是点击了父窗口的导入按钮后,父窗口将不能再进行操作,
即想实现childForm.showmodal,但是如果直接在代码里childForm.showmodal,
我的ImportFile3就不会被执行,因为我不会去跟childForm交互,childForm
只是用来显示导入数据进度用。

2.另外我在ImportFile3里调用了
WinExecAndWait('C:/sqlldr test/test@test control=c:/loader.ctl',SW_HIDE);
这样调用后,整个程序就死在那里了。不太好。可能我会中途去中止,
有没其他较好的方法?





//点击父窗口的导入按钮 TfBatchPrepay 是父窗口类,TfBatchPrepayHint 子窗口类
procedure TfBatchPrepay.btn2Click(Sender: TObject);
var
i,j : LongInt;
childForm : TfBatchPrepayHint;
begin
inherited;
//创建子窗口,上有进度条,提示导入数据速度
childForm := TfBatchPrepayHint.create(nil);
childForm.show;
//会对childForm上的进度条进行刷新,即时显示导入进度
ImportFile3;
end;
 
1.我现在对childForm 只调用了 childForm.show;
但是我真正的目的是点击了父窗口的导入按钮后,父窗口将不能再进行操作,
即想实现childForm.showmodal,但是如果直接在代码里childForm.showmodal,
我的ImportFile3就不会被执行,因为我不会去跟childForm交互,childForm
只是用来显示导入数据进度用。

2.另外我在ImportFile3里调用了
WinExecAndWait('C:/sqlldr test/test@test control=c:/loader.ctl',SW_HIDE);
这样调用后,整个程序就死在那里了。不太好。可能我会中途去中止,
有没其他较好的方法?





//点击父窗口的导入按钮 TfBatchPrepay 是父窗口类,TfBatchPrepayHint 子窗口类
procedure TfBatchPrepay.btn2Click(Sender: TObject);
var
i,j : LongInt;
childForm : TfBatchPrepayHint;
begin
inherited;
//创建子窗口,上有进度条,提示导入数据速度
childForm := TfBatchPrepayHint.create(nil);
childForm.show;
//会对childForm上的进度条进行刷新,即时显示导入进度
ImportFile3;
end;
 
>>>但是我真正的目的是点击了父窗口的导入按钮后,父窗口将不能再进行操作,
这样:
==========
父窗体.Enabled:=false;
==========
是最有效的办法,也是最简单的办法;
肯定行的!
撒分的时候,别忘了我。
 
楼上正解,隐藏主窗体也行
 
我不想隐藏主窗体,

Enabled:=false; 这个报access memory address 错误
 
我都没看懂问题,混点分了,呵呵
 
题目很简单,就是
1。点击主窗口导入按钮,主窗口失去焦点
2。创建子窗口,在数据导入完毕之前主窗口不能接收焦点
3。执行主窗口的数据导入过程,此过程会更新子窗口的进度条
 
先调用childForm.showmodal,然后在childForm中写ImportFile3;
或干脆将childForm置为顶层窗体
 
即时ImportFile3写在childForm,都showmodal了,怎么去调用ImportFile3?
我在ImportFile3的导入过程中要对childForm进行刷新的
 
You maybe look for 'project' then '选项' .出现project.exe的工程选项,,,
main form 设为你进入的主界面,Autocreateform 设为你优先访问的界面,包括主界面,,,,
availableforms 设为子界面,,,,程序别的如上面所说的,,你可以试试,[:)]
 
在主窗口的数据导入函数中加入进度条作为入口参数,就可以了!
 
Application.ProcessMessages;可以使程序在一个长时间的循环或其它处理过程中响应其它操作。
或者干脆
Chileform.Enabled:=False;
 
可以在chindForm showmodal后,在Activate事件中调用ImportFile3嘛!
 
*把显示进度的子窗体设计为始终保持最上.
*显示子窗体并把主窗体的Enable设为False
*执行ImportFile3;
  (在ImportFile3函数中要改变子窗体的显示状态并调用Update更新显示)
*关闭子窗体,设置主窗体可用
 
to:xgbing
按你的方法,ok了。

第2个问题:
在importfile3里调用了
WinExecAndWait('C:/sqlldr test/test@test control=c:/loader.ctl',SW_HIDE);
我就无法实时更新子窗口的进度条了,这个要怎么实现?

-----------------------
可以在chindForm showmodal后,在Activate事件中调用ImportFile3嘛!
 
多人接受答案了。
 
后退
顶部