亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? anibtn.pas

?? 這一系列是我平時收集的pascal深入核心編程
?? PAS
字號:
unit AniBtn;

interface

uses Windows, Messages, CommCtrl;

const
 // 動畫按鈕控件類名
  WC_ANIBTN = 'AniBtn';

 // 控件自定消息 ~~

 // 注意, 只有將消息定義在這個范圍, 才不會沖突
  ABM_FIRSTMSG = (WM_APP + 0);

 // Purpose: 設置動畫定時器延時
 // wParam: Integer - 新的定時器延時(毫秒為單位)
 // lParam: 略
 // Return: 略
  ABM_SETTIMER = (ABM_FIRSTMSG + 0);

 // Purpose: 取得動畫定時器延時
 // wParam: 略
 // lParam: 略
 // Return: Integer - 當前定時器延時(毫秒為單位)
  ABM_GETTIMER = (ABM_FIRSTMSG + 1);

 // Purpose: 設置動畫圖像列表
 // wParam: HIMAGELIST - 圖像列表控件句柄
 // lParam: 略
 // Return: 略
  ABM_SETIMAGELIST = (ABM_FIRSTMSG + 2);

 // Purpose: 取得動畫圖像列表
 // wParam: 略
 // lParam: 略
 // Return: HIMAGELIST - 當前圖像列表句柄
  ABM_GETIMAGELIST = (ABM_FIRSTMSG + 3);

 // 對控件消息的簡單包裝
procedure AniBtn_SetTimer(hWnd: HWND; nTimeOut: Integer);
function AniBtn_GetTimer(hWnd: HWND): Integer;
procedure AniBtn_SetImageList(hWnd: HWND; himl: HIMAGELIST);
function AniBtn_GetImageList(hWnd: HWND): HIMAGELIST;

 // 注冊or反注冊控件
function AniBtn_RegisterClass(HInst: THandle; fGlobalClass: BOOL): ATOM; stdcall;
function AniBtn_UnregisterClass(HInst: THandle): BOOL; stdcall;

implementation

uses SuperCls;

 // 設置定時器間隔
procedure AniBtn_SetTimer(hWnd: HWND; nTimeOut: Integer);
begin
  SendMessage(hWnd, ABM_SETTIMER, nTimeout, 0);
end;

 // 取得定時器間隔
function AniBtn_GetTimer(hWnd: HWND): Integer;
begin
  Result := SendMessage(hWnd, ABM_GETTIMER, 0, 0);
end;

 // 設置動畫圖像列表
procedure AniBtn_SetImageList(hWnd: HWND; himl: HIMAGELIST);
begin
  SendMessage(hWnd, ABM_SETIMAGELIST, himl, 0);
end;

 // 取得動畫圖像列表
function AniBtn_GetImageList(hWnd: HWND): HIMAGELIST;
begin
  Result := SendMessage(hWnd, ABM_GETIMAGELIST, 0, 0);
end;

type
 // 按鈕額外空間結構
  P_AniBtn_WndExtraBytes = ^T_AniBtn_WndExtraBytes;
  T_AniBtn_WndExtraBytes = packed record
    himl: HIMAGELIST; // 圖像列表控件句柄
    iImage: Integer;  // 下一個要顯示的圖片
    nTimeout: Integer; // 圖片變化時間間隔
  end;

 // 按鈕ABM_SETTIMER處理
procedure AniBtn_OnSetTimer(hWnd: HWND; nTimeout: Integer); stdcall;
begin
  SuperCls_SetWindowLong(hWnd, Integer(@P_AniBtn_WndExtraBytes(0).nTimeout), nTimeout);
  SetTimer(hWnd, 1, nTimeout, nil);
end;

 // 按鈕ABM_GETTIMER處理
function AniBtn_OnGetTimer(hWnd: HWND): Integer; stdcall;
begin
  Result := SuperCls_GetWindowLong(hWnd, Integer(@P_AniBtn_WndExtraBytes(0).nTimeout));
end;

 // 按鈕ABM_SETIMAGELIST處理
