六月婷婷综合激情-六月婷婷综合-六月婷婷在线观看-六月婷婷在线-亚洲黄色在线网站-亚洲黄色在线观看网站

明輝手游網(wǎng)中心:是一個免費(fèi)提供流行視頻軟件教程、在線學(xué)習(xí)分享的學(xué)習(xí)平臺!

在Delphi中使用自定義光標(biāo)

[摘要]開發(fā)者都希望自己的程序有一個友好的界面,此時,一個生動活潑、有表現(xiàn)力的光標(biāo)就必不可少了。Windows 缺省提供22種標(biāo)準(zhǔn)光標(biāo)供在程序中調(diào)用,但對一個求新求變的程序員來說,標(biāo)準(zhǔn)光標(biāo)就不能滿足要求了,...
開發(fā)者都希望自己的程序有一個友好的界面,此時,一個生動活潑、有表現(xiàn)力的光標(biāo)就必不可少了。Windows 缺省提供22種標(biāo)準(zhǔn)光標(biāo)供在程序中調(diào)用,但對一個求新求變的程序員來說,標(biāo)準(zhǔn)光標(biāo)就不能滿足要求了,需要使用自己的光標(biāo),那么,在程序中怎樣使用自己的光標(biāo)呢?

  ●光標(biāo)資源的獲得

  要使用自定義光標(biāo),必須先得到這些光標(biāo)。光標(biāo)文件有兩種:靜態(tài)光標(biāo)(.cur)和動態(tài)光標(biāo)(.ani)。你可以使用現(xiàn)成的光標(biāo)文件,比如Delphi 自帶的一組光標(biāo)文件(在C:Program FilesBorlandDelphi 3ImagesCursors目錄中),如果你安裝了Windows98的桌面主題,則可在Windowsplus! 目錄下找到許多光標(biāo)文件。你也可以自己創(chuàng)建光標(biāo)文件,比如使用Delphi自帶的Image Editor 就可創(chuàng)建靜態(tài)光標(biāo)文件(.cur),但I(xiàn)mage Editor不能創(chuàng)建彩色光標(biāo),要創(chuàng)建彩色光標(biāo),必須使用其它工具,如Vc++ 的資源編輯器。動態(tài)光標(biāo)則必須使用專門的工具軟件制作,使用動態(tài)光標(biāo)可達(dá)到光標(biāo)的動畫效果,動態(tài)光標(biāo)文件的文件結(jié)構(gòu)與AVI文件結(jié)構(gòu)相似,由文字描述區(qū)、信息區(qū)、時間控制區(qū)、數(shù)據(jù)區(qū)四部分構(gòu)成。Windows通過按文件時間控制區(qū)中指定的時間一幀幀播放文件數(shù)據(jù)區(qū)中包含的光標(biāo)或圖標(biāo)圖像來實(shí)現(xiàn)動畫效果。

  其實(shí),分析文件結(jié)構(gòu)可以發(fā)現(xiàn),靜態(tài)光標(biāo)文件(.cur)與圖標(biāo)文件(.ico)結(jié)構(gòu)非常類似,兩種文件的主要差別僅在于文件頭的文件識別碼和是否存在跟蹤點(diǎn)(Hot Spot)。文件識別碼放在文件的頭三個字節(jié),圖標(biāo)文件為00 00 01,光標(biāo)文件為00 00 02;圖標(biāo)文件沒有跟蹤點(diǎn),光標(biāo)文件的跟蹤點(diǎn)信息放在文件的00 0A-00 0D 四個字節(jié)中,00 0A - 00 0B記錄跟蹤點(diǎn)的X 坐標(biāo),00 0C-00 0D 記錄Y 坐標(biāo),記錄順序都是高位在前,低位在后,圖標(biāo)文件的00 0A-00 0D 為保留位。知道了兩者的差異,你就可以通過手工或編一個小程序來實(shí)現(xiàn)圖標(biāo)文件到光標(biāo)文件的轉(zhuǎn)換。相對于光標(biāo)文件來說,圖標(biāo)文件要好找得多,顏色上也更豐富。

  除了光標(biāo)文件外,你也可以創(chuàng)建資源文件(.res ),在資源文件中包含光標(biāo)資源, Delphi 同樣可在程序中調(diào)用。可使用Image Editor 或Microsoft的資源編輯器創(chuàng)建資源文件(推薦使用Vc++的資源編輯器)。Delphi 缺省為每一個項(xiàng)目創(chuàng)建一個與項(xiàng)目名同名的資源文件,如你的項(xiàng)目名為test.dpr ,則資源文件名為test.res。但你如果把光標(biāo)放在這個文件中,在程序中是無法調(diào)用的,必須創(chuàng)建自己的資源文件。在給光標(biāo)資源命名時注意不要與已有的資源重名,創(chuàng)建好后,再在程序中使用編譯指令$R將資源文件加在程序中,如資源文件為my.res,則在主窗體的Implementation下加上一行{$R my.res} 就可以了。

  ●自定義光標(biāo)在程序中的使用

  Delphi 使用自定義光標(biāo)是通過調(diào)用Windows的API函數(shù)實(shí)現(xiàn)的。Delphi 的Screen 對象定義有一個Cursors 屬性,屬性聲明為Property Cursors[Index:Interger]:Hcursor;Cursors屬性實(shí)際記錄了應(yīng)用程序中使用的全部光標(biāo)資源的句柄,Index 為每項(xiàng)資源的索引號。Delphi缺省提供的22種光標(biāo)資源也在其中,Index值為-21~0。要使用自己的光標(biāo),首先可調(diào)用API函數(shù) Loadcursorfromfile(對于光標(biāo)文件)或使用Loadcursor(對于資源文件)獲得相應(yīng)光標(biāo)的句柄,這兩個函數(shù)都定義在Windows單元中,函數(shù)聲明為:

  Function LoadCursorFromFile(lpFileName:PAnsiChar):HCURSOR;stdcall;

  //lpFilename為光標(biāo)文件名。(兩種光標(biāo)都適用,只需具體指定光標(biāo)文件名就可以了。)

  Function LoadCursor(hInstance: HINST; lpCursorName: PAnsiChar): HCURSOR; stdcall;

  //hInstance為應(yīng)用程序的句柄,lpCursorName為光標(biāo)資源的名字。在資源文件中只能包含靜態(tài)光標(biāo)資源,資源文件不支持動態(tài)光標(biāo)這種格式的資源。兩個函數(shù)的詳細(xì)說明可參考Delphi的Win32幫助。

  得到光標(biāo)的句柄后,將這個句柄值添加到Cursors數(shù)組中,注意Index不要與已有的索引號重復(fù),否則將覆蓋已有的光標(biāo)。要使用這個光標(biāo)時,只要將該光標(biāo)的Index賦值給元件的Cursor屬性就可以了,Delphi根據(jù)這個索引號查找Cursors數(shù)組,找到該光標(biāo)的句柄,并用Setcursor函數(shù)將這個句柄賦給元件。需要指出的是,程序結(jié)束時,不必調(diào)用Deletecursor函數(shù)釋放光標(biāo)資源,Delphi會自動釋放它們。

  ●程序示例

  unit Unit1;

  interface

  uses

   Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs;

  type

   TForm1 = class(TForm)

        procedure FormCreate(Sender: TObject);

   private

    { Private declarations }

   public

    { Public declarations }

   end;

  var

   Form1: TForm1;

  implementation

  {$R *.DFM}

  {$R my.res}//加載資源文件my.res

  procedure TForm1.FormCreate(Sender: TObject);

  const

  crmy1=1;

  crmy2=2;

  crmy3=3;

  var

  result1,result2,result3:integer;

  begin

     result1:=loadcursorfromfile(′my.cur′);

   if result1<>0 then //如果返回值為0,則調(diào)用失敗!

   screen.cursors[crmy1]:=result1

   else

   showmessage(′加載靜態(tài)光標(biāo)文件出錯!′);

   result2:=loadcursorfromfile(′my.ani′);

   if result2<>0 then

   screen.cursors[crmy2]:=result2

   else

   showmessage(′加載動態(tài)光標(biāo)文件錯誤!′);

   result3:=loadcursor(Hinstance,′mycursor′);

  Hinstance為定義在System單元中的一個長整變量,其值為應(yīng)用程序的句柄,由Delphi自己維護(hù)。

  在加載資源文件的光標(biāo)資源時,如果光標(biāo)的名字為整數(shù)(Vc++的資源編輯器給資源的缺省名就為整數(shù)),就必須使用API函數(shù)Makeintresource將整數(shù)轉(zhuǎn)換為PansiChar類型,再傳遞給Loadcursor函數(shù)。

  例如:result:=Loadcursor(Hinstance,Makeintresource(101))}

   if result3<>0 then

   screen.cursors[crmy3]:=result3

   else

   showmessage(′加載資源文件中的光標(biāo)資源出錯!′);

  //使用加載的光標(biāo),cursors[]數(shù)組為全局變量,可在程序的任何地方調(diào)用;

   if result1<>0 then

   screen.cursor:=crmy1;

   if result2<>0 then

   form1.cursor:=crmy2;

     if result3<>0 then

   screen.cursor:=crmy3;

  end;

  end.

  程序在Windows95 ,Delphi3.0中調(diào)試通過。


