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

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

?? winskindlg.pas

?? 超級報表系統軟件VclSkin.v2.60.4.29.完整源代碼版.rar
?? PAS
?? 第 1 頁 / 共 2 頁
字號:
unit WinSkinDlg;

{$WARNINGS OFF}
{$HINTS OFF}
{$RANGECHECKS OFF}

interface

uses windows,Messages,SysUtils,Classes,Graphics,WinSkinMenu,
  forms,ExtCtrls;

const
   skin_Creating=0;
   skin_Active=1;
   skin_uninstall=2;
   skin_change=3;
   skin_Destory=4;
   skin_Updating=5;
   skin_Deleted=6;

Type
  TSkinThread = class(TObject)
  public
    hook:HHook;
    ThreadID:integer;
  end;

  TSBAPI1=function(ahwnd:hwnd): HResult; stdcall;
  TSBAPI2= function() :HResult; stdcall;

  TSkinManage = class(Tobject)
  protected
    Timer : TTimer;
    SBLib :Thandle;
    pinitApp,pUninitApp:TSBAPI2;
    pinitSB,pUninitSb:TSBAPI1;
    HookCallback,WndCallBack,WndCallRet : HHOOK;
    //function  FindSkinForm(aHwnd:THandle):boolean;
    function  FindSkinForm(aHwnd:THandle):dword;
    procedure DeleteAllForms;
    function AddMenu(aHwnd:THandle):boolean;
    function  FindSkinMenu(aHwnd:THandle):boolean;
    function  DeleteMenu(aHwnd:THandle):boolean;
    procedure DeleteAllMenus;
    function  FindTForm(ahwnd:Thandle):Tform;
    procedure OnTimer(Sender: TObject);
    function NestedForm(ahwnd:Thandle):boolean;
    procedure FindSkindata(var adata:pointer;ahwnd:Thandle);
    function OnBeforeSkin(aname:string):boolean;
    procedure DeleteAllThreads;
    procedure ActiveForm(aform:Tform);
    procedure DeleteDeleted;
  public
    Flist:Tlist;
    Mlist:Tlist;
    Dlist:Tlist;
    Threadlist:Tlist;
    active:boolean;
    skinchildform:boolean;
    state:integer;
    menuactive:boolean;
    MDIMax:boolean;
    clienthwnd:Thandle;
    action:integer;
    UpdateData:pointer;
    SBinstall :boolean;
    constructor Create;
    destructor Destroy; override;
    procedure InstallHook;
    function AddForm(aHwnd:THandle):boolean;
    function DeleteForm(aHwnd:THandle):boolean;
    function  GetMenuBg(amenu:Hmenu):Tbitmap;
    procedure UpdateSkinMenu(amenu:Hmenu);
    procedure  FindPopupMenu(amenu:Hmenu);
    procedure  SetMDIMax(b:boolean);
    procedure  SetCaption(b:boolean);
    function  GetMDIChildNum:integer;
    procedure SetAction(acode:integer;Interval:integer=250);
    procedure AddSkinData(adata: Pointer);
    procedure RemoveSkinData(adata: Pointer);
    procedure DeleteSysbtn;
    procedure InstallThread(aThreadID:integer);
    procedure UnInstallThread(aThreadID:integer);
    function initsb(ahwnd:Thandle):boolean;
    function Uninitsb(ahwnd:Thandle):boolean;
    procedure SetMenu;
    procedure DeleteForm2(aHwnd:THandle);
    procedure DeleteForm3;
  end;

//var HookCallback,WndCallBack,WndCallRet : HHOOK;
var  SkinManager:TSkinManage;

function SkinHookCallback(code: integer; wParam: WPARAM; lParam: LPARAM): LRESULT; stdcall;
function SkinHookCallRet(code: integer; wParam: WPARAM; lParam: LPARAM): LRESULT;stdcall;
function SkinHookCBT(code: integer; wParam: WPARAM; lParam: LPARAM): LRESULT; stdcall;
function SkinHookCBT2(code: integer; wParam: WPARAM; lParam: LPARAM): LRESULT; stdcall;