procedure AniBtn_OnSetImageList(hWnd: HWND; himl: HIMAGELIST); stdcall;
begin
  SuperCls_SetWindowLong(hWnd, Integer(@P_AniBtn_WndExtraBytes(0).himl), himl);
  SuperCls_SetWindowLong(hWnd, Integer(@P_AniBtn_WndExtraBytes(0).iImage), 0);
end;

 // 按鈕ABM_GETIMAGELIST處理
function AniBtn_OnGetImageList(hWnd: HWND): HIMAGELIST; stdcall;
begin
  Result := SuperCls_GetWindowLong(hWnd, Integer(@P_AniBtn_WndExtraBytes(0).himl));
end;

 // 調用基類(Button)窗口過程
function AniBtn_CallBaseClass(hWnd: HWND; uMsg: UINT; wParam: WPARAM; lParam: LPARAM): LRESULT;
begin
  Result := CallWindowProc(SuperCls_GetWndProcBaseCls(hWnd), hWnd, uMsg, wParam, lParam);
end;

 // 按鈕WM_CREATE處理
function AniBtn_OnCreate(hWnd: HWND; lpCreateStruct: PCreateStruct): BOOL;
begin
 // 缺省延時為0.25秒
  AniBtn_SetTimer(hWnd, 250);

 // 調用基類處理過程
  Result := AniBtn_CallBaseClass(hWnd, WM_CREATE, 0, Integer(lpCreateStruct)) <> -1;
end;

 // 按鈕WM_DESTROY處理
procedure AniBtn_OnDestroy(hWnd: HWND);
var
  himl: HIMAGELIST;
begin
 // 清除關聯的圖像列表
  himl := AniBtn_GetImageList(hWnd);
  if (himl <> 0) then ImageList_Destroy(himl);

 // 刪除動畫定時器
  KillTimer(hWnd, 1);

 // 調用基類處理過程
  AniBtn_CallBaseClass(hWnd, WM_DESTROY, 0, 0);
end;

 // 按鈕WM_TIMER處理
procedure AniBtn_OnTimer(hWnd: HWND; id: UINT);
var
  himl: HIMAGELIST;
  iImage: Integer;
  hiconOld: HICON;
begin
  himl := AniBtn_GetImageList(hWnd);
  if (himl <> 0) then
  begin
   // 要顯示的圖像
    iImage := SuperCls_GetWindowLong(hWnd, Integer(@P_AniBtn_WndExtraBytes(0).iImage));

   // 修改按鈕圖標
    hiconOld := SendMessage(hWnd, BM_SETIMAGE, IMAGE_ICON, ImageList_GetIcon(himl, iImage, ILD_NORMAL));

   // 清除老的圖標
    if (hiconOld <> 0) then DestroyIcon(hiconOld);

   // 后繼圖像編號
    iImage := (iImage + 1) mod ImageList_GetImageCount(himl);
    SuperCls_SetWindowLong(hWnd, Integer(@P_AniBtn_WndExtraBytes(0).iImage), iImage);
  end;
end;

 // 按鈕消息處理回調
function AniBtn_WndProc(hWnd: HWND; uMsg: UINT; wParam: WPARAM; lParam: LPARAM): LRESULT; stdcall;
begin
  Result := 0;

  case (uMsg) of
   // 標準窗口消息
    WM_CREATE:
      begin
        if AniBtn_OnCreate(hWnd, PCreateStruct(lParam)) = FALSE then Result := -1;
      end;

    WM_DESTROY:
      begin
        AniBtn_OnDestroy(hWnd);
      end;

    WM_TIMER:
      begin
        AniBtn_OnTimer(hWnd, wParam);
      end;

   // 控件自定消息
    ABM_SETTIMER:
      begin
        AniBtn_OnSetTimer(hWnd, wParam);
      end;

    ABM_GETTIMER:
      begin
        Result := AniBtn_OnGetTimer(hWnd);
      end;

    ABM_SETIMAGELIST:
      begin
        AniBtn_OnSetImageList(hWnd, wParam);
      end;

    ABM_GETIMAGELIST:
      begin
        Result := AniBtn_OnGetImageList(hWnd);
      end;

    else Result := AniBtn_CallBaseClass(hWnd, uMsg, wParam, lParam);  
  end;
end;

 // 注冊動畫按鈕類
function AniBtn_RegisterClass(HInst: THandle; fGlobalClass: BOOL): ATOM; stdcall;
var
  wc: TWndClassEx;
