如何使窗体在屏幕中无规律的移动?(50分)

D

duculer

Unregistered / Unconfirmed
GUEST, unregistred user!
有没有办法如何使窗体在屏幕中无规律的移动?当然最好可以移动的比较平滑。
 
简单啊
用随机数呗
 
主要是控制form.top 和form.left这个两各属性[:)]
 
我现在做的项目当中的邮件提示就是用这种方式的,是一串3D文字一个字接一个字在屏幕上滑动,
方向,速度随机改变(方向随机变化不超过90度, 也就是说大方向不变), 碰到边界反弹。 很好玩的。
不过我好像做得过份了, 它竟然会出现在屏幕保护程序的上面。 [:D]
 
random();
然后控制把结果放到top,left那里就可以了。
同样,你想控制width,height都可以的。
 
象弹珠、3d文字做成这样地效果是可以地,但窗体做成这样有必要吗,简直偏离了编程的
目的。就象毛笔写字是书法,但标新立异拿个扫帚写字也是书法吗,简直是糟蹋艺术。
电视里经常有这样的节目。md,不是电视台是疯子,就是欣赏的人是傻
 
主要是控制form.top 和form.left这个两各属性[:)]

加上用随机数

www.mcmx.com有一个软件,是我写的,里面有个功能,如果有个移动的功能
 
qq:71892967
 
张无忌大哥讲的就可以改变位置啊
下面你要做的是产生随即数,让他自己去.....
 
随便写的,不知道是否满足你的要求:
unit Unit1;

interface

uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
ExtCtrls;

type
TForm1 = class(TForm)
Timer1: TTimer;
procedure Timer1Timer(Sender: TObject);
procedure FormCreate(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;

var
Form1: TForm1;

implementation

{$R *.DFM}

procedure TForm1.Timer1Timer(Sender: TObject);
begin
Randomize;
Self.Left := Random(Width);
Self.Top := Random(Height);
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
Timer1.Interval := 1000;
Timer1.Enabled := True;
end;

end.
 
总结:在onTime中随机给From的top(lift)+1,当top(lift)小于0时-1。
 
再看看下面一段程序吧:
unit Unit1;

interface

uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
ExtCtrls;

type
TForm1 = class(TForm)
Timer1: TTimer;
procedure Timer1Timer(Sender: TObject);
procedure FormCreate(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;

var
Form1: TForm1;

implementation

{$R *.DFM}

procedure TForm1.Timer1Timer(Sender: TObject);
var
NewLeft, NewTop: Integer;
begin
Randomize;
NewLeft := Random(20);
Randomize;
NewTop := Random(20);

if (NewLeft mod 2)=0 then
Self.Left := Self.Left+NewLeft
else
Self.Left := Self.Left-NewLeft;

if (NewTop mod 2)=0 then
Self.Top := Self.Top+NewTop
else
Self.Top := Self.Top-NewTop;
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
Timer1.Interval := 1000;
Timer1.Enabled := True;
end;

end.
 
顶部