implementation

uses winskinform ,WinSkinData,menus;


function SkinHookCallRet(code: integer; wParam: WPARAM; lParam: LPARAM): LRESULT;
var pwp:PCWPRETSTRUCT;
   s:string;
begin
   if code= HC_ACTION then begin
     pwp:=PCWPRETSTRUCT (lparam);
     case pwp.message of
        WM_DRAWITEM: begin
//              SkinManager.WMDRAWITEM(PDrawItemStruct(pwp.lparam));
           end;
     end;
   end;
   result:=CallNextHookEx( SkinManager.WndCallRet, Code, wParam, lParam );
end;

function SkinHookCallback(code: integer; wParam: WPARAM; lParam: LPARAM): LRESULT;
var pwp:PCWPSTRUCT;
   s:string;
   msg:Tmessage;
begin
   if code= HC_ACTION then begin
     pwp:=PCWPSTRUCT(lparam);
{     if skincanlog then begin
        msg.msg:=pwp.message;
        msg.wparam:=pwp.wparam;
        msg.lparam:=pwp.lparam;
        skinaddlog('Hook:'+msgtostr(msg));
     end; }
     case pwp.message of
        WM_CREATE:SkinManager.AddMenu(pwp.hwnd);
        WM_DESTROY,WM_NCDESTROY:SkinManager.DeleteMenu(pwp.hwnd);
        WM_INITMENU: begin
              skinaddlog('WH_CALLWNDPROC : WM_INITMENU');
              skinmanager.FindPopupMenu(pwp^.wparam);
           end;
{        WM_DRAWITEM: begin
              skinaddlog('WH_CALLWNDPROC : WM_DRAWITEM');
           end;}
     end;
   end;
   result:=CallNextHookEx( SkinManager.WndCallback, Code, wParam, lParam );
end;

function SkinHookCBT(code: integer; wParam: WPARAM; lParam: LPARAM): LRESULT;
var s:string;
   hwnd:Thandle;
   ptr:^CBT_CREATEWND;
   sf: dword;
begin
//message box WM_ACTIVATE TMessageForm
//Dlg ****WM_ACTIVATE #32770 WA_ACTIVE
   if code>=0 then begin
      case code of
        HCBT_ACTIVATE :begin
           if skinmanager.state=skin_creating then
              inc(skinmanager.state);
           hwnd := Thandle(wParam);
             if  SkinManager.addform(hwnd) then begin
             end;
         end;
         HCBT_DESTROYWND : begin
           hwnd := Thandle(wParam);
           SkinManager.DeleteMenu(hwnd);
           //if SkinManager.deleteform(hwnd) then begin
           //end;
         end;
         HCBT_CREATEWND : begin
           hwnd := Thandle(wParam);
           ptr:=pointer(lparam);
           s:= getwindowclassname(hwnd);
//           skinAddlog(format('***HCBT_CREATEWND %s %1x,%1x',[s,hwnd,ptr^.lpcs^.hwndParent]));
           if (s='ScrollBar') and ((ptr^.lpcs^.style and sbs_sizegrip)>0) then begin
              sf:= SkinManager.findskinform(ptr^.lpcs^.hwndParent);
              if sf>0 then begin
                  result:=10;
                  exit;
//                Twinskinform(ptr).addcontrol(hwnd);
//                skinAddlog(format('***Scrollbar %s %1x,%1x',[s,hwnd,ptr^.lpcs^.hwndParent]));
              end;
           end ;
           if s='#32768' then
              SkinManager.AddMenu(hwnd); //don't create scrollbar
         end;
      end;//endcase
   end;    
   result:=CallNextHookEx( SkinManager.HookCallback, Code, wParam, lParam );
end;

function SkinHookCBT2(code: integer; wParam: WPARAM; lParam: LPARAM): LRESULT;
var s:string;
   hwnd:Thandle;
   ptr:^CBT_CREATEWND;
