类似屏幕保护的功能,img1在主窗体上随机移动。

解决方案 »

  1.   

    // Timer1事件
    procedure TForm1.Timer1Timer(Sender: TObject);
    begin
      randomize;                 // 设置随机种子
      if random(10)=0 then       // 随机数 0-9  当随机数=0时 (1/10的机率)
        timer1.Tag :=random(4);  // Tag 是供用户自由使用的integer变量
                                 // 这里随机取0-3值  case  timer1.Tag of
        0: begin
             if image1.Left >0
               then image1.Left:=image1.Left-10  // 图像左移10像素
               else timer1.Tag:=1                // 图像不动 Tag=1
           end;
        1: begin
             if image1.Left+image1.Width <form1.Width
               then image1.Left:=image1.Left+10  // 图像右移10像素
               else timer1.Tag:=0
           end;
        2: begin
             if image1.Top >0
               then image1.Top :=image1.Top-10   // 图像上移10像素
               else timer1.Tag :=3
             end;
        3: begin
             if image1.Top+image1.Height <form1.Height
               then image1.Top :=image1.Top+10   // 图像下移10像素
               else timer1.Tag :=2
           end;
      end;
    end;// 将对象拖过控件的边界时发生
    procedure TForm1.FormDragOver(Sender, Source: TObject; X, Y: Integer;
      State: TDragState; var Accept: Boolean);
    begin
      image1.Left :=x;
      image1.Top :=y;
    end;// 将对象拖过控件的边界时发生
    procedure TForm1.Image1DragOver(Sender, Source: TObject; X, Y: Integer;
      State: TDragState; var Accept: Boolean);
    begin
      if (image1.Left=x) and (image1.Top=y) then
        timer1.Enabled :=false;
    end;// 鼠标指针移到控件上时发生
    procedure TForm1.Image1MouseMove(Sender: TObject; Shift: TShiftState; X,
      Y: Integer);
    begin
      timer1.Enabled :=false         // 鼠标移到图像上时停止timer1(移动)
    end;// 原方法 procedure CMMouseLeave (var Message: TMessage); message CM_MOUSELEAVE;
    // wm_mouseleave是windows的消息
    // 它是获得Delphi的内部消息,鼠标离开时发生
    procedure TForm1.cmmouseleave(var Message: TMessage);
    begin
      timer1.Enabled :=true           // 鼠标离开时启动timer1(移动 )
    end;说清楚了吗?