请问如何作出下面两个界面效果?(不好意思,分数太少)(50分)

  • 主题发起人 主题发起人 moutocean
  • 开始时间 开始时间
M

moutocean

Unregistered / Unconfirmed
GUEST, unregistred user!
1。当出现长时间计算时能弹出一个FORM上面有一个动画表示主程序没有死机
当主程序完成计算以后,关闭弹出的动画窗体。
2。如何让一个FORM显示时,让它的窗体是从中心到四周慢慢扩散开来?
不好意思,分数太少,多谢!
 
1. 编写一个线程,功能为"弹出一个FORM并显示动画".
在开始长时间计算前启动线程,计算结束后结束线程.

2. 方法一: 手工绘制动画效果(很繁);
方法二: 在FORM的ONSHOW事件发生时将FORM的尺寸设置为0,
然后做循环,每次一点点增加FORM的尺寸(简单).
 
同意990的意见。
 
同意990的意见,你需要开一个线程来启动这个动画,当你长时间的计算时,你就启动这个
线程,当不计算的时候,就将线程挂起就行了。反正要使用多线程的技术。
 
我觉得启动线程去进行复杂的计算更好些.
 
对于问题1,你可以增加一个进度条ProgressBar来实现呀!!!
至于问题2,我为你完成了,呵呵!!!
//假设Form2的宽度为800,高度为600
procedure TForm1.Button1Click(Sender: TObject);
var
I :Integer;
begin
for I :=0 to 100 do
begin
Form2.Width :=I*(800 div 100);
Form2.Height :=I*(600 div 100);
Form2.Left :=400- Form2.Width div 2;
Form2.Top :=300-Form2.Height div 2;
Form2.Show;
end;
end;
 
你也可以利用AnimateWindow来实现问题2 :
procedure TForm1.FormCreate(Sender: TObject);
begin
AnimateWindow(Handle,800,AW_CENTER);//800毫秒内完成
end;
 
同意990。其实两者实现起来都很简单。
1的线程代码很简单;
2的简单实现很简单。

卷起千堆雪tyn,你的回答会不会显示101个FORM2呢?我顿时有点迷惑了:)
 
计算量很大时(cpu没时间),线程也没用。只能用avi动画(可看看avi播放的原理)
 
各位先停一下:ONSHOW事件时,FORM并没有显示出来,如何看得窗体一点点变大呢??

Onpaint事件时窗体才刚刚变为可见呀,只不过Onpaint事件会在OnResize事件后再一次
激发。百思不得其解呀!!

所谓长时间计算,一般说来也就是也就是循环计算才会出现,改一下鼠标形状,不更好吗?
再在循环中加上一句:Application.ProcessMessages;感觉就不象死机了。只不过时间更长了
一些。
 
moutocean:如果对上述回答满意,可以结束问题,否则请提前问题或发表意见
 
如果你用的是DELPHI 6 的话,请用循环语句对FORM 的AlphiBlend 打开,
然后用循环逐渐增加AlphaBlendValue 就行啦,非常好看!
 
我可以实现form以矩形重中间开始,向外逐渐显示出整个form,楼上的大侠是从左上开始的。
我还可以实现以圆形的形状向外扩展,其实很简单procedure TForm1.Button2Click(Sender: TObject);

var
rgn:thandle;
i:integer;
begin
for i:=1 to trunc(width/2) do
begin
//创建矩形边界
rgn:=CreateRectRgn(trunc(width/2)-i,
trunc(height/2)-i,
trunc(width/2)+i,
trunc(height/2)+i);
SetWindowRgn(handle,rgn,true);
sleep(10);
end;
end;



var
rgn:thandle;
i:integer;
begin
for i:=1 to trunc(width/1.414) do
begin
//创建圆形边界
rgn:=CreateEllipticRgn(trunc(width/2)-i,
trunc(height/2)-i,
trunc(width/2)+i,
trunc(height/2)+i);
SetWindowRgn(handle,rgn,true);
sleep(10);
end;
end;

以及各种各样的边界组合
 
I late again!
 
用Animate控件播放*.avi文件能够
Animate1.Play(1, Animate1.FrameCount, 0);
Animate1.Stop;
 
接受答案了.
 
后退
顶部