主站蜘蛛池模板: 中文字幕在线不卡视频 | 日韩一级欧美一级在线观看 | 欧美淫片 | 日韩欧美视频免费观看 | 日本人成大片在线 | 性做久久久久久 | 色窝窝免费播放视频在线 | 中文在线最新版天堂8 | 午夜资源| 婷婷六月久久综合丁香乐透 | 中文字幕免费高清视频 | 亚洲无线视频 | 日本视频播放免费线上观看 | 日本人的一区二区三区四区 | 三级黄色在线免费观看 | 一级做α爰片久久毛片 | 午夜久久免费视频 | 亚洲欧美久久精品 | 日本成人黄色网址 | 亚洲欧美日韩一区高清中文字幕 | 手机看片福利日韩国产 | 日本不卡一二三区 | 欧美午夜精品 | 欧美怡红院免费的视频 | 亚洲一一在线 | 天使萌一区二区三区免费观看 | 午夜视频在线观看免费视频 | 亚洲精品亚洲人成在线 | 色天天综合色天天天天看大 | 日韩一区二三区国产好的精华液 | 视频日韩p影院永久免费 | 欧美亚洲国产日韩一区二区三区 | 天天噜噜揉揉狠狠夜夜 | 日日摸夜夜添夜夜添毛片 | 亚色网址| 午夜在线精品不卡国产 | 一级做a爰片久久毛片一 | 日日夜干 | 亚洲伊人久久大香线蕉结合 | 亚洲 欧美 中文 日韩专区 | 亚欧乱色视频小说 |