begin
//message box WM_ACTIVATE TMessageForm
//Dlg ****WM_ACTIVATE #32770 WA_ACTIVE
   if code>=0 then begin
      case code of
        HCBT_ACTIVATE :begin
           if skinmanager.state=skin_creating then
              inc(skinmanager.state);
           hwnd := Thandle(wParam);
             if  SkinManager.addform(hwnd) then begin
//               s:='****HCBT_ACTIVATE '+s;
//               skinAddlog(s);
             end;
         end;
         HCBT_DESTROYWND : begin
           hwnd := Thandle(wParam);
           SkinManager.DeleteMenu(hwnd);
           if SkinManager.deleteform(hwnd) then begin
           end;
         end;
         HCBT_CREATEWND : begin
           hwnd := Thandle(wParam);
           ptr:=pointer(lparam);
           s:= getwindowclassname(hwnd);
//           skinAddlog(format('***HCBT_CREATEWND %s %1x,%1x',[s,hwnd,ptr^.lpcs^.hwndParent]));
           if (s='ScrollBar') and (SkinManager.findskinform(ptr^.lpcs^.hwndParent)>0) then begin
//              skinAddlog(format('***Scrollbar %s %1x,%1x',[s,hwnd,ptr^.lpcs^.hwndParent]));
              result:=10;
              exit;
           end ;
           if s='#32768' then
              SkinManager.AddMenu(hwnd); //don't create scrollbar
         end;
      end;//endcase
   end;
   result:=CallNextHookEx( SkinManager.HookCallback, Code, wParam, lParam );
end;

constructor TSkinManage.Create;
begin
   inherited;
   flist:=Tlist.create;
   Mlist:=Tlist.create;
   dlist:=Tlist.create;
   threadlist:=Tlist.create;
   active:=false;
   menuactive:=false;
   MDIMax:=false;
   Timer := TTimer.create(nil);
   timer.Interval:=250;
   timer.Ontimer:=Ontimer;
   timer.enabled:=false;
   SBinstall :=false;
   skinchildform:=false;

   state:=skin_creating;
   SBLib:=0;
//   SBLib := LoadLibrary('C:\MyFile\MySkin\ARTICLE\coolsb_src\coolsb2\Release\coolsb2.dll');
//   SBLib := LoadLibrary('coolsb2.dll');
   pinitapp:=nil;
   sbinstall:=false;
   if SBLib<>0 then begin
    pinitApp:=GetProcAddress(SBLib,'CoolSB_InitializeApp');
    pUninitApp:= GetProcAddress(SBLib,'CoolSB_UninitializeApp');
    pinitSB:=GetProcAddress(SBLib,'InitializeCoolSB');
    pUninitSb:=GetProcAddress(SBLib,'UninitializeCoolSB');
   end;
   if @pinitapp<>nil then
       SBinstall := boolean(pinitapp);
//   installhook;
end;

destructor TSkinManage.Destroy;
begin
   state:=skin_destory;
   Timer.free;
   if HookCallback<>0 then
     UnhookWindowsHookEx( HookCallback );
   if @pUninitapp<>nil then  pUninitapp;
//   UnhookWindowsHookEx( WndCallback );
//   UnhookWindowsHookEx( WndCallRet );
   DeleteAllThreads;
   deleteallforms;
   deleteallmenus;
   dlist.free;
   if (sblib<>0) then 
       FreeLibrary(sblib);
   inherited destroy;
end;

procedure TSkinManage.InstallHook;
var dwThreadID:DWORD;
begin
   winversion:=GetVersion();
   skinaddlog(format('Windows Version %1x',[winversion]));
   skinaddlog(format('Windows Version %1d %1d',[Win32MajorVersion,Win32MinorVersion]));
//   skinaddlog(format('winversion %1x',[winversion]));
   dwThreadID := GetCurrentThreadId;
