玩轉Windows桌面圖示 (轉)

gugu99發表於2008-01-28
玩轉Windows桌面圖示 (轉)[@more@]

玩轉桌面圖示:namespace prefix = o ns = "urn:schemas--com::office" />

 

大家一定和我一樣對Windows的桌面十分不滿意吧。那就拿起手術刀()給它動動手術。

首先要對付的是桌面圖示那一個個難看的、帶有背景色的文字,不僅看上去彆扭,還遮住了漂亮的牆紙,一定要去掉它,把它變成透明。其次就是圖示的位置,只會傻傻地呆在螢幕的左邊,還得我們一個個去拖,真累!給它來點新花樣,Please  Follow  Me!

1、  新建一工程,在 uses 中加入 CommCtrl 單元,窗體上加一個按鈕;

2、  宣告一個取得桌面控制程式碼的:

function TForm1.GetDesktopHand: THandle;

begin

  Result:=FindWindow('progman',nil);

  Result:=GetWindow(Result,GW_Child);

  Result:=GetWindow(Result,GW_Child);

end;

3、  宣告一個設定圖示文字顏色的過程:

procedure TForm1.SetTextColor(ForeClr, BackClr: TColor);

var Hand: THandle;

begin

  Hand:= GetDesktopHand;

  Listview_SetTextColor(Hand,ForeClr);  // 設定文字前景色;

  Listview_SetTextBkColor(Hand,BackClr);  // 設定文字背景色,crNone 為透明;

  Listview_RedrawItems(Hand,0,Listview_GetItemCount(Hand));  //  重畫;

end;

 

有了上面的兩個方法,你已經可以對桌面動小手術了。下面介紹圖示的排列方式。

 

4、  以螢幕的中心為圓點作圓形排列:

procedure TForm1.Circle(r: integer);  // 形參 r 為半徑;

var

  i, Count, CenterX, CenterY, TempR :integer;

  Hand: THandle;

  Radian: double;

  TempRect: TRect;

  DesktopHeight,DesktopWidth :integer;

  X, Y : ;

begin

  Hand:=GetDesktopHand;

  SystemParametersInfo(SPI_GetWorkArea,0,@TempRect,0);  // 取得工作區域;

  DesktopWidth:=TempRect.Right - TempRect.Left;  // 工作區的寬(即螢幕的寬);

  DesktopHeight:= TempRect.Bottom - TempRect.Top;  // 工作區的高(即螢幕的高);

  CenterX:=DesktopWidth div 2;  // 取得圓心 X 座標;

  CenterY:=DesktopHeight div 2; // 圓心 Y 座標;

  if CenterX>CenterY then

  TempR:=CenterY

  else

  TempR:=CenterX; 

  if r>TempR then r:=TempR;  // 半徑不能超過螢幕中心點到四邊的最短距離;

  Count:=Listview_GetItemCount(Hand);  // 桌面上圖示個數;

  Radian:=2*3.14159/Count;  //  相鄰圖示間的弧度;

  for i:=0 to Count-1 do

begin

  // 第一個圖示排在正上方;

  X:=Integer(CenterX+Trunc(r*Sin(i*Radian)));  // 圖示的X座標;

  Y:=Integer(CenterY+Trunc(r*Cos(i*Radian)));  // 圖示的Y座標;

  SendMessage(Hand,LVM_SetItemPosition,i,MakeLparam(X, y));  // 設定座標;

  end;

end;

 

5、  圖示右對齊:

procedure AlignRight(Rec: Integer); // 形參 Rec 為一個圖示所佔區域大小,一般為77;

var Hand: THandle;

  h, I, j, DesktopHight, DesktopWidth :integer;

  TempRect : TRect;

Begin

Hand:=GetDesktopHand;

  SystemParametersInfo(SPI_GetWorkArea,0,@TempRect,0);  // 取得工作區域;

 DesktopWidth:=TempRect.Right - TempRect.Left;  // 工作區的寬(即螢幕的寬);

  DesktopHeight:= TempRect.Bottom - TempRect.Top;  // 工作區的高(即螢幕的高);

  I:=0;  // 圖示所排的列數

  J:=0;

  For h:=0 to Listview_GetItemCount(Hand)-1 do

Begin

  Inc(j);

  If  j*rec>DesktopHeight  then  // 排完一列;

  Begin

  Inc(i);  // 換列

  J:=1;

  End;

  SendMessage(Hand,LVM_SetItemPosition,h,

MakeLparam(DesktopWidth-Rec*(I+1),Rec*(j-1));

End; //  for 迴圈結束;

End;

 

6、  在按鈕的單擊事件中加入程式碼:

procedure TForm1.Button1Click(Sender: T);

begin

  SetTextColor(clBlack,crNone); // 設定圖示文字顏色;

  Circle(200);  // 把圖示排列成半徑為200的圓;

  // AlignRight(77); // 右對齊;

end;

 

編譯執行,單擊按鈕。哇塞!太棒了!你還可發揮你的想象力,對稍加改進,把圖示排成蛇形、橢圓形、環形等等。以上程式在 +Delphi5下執行透過。


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/10748419/viewspace-998617/,如需轉載,請註明出處,否則將追究法律責任。

相關文章