Kod
//----- manyetik form ozelligi -------------------------------------------------
//Tamami Ersin Kecis tarafindan kodlanmistir. (Upload Tarihi: 21.05.2010 14:55)
//FmUrunKarti yazan bolumlerin oldugu yerlere kendi formunuzun ismini yazin.
//formu standart basligindan tutup tasiyarak ekran kenarlarina yaklastiririn...
//procedure WMSyscommand(var msg: TWmSysCommand);message WM_SYSCOMMAND; -> private'e
var tasiniyor:boolean=false;//aslinda bunu da govdeden tasirken kullaniyordum...
  remsg:TWmSysCommand;
procedure TFmUrunKarti.WMSyscommand(var msg:TWmSysCommand);
const hassasiyet=30;//ekran kenarina olan mesafe, pixel bazinda!
var a:TAppBarData;
  r:TRect;//r <> a.RC
  boy,en,konum:integer;//konum = 0=>altta 1=>ustte 2=>sagda 3=> solda
  //gizli:boolean;//taskbar gizlenmis mi?
begin
//formu govdeden tasimak icin formun onmousedown event'ine:
//ReleaseCapture; FmUrunKarti.perform(WM_SYSCOMMAND,$F012,0);
 if(msg.CmdType and $FFF0)=SC_MOVE then
  begin
   if tasiniyor then exit;
   tasiniyor:=true;
   a.Hwnd:=FindWindow('Shell_TrayWnd',nil); //MSTaskSwWClass //ReBarWindow32
   if a.Hwnd=0then begin tasiniyor:=false;exit;end else GetWindowRect(a.Hwnd,r);
   a.cbSize:=SizeOf(TAppBarData);
   //gizli:=(SHAppBarMessage(ABM_GETSTATE,a)and ABS_AUTOHIDE)>0;//taskbar otm.gizlenmis mi?
   boy:=r.Bottom-r.Top-2;
   en :=r.Right-r.Left-2;
   konum:=0;//default: altta!
   if SHAppBarMessage(ABM_GETTASKBARPOS,a)>0then
    case a.uEdge of//otomatik tespit
     ABE_BOTTOM:konum:=0;
     ABE_TOP   :konum:=1;
     ABE_RIGHT :konum:=2;
     ABE_LEFT  :konum:=3;
    end
   else
    begin//manuel tespit :)
     if(r.Top>0)and(r.Left<0)and(en>Screen.Width)then konum:=0; //0.altta: T:994, L:  -2 En:1282
     if(r.Top<0)and(r.Left<0)and(en>Screen.Width)then konum:=1; //1.ustte: T: -2, L:  -2 En:1282
     if(r.Top<0)and(r.Left>0)and(en<Screen.Width)then konum:=2; //2.sagda: T: -2, L:1162 En: 118
     if(r.Top<0)and(r.Left<0)and(en<Screen.Width)then konum:=3; //3.solda: T: -2, L:  -2 En: 118
    end;
   case konum of
    0:begin//taskbar altta
       //form uste yakin ise uste yapistir:
       if FmUrunKarti.Top<=Hassasiyet then FmUrunKarti.Top:=0;
       //form alta yakin ise alta yapistir:
       //if gizli then ...
       if FmUrunKarti.Top>=(Screen.Height-FmUrunKarti.Height-Boy)-Hassasiyet then
          FmUrunKarti.Top:=Screen.Height-FmUrunKarti.Height-Boy;
       //form sola yakin ise sola yapistir:
       if FmUrunKarti.Left<=Hassasiyet then FmUrunKarti.Left:=0;
       //form saga yakin ise saga yapistir:
       if FmUrunKarti.Left>=(Screen.Width-FmUrunKarti.Width)-Hassasiyet then
          FmUrunKarti.Left:=Screen.Width-FmUrunKarti.Width;
      end;
    1:begin//taskbar ustte
       //form uste yakin ise uste yapistir:
       //if gizli then ...
       if FmUrunKarti.Top<=Boy+Hassasiyet then FmUrunKarti.Top:=Boy;
       //form alta yakin ise alta yapistir:
       if FmUrunKarti.Top>=(Screen.Height-FmUrunKarti.Height)-Hassasiyet then
          FmUrunKarti.Top:=Screen.Height-FmUrunKarti.Height;
       //form sola yakin ise sola yapistir:
       if FmUrunKarti.Left<=Hassasiyet then FmUrunKarti.Left:=0;
       //form saga yakin ise saga yapistir:
       if FmUrunKarti.Left>=(Screen.Width-FmUrunKarti.Width)-Hassasiyet then
          FmUrunKarti.Left:=Screen.Width-FmUrunKarti.Width;
      end;
    2:begin//taskbar sagda
       //form uste yakin ise uste yapistir:
       if FmUrunKarti.Top<=Hassasiyet then FmUrunKarti.Top:=0;
       //form alta yakin ise alta yapistir:
       if FmUrunKarti.Top>=(Screen.Height-FmUrunKarti.Height)-Hassasiyet then
          FmUrunKarti.Top:=Screen.Height-FmUrunKarti.Height;
       //form sola yakin ise sola yapistir:
       if FmUrunKarti.Left<=Hassasiyet then FmUrunKarti.Left:=0;
       //form saga yakin ise saga yapistir:
       //if gizli then ...
       if FmUrunKarti.Left>=(Screen.Width-FmUrunKarti.Width-En)-Hassasiyet then
          FmUrunKarti.Left:=Screen.Width-FmUrunKarti.Width-En;
      end;
    3:begin//taskbar solda
       //form uste yakin ise uste yapistir:
       if FmUrunKarti.Top<=Hassasiyet then FmUrunKarti.Top:=0;
       //form alta yakin ise alta yapistir:
       if FmUrunKarti.Top>=(Screen.Height-FmUrunKarti.Height)-Hassasiyet then
          FmUrunKarti.Top:=Screen.Height-FmUrunKarti.Height;
       //form sola yakin ise sola yapistir:
       //if gizli then ...
       if FmUrunKarti.Left<=En+Hassasiyet then FmUrunKarti.Left:=En;
       //form saga yakin ise saga yapistir:
       if FmUrunKarti.Left>=(Screen.Width-FmUrunKarti.Width)-Hassasiyet then
          FmUrunKarti.Left:=Screen.Width-FmUrunKarti.Width;
      end;
   end;
   WMSyscommand(msg);
   remsg:=msg;
   tasiniyor:=false;
  end;
 inherited;
Thread.Enabled:=True;//5ms
end;
procedure TFmUrunKarti.ThreadTimer(Sender: TObject);
begin//******* icin 5ms sonra
//eger standart form basligindan degilde govdeden tasinacaksa bu timer'a gerek yok.
WMSyscommand(remsg);
Thread.Enabled:=False;
end;
//----- manyetik form ozelligi -------------------------------------------------