看到很多的安装程序有这样的窗体:
打开是一个对话框(dialog),提示“正在复制文件。”
等复制完毕后,对话框消失。
主要是因为有些存储过程要很长时间,我想来个提示
还有个要求:窗体不能消失,或者是有其他的阴影
打开是一个对话框(dialog),提示“正在复制文件。”
等复制完毕后,对话框消失。
主要是因为有些存储过程要很长时间,我想来个提示
还有个要求:窗体不能消失,或者是有其他的阴影
开始复制文件时(假设主窗体为Form1,对话框为Form2),
Form2.ShowModal;
//模态化显示,只要Form2不被关闭,用户就无法操作后面的窗体
......
//复制完毕
Form2.close;注意:Form2的FormStyle必须为fsNormal,visible为false(默认就是这个样子的,不必改)
BorderStyle为bsNone
里面放进度条
另外进度窗体在onshow时调用setwindowpos函数
SetWindowPos(form1.Handle,
HWND_TOPMOST,
form1.Left,
form1.top,
form1.Width ,
form1.height,
SWP_SHOWWINDOW);
按你的作的话,切换界面后,主窗体(Form1)就剩下标题栏了。
我要的是无论怎么切换界面,Form1完整存在,只是Form2为焦点窗体
form2.Show()就可以了.
象数据库情人所说的那样设为bsNone,
拷贝文件完毕后就form2.Close()可以了。其中还有些细节自己设置吧
form2.showmodal;
sleep(1000000);//在这个时间段里切换界面再看看form1窗体已经不成样字了
form2.free;
不行呀,不知道上面的 测试了吗??不知道用线程是否可以做到?
form2.show;
mainform.enabled:=false;
//这里调用线程完成任务,包括刷新form2
//在form2的onclose中写入mainform.enabled:=true;
//在线程单元中线程结束时写上form2.close;
vform1: TForm;
begin
try
vform1 := TForm.Create;
......
{开如初始化窗口}
vform1.ShowModal;
.......
{执行复制的过程}
Application.ProcessMessages;
finally
vform1.Close;
vform1.Free;
end;
end;
如果是的话,可以这样
form2动态创建以后,把form2.formstyle:=fsstayontop;直到拷贝完关闭窗体就可以了
function ShowAniWait() :Longint;
begin
try
FrmAnimateWaiting.Position := poscreencenter;
except
FrmAnimateWaiting := TFrmAnimateWaiting.Create(Application);
End;
FrmAnimateWaiting.MessageLabel.Caption := '正在组织数据,请稍侯...';
FrmAnimateWaiting.Show ; if fileexists( extractfilepath(paramstr(0))+'FINDCOMP.AVI') then
begin
FrmAnimateWaiting.Animate1.FileName :=extractfilepath(paramstr(0))+'FINDCOMP.AVI';
FrmAnimateWaiting.Animate1.Active := true;
end;
FrmAnimateWaiting.Update ;
End;function ShutAniWait() :boolean;
begin
FrmAnimateWaiting.Close ;
end;调用
try
ShowAniWait;...
finally
ShutAniWait
end;
是要求能够切换界面,
是而且要界面完整
//开始执行打包过程
//显示进度条
fmProgress.gauge.Progress:=0;
fmProgress.Show;
//将FlashFere.exe先放入内存流中
ms:=TMemoryStream.Create;
fs:=TFileStream.Create(efflocation.Text,fmOpenRead or fmShareDenyWrite);
try
ms.CopyFrom(fs,0);
finally
fs.Free;
end;
fmProgress.gauge.Progress:=round(ms.Size*100/totalsize);
//将其他文件也放入内存流中
for i:=0 to fnlist.Count-1 do
begin
application.ProcessMessages;
try
ms.Seek(0,soFromEnd);
fnList.Strings[i]:=fnList.Strings[i]+'|'+intToStr(ms.Position); //ffindex.swf|23087 这句一定要放在前面
fs:=TFileStream.Create(fileListBox.Items.Strings[i],fmOpenRead or fmShareDenyWrite);
ms.Seek(0,soFromEnd);
ms.CopyFrom(fs,0);
fnList.Strings[i]:=fnList.Strings[i]+'|'+intToStr(fs.Size); //ffindex.swf|23087|2512
finally
fs.Free;
end;
fmProgress.gauge.Progress:=round(ms.Size*100/totalsize);
end;