我想通过一个窗体移动事件来获得它的坐标,然后,让另一窗体与它吸附..说明白些就是想整一磁性窗体....没找到代码.

解决方案 »

  1.   

    type   
        
          TForm1   =   class(TForm)   
        
          private   
        
          procedure   WMMOVE(var   Msg:   TMessage);   message   WM_MOVE;   
        
          end;   
        
      var   
        
          Form1:   TForm1;   
        
      implementation   
        
      {$R   *.DFM}   
        
      {   TForm1   }   
        
      procedure   TForm1.WMMOVE(var   Msg:   TMessage);   
        
      begin   
        
          Inherited;   
        
          if   (Left   <   10)   and   (Top   <   10)   and     
        
          (Left   <>   0)   and   (Top   <>   0)   then   //   设定移动到左上角   10   点范围内时贴到边上去   
        
          begin   
        
          Left   :=   0;   
        
          Top   :=   0;   
        
          Msg.Result   :=   0;   
        
          end;   
        
      end;   
        
      end.   
    网上一搜多得是……
      

  2.   

    我的意思是,有两个窗口form1 ,form2并排着的form2在form1的右边.....,当Form1移动时,form2也跟着移动....当FORM2与FORM1的距离超过一定数值时,FORM2也会被吸过去.........
    这里就要分两块写...一是FORM1移动事件,,,取得坐标来计算两个窗体的距离如果大于一个数值,,,FORM2就被吸过来...也就是取得FORM1的坐标,设定FORM2的坐标的问题....楼上所述是一个窗体的吸附到屏幕边的代码
    我再等 
      

  3.   

    这恐怕就不怎么好做了……
    大概有个思路,说下吧
      设置一个停泊区,把一个TWinControl的子类控件的DockSite设置为True.再设置一个可停泊对象,DragKind为dkDock,DragMode为dmAutomatic!如果可停泊对象不是TWinControl的子类,还需要设置FloatingDockSiteClass      
      OnGetSiteInfo,OnDockOver,OnDockDrop,OnUnDock这些事件需要注意下,OnGetSiteInfo事件中的的CanDock表示是否接收停泊对象,而类似吸附的效果通过坐标判断是否可停泊即可
      

  4.   

    type  
        
          TForm1  =  class(TForm)  
        
          private  
        
          procedure  WMMOVE(var  Msg:  TMessage);  message  WM_MOVE;  
        
          end;  
        
      var  
        
          Form1:  TForm1;  
        
      implementation  
        
      {$R  *.DFM}  
        
      {  TForm1  }  
        
      procedure  TForm1.WMMOVE(var  Msg:  TMessage);  
        
      begin  
        
          Inherited;  
        
          if  (Left  <  10)  and  (Top  <  10)  and    
        
          (Left  <>  0)  and  (Top  <>  0)  then  //  设定移动到左上角  10  点范围内时贴到边上去  
        
          begin  
        
          Left  :=  0;  
        
          Top  :=  0;  
        
          Msg.Result  :=  0;  
        
          end;  
        
      end;  
        
      end.  
      

  5.   

    两行代码即可实现....两个窗体的磁性依附,,个人感觉非常好用!procedure TForm1.Timer1Timer(Sender: TObject);
    begin
      FORM2.Left:=form1.Left+form1.Width;
      form2.Top:=form1.Top;
    end;就这两行代码.....