//   WndCallback :=SetWindowsHookEx( WH_CALLWNDPROC,SkinHookCallback,0,dwThreadID);
//   WndCallRet :=SetWindowsHookEx( WH_CALLWNDPROCRET,SkinHookCallRet,0,dwThreadID);
   HookCallback :=SetWindowsHookEx( WH_CBT,SkinHookCBT,0,dwThreadID);
   skinaddlog(format('ThreadId %1x',[dwThreadId]));
   skinaddlog(format('HookCallback %1x',[HookCallback]));
end;

procedure TSkinManage.InstallThread(aThreadID:integer);
var obj:TSkinThread;
     b: boolean;
     i:integer;
begin
   b:=false;
   for i:= 0 to threadlist.count-1 do begin
      obj:= TSkinThread(threadlist[i]);
      if obj.threadID=aThreadID then begin
        b:=true;
        break;
      end;
   end;
   if b then exit;
   obj:=TSkinThread.create;
   obj.threadID:=aThreadID;
   obj.hook :=SetWindowsHookEx( WH_CBT,SkinHookCBT2,0,aThreadID);
   threadlist.add(obj);
end;

procedure TSkinManage.UnInstallThread(aThreadID:integer);
var obj:TSkinThread;
    i:integer;
begin
   for i:= 0 to threadlist.count-1 do begin
      obj:= TSkinThread(threadlist[i]);
      if obj.threadID=aThreadID then begin
        UnhookWindowsHookEx( obj.hook);
        threadlist.delete(i);
        break;
      end;
   end;
end;

procedure TSkinManage.DeleteAllThreads;
var obj:TSkinThread;
    i:integer;
begin
   for i:= 0 to threadlist.count-1 do begin
      obj:= TSkinThread(threadlist[i]);
      UnhookWindowsHookEx( obj.Hook );
      obj.free;
   end;
   threadlist.clear;
   threadlist.free;
end;


function Tskinmanage.nestedform(ahwnd:Thandle):boolean;
var  style:longword;
     s:string;
     phwnd:Thandle;
begin
   result:=false;
   Style := GetWindowLong( ahwnd, GWL_STYLE );
   if (style and ws_child)=0 then exit;
   phwnd:=getparent(ahwnd);
   s:=lowercase(getwindowclassname(phwnd));
   if s='mdiclient' then exit;
   result:=true;
end;

procedure Tskinmanage.FindSkindata(var adata:pointer;ahwnd:Thandle);
var s:string;

  function FindOnlyThisForm:boolean;
  var i:integer;
      sd:Tskindata;
      sf:Tform;
  begin
     result:=false;
     for i:= 0 to dlist.count-1 do begin
         sd:=Tskindata(dlist.items[i]);
         sf:=Tform(sd.owner);
         if (sd.skinformtype=sfOnlyThisForm) and (sf.handle=ahwnd) then begin
             adata:=sd;
             result:=true;
         end;
     end;
  end;

  function FindData(atype:TSkinFormType):boolean;
  var i:integer;
      sd:Tskindata;
  begin
     result:=false;
     for i:= 0 to dlist.count-1 do begin
         sd:=Tskindata(dlist.items[i]);
         if (sd.skinformtype=atype) then begin
             adata:=sd;
             result:=true;
         end;
     end;
  end;

begin
   if FindOnlyThisForm then exit;
   s:=lowercase(getwindowclassname(ahwnd));
   if ((s='tmessageform') or (s='#32770')) and finddata(sfDialog) then exit;
   if finddata(sfMainform) then exit;
   if dlist.count>0 then adata:=dlist.items[0]
   else adata:=nil;
end;

function TSkinManage.OnBeforeSkin(aname:string):boolean;
var b:boolean;
    i:integer;
    sd:Tskindata;
begin
   b:=true;
   for i:= 0 to dlist.count-1 do begin
       sd:=Tskindata(dlist.items[i]);
       if (sd.skinformtype=sfMainform) then begin
            sd.DoFormSkin(aname,b);
            break;
       end;
   end;
   result:=b;
end;

procedure TSkinManage.ActiveForm(aform:Tform);
var dwstyle:dword;
    b:boolean;
