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 ------------------------------------------------- 







Ağaç şeklinde