begin
  ZeroMemory(@wc, SizeOf(TWndClassEx));
  wc.cbSize := SizeOf(TWndClassEx);

 // 取基類(Button)信息 
  if (GetClassInfoEx(0, 'BUTTON', wc) = FALSE) then
  begin
    Result := INVALID_ATOM;
    Exit;
  end;

 // InitCommonControls()其實是comctl32.dll中的一個空函數,
 // 一般調用它是為了保證在程序啟動時自動載入comctl32.dll,
 // 而該DLL在載入的時候, 會自動注冊其所包含控件的窗口類,
 // 隨后, 即可直接根據類名來建立控件了..  :~)
 
 // 這里有兩點理由可以不調用InitCommonControls()函數,
 // 1.程序已經靜態調用了comctl32.dll中的ImageList_Create()
 // 來建立圖像列表, 所以comctl32.dll同樣會自動載入..
 // 2.圖像列表并沒有對應的窗口類, 無須注冊, 也可以正常使用

 // InitCommonControls();

 // 設置我們的類名
  wc.lpszClassName := WC_ANIBTN;

 // 欲注冊類的模塊
  wc.hInstance := HInst;

 // 要求注冊全局類
  if (fGlobalClass) then wc.style := wc.style or CS_GLOBALCLASS;

 // 注冊superclass
  Result := SuperCls_RegisterClassEx(@wc, @AniBtn_WndProc, 0, SizeOf(T_AniBtn_WndExtraBytes));
end;

 // 注銷動畫按鈕類
function AniBtn_UnregisterClass(HInst: THandle): BOOL; stdcall;
begin
  Result := UnregisterClass(WC_ANIBTN, HInst);
end;