begin
    dwstyle := GetWindowLong( aform.handle, GWL_STYLE );
    b:= (dwstyle and ws_child)>0;
    if aform.formstyle=fsmdichild then b:=false;
    if not aform.Visible then b:=true;
    if not b then addform(aform.handle);
end;

function TSkinManage.AddForm(aHwnd:THandle):boolean;
var aform:TWinskinform;
    atform:TForm;
    r:Trect;
    s:string;
    aptr:pointer;
    adata:Tskindata;
    isskin:integer;
begin
   result:=false;
   if not active then exit;
   isskin:=sendmessage(ahwnd,CN_IsSkined,0,0);
   if isskin=1 then exit;
   DeleteDeleted;
   if findskinform(ahwnd)<>0 then exit;

   atform:=findtform(ahwnd);
   if (not skinchildform) and nestedform(ahwnd) then exit;
   getwindowrect(ahwnd,r);
   offsetrect(r,-r.left,-r.top);
   if r.right*r.bottom=0 then exit;
   if (atform<>nil) and (atform.tag=99) then exit;
   s:=getwindowclassname(ahwnd);
   if s='TApplication' then exit;
   if not OnBeforeSkin(s) then exit;

   FindSkindata(aptr,ahwnd);
   if aptr=nil then exit;

   adata:=Tskindata(aptr);
   if adata.empty then exit;

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美日韩亚洲综合| 91麻豆免费看| 免费高清在线视频一区·| 亚洲一区在线观看视频| 玉米视频成人免费看| 亚洲一二三区视频在线观看| 综合久久国产九一剧情麻豆| 一区二区三区中文字幕| 亚洲午夜久久久久久久久电影院| 亚洲综合清纯丝袜自拍| 性做久久久久久| 日韩电影在线一区二区三区| 看片的网站亚洲| 国产在线播精品第三| 国产91在线看| 色综合天天综合色综合av| 91麻豆国产在线观看| 3d成人h动漫网站入口| 亚洲精品一区在线观看| 中文字幕av不卡| 亚洲国产精品人人做人人爽| 美女视频黄频大全不卡视频在线播放| 久久精品国产99国产精品| 成人app在线| 欧美久久久久久蜜桃| 精品久久久久一区二区国产| 日本一区二区高清| 亚洲成人在线网站| 国产成人8x视频一区二区| 91网站在线播放| 欧美一级二级在线观看| 亚洲欧洲日韩在线| 青娱乐精品在线视频| 久久成人免费网| 色综合咪咪久久| 欧美zozozo| 日韩伦理电影网| 精品无码三级在线观看视频| 91女厕偷拍女厕偷拍高清| 精品福利av导航| 亚洲午夜免费电影| 国产a区久久久| 欧美一区二区久久久| 亚洲精品写真福利| 高清不卡在线观看av| 欧美一区二区三区四区在线观看| 国产精品免费久久久久| 热久久免费视频| 欧美体内she精视频| 1024精品合集| 高清在线成人网| 精品88久久久久88久久久| 亚洲国产精品嫩草影院| 91在线国产福利| 国产日韩精品一区| 国内精品伊人久久久久av一坑| 日本高清不卡视频| 亚洲免费观看高清完整版在线观看 | 国产精品久久久久久久蜜臀| 日韩电影一二三区| 欧美日韩午夜影院| 亚洲综合999| 91同城在线观看| 国产精品理论片| 成人成人成人在线视频| 国产午夜精品福利| 国产精品一区一区三区| 久久综合九色综合97婷婷女人| 蜜臀av性久久久久蜜臀av麻豆| 欧美性猛交一区二区三区精品| 亚洲精选一二三| 欧美三区在线视频| 亚洲成人av在线电影| 欧美老人xxxx18| 免费高清在线视频一区·| 日韩视频在线永久播放| 蜜臀av一区二区在线免费观看| 91精品国产91久久久久久一区二区 | 综合色中文字幕| 国产精品99久久久久久久女警| 亚洲精品在线一区二区| 国产精品自在在线| 国产精品乱码妇女bbbb| 99精品欧美一区二区蜜桃免费| 亚洲免费毛片网站| 欧美精品色综合| 久久99精品久久只有精品| 久久久国产精品麻豆| 成人激情文学综合网| 亚洲午夜久久久久久久久电影网| 在线91免费看| 国产一级精品在线| 亚洲丝袜美腿综合| 91麻豆精品国产91久久久久久久久 | 国产精品系列在线| 色综合久久综合网欧美综合网 | 91精品国产黑色紧身裤美女| 免费精品99久久国产综合精品| 欧美一二三四区在线| 国产乱子伦一区二区三区国色天香| 久久人人超碰精品| 91免费观看视频| 美女脱光内衣内裤视频久久影院| 国产亚洲精品aa午夜观看| 91片在线免费观看| 日本亚洲欧美天堂免费| 国产精品成人免费在线| 欧美伦理电影网| 不卡大黄网站免费看| 日本中文在线一区| 亚洲欧美怡红院| 日韩精品一区二区三区四区视频 | 国精产品一区一区三区mba视频| 国产精品蜜臀av| 91超碰这里只有精品国产| 不卡一区二区在线| 老汉av免费一区二区三区| 一区二区三区在线视频播放| 国产亚洲一区二区三区| 欧美高清性hdvideosex| 91亚洲永久精品| 国产一区二区三区在线观看精品| 亚洲综合图片区| 国产精品久久久久久妇女6080 | 亚洲一区二区精品久久av| 日本一区二区在线不卡| 日韩精品一区二区三区老鸭窝| 色婷婷综合五月| 成人免费黄色大片| 国产一区二区三区免费| 丝袜国产日韩另类美女| 一区二区三区四区在线播放| 国产欧美日韩精品一区| 精品国产凹凸成av人网站| 日韩一区二区视频| 欧美日韩一二区| 欧美视频一二三区| 91蝌蚪porny九色| 91国偷自产一区二区开放时间| 国产成人午夜视频| 蜜桃精品视频在线| 免费日本视频一区| 视频一区二区三区中文字幕| 亚洲美女淫视频| 亚洲香肠在线观看| 欧美日韩在线免费视频| 亚洲永久免费视频| 亚洲人一二三区| 中文字幕一区二区三区四区 | 亚洲成人7777| 亚洲国产中文字幕| 亚洲成a人片在线观看中文| 夜夜精品视频一区二区| 亚洲精品成人少妇| 一区二区三区在线视频观看| 亚洲黄色免费网站| 亚洲午夜在线电影| 日本女人一区二区三区| 男女视频一区二区| 国产一区 二区 三区一级| 国产精品91xxx| 成人国产精品免费观看动漫| 99久久久免费精品国产一区二区 | 亚洲一区二区三区自拍| 午夜欧美大尺度福利影院在线看| 亚洲狠狠爱一区二区三区| 偷拍自拍另类欧美| 国模套图日韩精品一区二区| 粉嫩高潮美女一区二区三区 | 蓝色福利精品导航| 国产999精品久久| 91成人免费在线视频| 91精品国产aⅴ一区二区| ww亚洲ww在线观看国产| 综合久久国产九一剧情麻豆| 亚洲国产美女搞黄色| 久久精品国产99国产| 成人福利电影精品一区二区在线观看| 99re这里只有精品视频首页| 欧美日韩一区二区三区高清| 欧美精品一区视频| 亚洲欧美aⅴ...| 麻豆国产欧美日韩综合精品二区 | 国产日韩欧美高清在线| 一区二区三区在线视频观看| 免费看精品久久片| 成人av免费观看| 日韩天堂在线观看| 亚洲日本在线天堂| 国产美女视频一区| 欧美日韩综合在线| 中文在线免费一区三区高中清不卡| 亚洲网友自拍偷拍| 国产91色综合久久免费分享| 欧美日本精品一区二区三区| 欧美国产欧美综合| 麻豆国产精品777777在线| 在线亚洲欧美专区二区| 久久综合一区二区| 亚洲福利视频导航|