比如,我们界面上有两个编辑框Edit1,Edit2。现在要求鼠标点Edit1时,立即产生一组不断变化缩小的矩形框(框形),飞向Edit2。当到达Edit2的中部是最小的而且自动消失。
这是一个界面的特效功能。我实现不了。请大家帮我。哪位朋友能有相关的代码给我一下。
这是一个界面的特效功能。我实现不了。请大家帮我。哪位朋友能有相关的代码给我一下。
解决方案 »
- adoquery筛选的问题
- 新手问题:我用RMReport设计了一个报表,怎么在一个窗口事件中打印或预览这个报表?比如点击一个按钮等等。请不吝执教。
- 高分求打印设置问题
- 如何在delphi中备份和还原sql server 数据库和日志文件,在线等。谢谢
- 帮帮我。。。。。。。。。。。。。。。。。。。。。
- 求救:TNMSMTP如何发送邮件???出现“需要SMTP认证”错误怎么解决???
- 这段sql有个怪问题
- RichEdit文字排版问题(指定坐标位置(坐标已知)插入文字)?
- 多线程和数据量上传问题
- 请高手出招:用Query1查询ACCESS数据库出问题??
- 无边框窗体最大化覆盖了任务栏
- listview有多列columns,点击第一列的某项时就选中了该item,如何能在点击第二列或其它列时也有同样的效果呢?
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;type
TForm1 = class(TForm)
Edit1: TEdit;
Edit2: TEdit;
Edit3: TEdit;
Edit4: TEdit;
Edit5: TEdit;
Edit6: TEdit;
Edit7: TEdit;
Edit8: TEdit;
procedure FormCreate(Sender: TObject);
procedure FormClose(Sender: TObject; var Action: TCloseAction);
procedure Edit1Click(Sender: TObject);
private
procedure DrawShape(Cnvs: Tcanvas; TopLeft, BottomRight: TPoint; AMode: TPenMode);
procedure Wave(Cnvs: Tcanvas; TopLeft, BottomRight: TPoint; Step, TimeDelay: integer);
procedure FlyWave(Cnvs: Tcanvas; O1, O2: TPoint; Width, Height: integer; Step, TimeDelay: integer);
procedure FlyBtwnEdit(FrmEdit, T0Edit: TEdit; Step, TimeDelay: Integer);
{ Private declarations }
public
{ Public declarations }
end;var
Form1 : TForm1;
Scrn_Rect : TCanvas;
PenColor : TColor;
implementation{$R *.dfm}procedure Delay(msec: single);
//延时函数,msec 为微秒(千分之1秒)
var
FirstTickCount : real;
begin
if msec > 0 then
begin
FirstTickCount := GetTickCount();
FirstTickCount := FirstTickCount + msec;
while FirstTickCount > GetTickCount() do
Application.HandleMessage;
end;
end;procedure TForm1.DrawShape(Cnvs: Tcanvas; TopLeft, BottomRight: TPoint; AMode: TPenMode);
begin
with Cnvs do
begin
Pen.Mode := AMode;
Rectangle(TopLeft.X, TopLeft.Y, BottomRight.X, BottomRight.Y);
end;
end;procedure TForm1.FormCreate(Sender: TObject);
begin
Scrn_Rect := TCanvas.Create;
Scrn_Rect.Handle := GetDC(0);
PenColor := $0000FFFF;
Scrn_Rect.Pen.Color := PenColor;
scrn_Rect.Brush.Style := bsClear;
end;procedure TForm1.Wave(Cnvs: Tcanvas; TopLeft, BottomRight: TPoint; Step, TimeDelay: integer);
var dh, dw, dt : single;
NowTopLeft, NowBottomRight: Tpoint;begin
dw := (BottomRight.X - TopLeft.X) / Step;
dh := (BottomRight.Y - TopLeft.Y) / Step;
dt := TimeDelay / Step; NowTopLeft := TopLeft;
NowBottomRight := BottomRight; while step > 0 do
begin
DrawShape(Cnvs, NowTopLeft, NowBottomRight, pmNotXor);
delay((dt));
DrawShape(Cnvs, NowTopLeft, NowBottomRight, pmNotXor);
NowTopLeft.X := NowTopLeft.X + round(dw / 2);
NowTopLeft.Y := NowTopLeft.Y + round(dh / 2);
NowBottomRight.X := NowBottomRight.X - round(dw / 2);
NowBottomRight.Y := NowBottomRight.Y - round(dh / 2); dec(step);
Application.HandleMessage;
end;
end;
procedure TForm1.FlyWave(Cnvs: Tcanvas; O1, O2: TPoint; Width, Height: integer; Step, TimeDelay: integer);
var dh, dw, dt, dox, doy: single;
NowTopLeft, NowBottomRight: Tpoint;
begin
dw := (Width) / Step;
dh := (Height) / Step;
dt := TimeDelay / Step;
dox := (o1.X - o2.X) / Step;
doy := (o1.Y - o2.Y) / Step; NowTopLeft.X := O1.X - round(Width / 2);
NowTopLeft.Y := O1.Y - round(Height / 2); NowBottomRight.X := O1.X + round(Width / 2);
NowBottomRight.Y := O1.Y + round(Height / 2); delay((dt));
while step >= 0 do
begin
DrawShape(Cnvs, NowTopLeft, NowBottomRight, pmNotXor);
delay((dt));
DrawShape(Cnvs, NowTopLeft, NowBottomRight, pmNotXor); NowTopLeft.X := NowTopLeft.X - round(dox - dw / 2); // dw / 2 +
NowTopLeft.Y := NowTopLeft.Y - round(doy - dh / 2); // dh / 2 +
NowBottomRight.X := NowBottomRight.X - round(dox + dw / 2); // dw / 2 +
NowBottomRight.Y := NowBottomRight.Y - round(doy + dh / 2); // dh / 2 + dec(step);
Application.HandleMessage;
end;
end;procedure TForm1.FlyBtwnEdit(FrmEdit, T0Edit: TEdit; Step, TimeDelay: Integer);
var o1, o2 : tpoint;
begin
o1.X := FrmEdit.Left + round(FrmEdit.Width / 2);
o1.Y := FrmEdit.Top + round(FrmEdit.Height / 2);
o2.X := T0Edit.Left + round(T0Edit.Width / 2);
o2.Y := T0Edit.Top + round(T0Edit.Height / 2);
o1 := clienttoscreen(o1);
o2 := clienttoscreen(o2);
FlyWave(Scrn_Rect, o1, o2, T0Edit.Width, T0Edit.Height, Step, TimeDelay);
end;procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
Scrn_Rect.Free;
end;procedure TForm1.Edit1Click(Sender: TObject);
var FrmEdit, ToEdit : TEdit;
i : integer;
begin
if Screen.ActiveControl is TEdit then
begin
FrmEdit := TEdit(Screen.ActiveControl);
for i := 0 to ComponentCount - 2 do
begin
if (Components[i] is TEdit) then
if TEdit(Components[i]).taborder = FrmEdit.taborder + 1 then
begin
ToEdit := TEdit(Components[i]);
break;
end;
end;
if i = ComponentCount - 1 then ToEdit := Edit1;
FlyBtwnEdit(FrmEdit, ToEdit, 10, 100);
end;
end;end.写完了,代码乱了点,你看看吧,不仅能画矩形,只要改改drawshape函数,椭圆,圆矩形都能画