end.

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
日韩电影在线一区二区三区| 欧美成人国产一区二区| 日韩毛片一二三区| 亚洲精品久久7777| 日韩av在线发布| 成人一区二区三区视频在线观看| 白白色亚洲国产精品| 日韩欧美一区二区免费| 日韩免费一区二区| 亚洲男同1069视频| 精品亚洲国内自在自线福利| 色一区在线观看| 337p日本欧洲亚洲大胆精品| 艳妇臀荡乳欲伦亚洲一区| 精品一区二区三区在线播放| 91精品办公室少妇高潮对白| 国产日韩欧美精品在线| 亚洲va天堂va国产va久| 9l国产精品久久久久麻豆| 精品国产91九色蝌蚪| 天天av天天翘天天综合网 | 成人性生交大片免费看在线播放| 国产成人小视频| 日韩欧美国产小视频| 亚洲国产成人av好男人在线观看| 国产精品小仙女| 欧美成人性福生活免费看| 琪琪一区二区三区| 日韩午夜电影在线观看| 视频一区中文字幕国产| 欧美日韩三级一区二区| 亚洲国产va精品久久久不卡综合| 色菇凉天天综合网| 亚洲国产日韩一级| 欧美成人精品3d动漫h| 国产美女精品人人做人人爽| 中文在线一区二区| 日本韩国欧美在线| 日欧美一区二区| 中文字幕的久久| 欧美午夜寂寞影院| 成人一区二区三区在线观看| 欧美三级日韩在线| 极品美女销魂一区二区三区| 国产精品成人一区二区三区夜夜夜| 成人的网站免费观看| 性久久久久久久久久久久| 精品99久久久久久| 欧美日韩三级一区二区| 国产成人免费av在线| 亚洲成人免费观看| 亚洲欧洲精品天堂一级| 日韩精品一区二区三区视频播放| www.亚洲色图| 国产99久久精品| 看电视剧不卡顿的网站| 亚洲一区免费视频| 国产精品久久久久aaaa| 久久久不卡网国产精品一区| 欧美精品一二三| 欧美丰满美乳xxx高潮www| 91蝌蚪国产九色| 99久久精品免费观看| 成人sese在线| 99精品热视频| 色狠狠色噜噜噜综合网| 欧美午夜精品一区二区蜜桃| 91国偷自产一区二区开放时间| 99久久伊人精品| 91网站最新网址| 777午夜精品视频在线播放| 欧美日韩一区二区不卡| 欧美一区二区三区影视| 欧美一区二区三区小说| 久久精品这里都是精品| 中文字幕日本乱码精品影院| 亚洲另类春色校园小说| 亚洲妇女屁股眼交7| 亚洲福利视频导航| 另类成人小视频在线| 高清久久久久久| 欧美日韩成人一区| 久久一区二区三区四区| 亚洲黄色免费电影| 另类中文字幕网| 欧美性猛片xxxx免费看久爱 | 国产精品久久99| 日韩激情视频网站| www.在线欧美| 久久久久综合网| 毛片一区二区三区| 91久久精品日日躁夜夜躁欧美| 26uuu亚洲综合色| 三级久久三级久久久| 91色九色蝌蚪| 中文字幕日韩一区二区| 国产成人在线观看| 欧美成人r级一区二区三区| 亚洲国产成人av网| 在线观看亚洲精品视频| 国产精品美女www爽爽爽| 精品一区二区三区的国产在线播放 | 国产欧美一二三区| 成人精品视频一区| 精品国产一二三| 精品一区二区三区av| 91精品国产黑色紧身裤美女| 亚洲狠狠丁香婷婷综合久久久| 国产一区二区三区| 日本一区二区高清| 99久久精品国产一区二区三区| 中文欧美字幕免费| 在线观看一区日韩| 日本不卡在线视频| 久久精品一区蜜桃臀影院| 国产精品一二二区| 精品99一区二区三区| 国产成人av一区二区三区在线| 中文字幕在线观看一区二区| 91麻豆swag| 激情五月婷婷综合| 亚洲视频免费在线| 精品成a人在线观看| 成人91在线观看| 激情成人综合网| 亚洲国产综合色| 国产日韩欧美精品电影三级在线| 91啦中文在线观看| 国产成人超碰人人澡人人澡| 亚洲综合一区二区精品导航| 精品国产乱子伦一区| 精品视频一区二区三区免费| 国产剧情av麻豆香蕉精品| 亚洲成人免费在线观看| 自拍偷拍国产精品| 久久久久国产精品人| 日韩一区二区在线看片| 欧美性videosxxxxx| 久久蜜桃一区二区| 日韩在线一区二区三区| 日本不卡一区二区| 成人ar影院免费观看视频| 欧美激情在线一区二区三区| 9色porny自拍视频一区二区| 精品一区二区在线视频| 亚洲成精国产精品女| 一区二区中文字幕在线| 国产日韩精品一区二区三区在线| 9191成人精品久久| 日本道免费精品一区二区三区| 国产精品亚洲专一区二区三区| 免费在线观看不卡| 热久久一区二区| 日产国产欧美视频一区精品| 亚洲欧美日韩在线| 亚洲色图自拍偷拍美腿丝袜制服诱惑麻豆| 久久精品一区二区三区四区| 精品国产91久久久久久久妲己 | 亚洲精品日韩专区silk| 欧美激情一区二区三区在线| www激情久久| 国产日产欧美一区| 欧美挠脚心视频网站| 欧美日韩日本视频| 欧美日韩国产123区| 91精品免费在线观看| 日韩一级大片在线观看| 欧美电影免费观看高清完整版| 日韩免费观看高清完整版 | 欧美大片在线观看| 久久一二三国产| 欧美极品aⅴ影院| 亚洲图片另类小说| 亚洲国产视频a| 久久精品国产999大香线蕉| 精品一二三四在线| 成人小视频在线| 在线一区二区三区四区| 欧美剧在线免费观看网站| 欧美大片在线观看一区| 国产精品久久久久四虎| 亚洲综合区在线| 人人狠狠综合久久亚洲| 成人综合在线视频| 欧美性高清videossexo| 精品久久久久久久久久久久包黑料 | 国产成人精品一区二| 99re成人精品视频| 欧美日韩国产三级| 久久久精品免费网站| 亚洲免费伊人电影| 久久91精品久久久久久秒播| av在线一区二区三区| 91精品欧美久久久久久动漫| 亚洲国产电影在线观看| 亚洲午夜成aⅴ人片| 国产成人综合自拍| 4hu四虎永久在线影院成人| 欧美国产日韩亚洲一区| 日日夜夜精品视频免费|