亚洲欧美第一页_禁久久精品乱码_粉嫩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一区二区三区免费野_久草精品视频
在线综合视频播放| 亚洲第一在线综合网站| 亚洲国产精品自拍| 国产精品综合一区二区三区| 欧美性高清videossexo| 国产精品青草综合久久久久99| 亚洲va欧美va人人爽午夜 | 国产日产亚洲精品系列| 亚洲国产精品一区二区www在线| 国产在线精品视频| 日韩欧美国产综合一区| 亚洲第一av色| 欧美亚洲国产怡红院影院| 中文字幕在线一区| 国产a级毛片一区| 精品国产91九色蝌蚪| 日韩在线a电影| 欧美视频一区二区三区四区| 亚洲视频你懂的| 色偷偷久久人人79超碰人人澡| 精品久久久影院| 日韩高清不卡一区二区三区| 精品视频一区二区不卡| 亚洲欧美视频在线观看| eeuss鲁片一区二区三区| 国产精品污www在线观看| 国产精品69毛片高清亚洲| 欧美mv日韩mv国产网站app| 免费的成人av| 日韩三级伦理片妻子的秘密按摩| 亚洲成人一区在线| 欧美视频一区二区三区四区| 亚洲成在人线免费| 在线播放中文一区| 奇米精品一区二区三区在线观看| 宅男噜噜噜66一区二区66| 日韩av一二三| 久久综合国产精品| 国产黄色精品网站| 国产精品国产三级国产普通话三级 | 成人一级片网址| 国产精品美女视频| 色综合久久综合网欧美综合网| 亚洲欧美国产77777| 91黄色激情网站| 日韩高清在线观看| 久久综合九色综合97婷婷 | 国产日本欧洲亚洲| av激情成人网| 亚洲第一精品在线| 欧美精品一区二区三区四区 | 乱一区二区av| 国产日韩精品久久久| 26uuu国产一区二区三区| 国产精品18久久久久久久久| 中文字幕日韩一区| 欧美三级电影一区| 国产在线视视频有精品| 中文字幕亚洲精品在线观看| 欧美日韩精品久久久| 久久99精品国产麻豆不卡| 国产精品三级电影| 欧美日韩午夜精品| 狠狠色丁香婷婷综合| 亚洲欧美日韩一区二区| 日韩欧美精品三级| 99热这里都是精品| 男人操女人的视频在线观看欧美 | 日韩欧美国产精品| www.欧美亚洲| 亚洲国产日韩在线一区模特| 精品久久久影院| 色伊人久久综合中文字幕| 美女看a上一区| 亚洲免费在线看| 亚洲精品一区在线观看| 欧美在线观看视频在线| 国产精品1区二区.| 免费观看成人av| 一区二区三区国产精品| 久久久久久久久久久久久久久99 | 五月激情综合婷婷| 国产精品嫩草久久久久| 精品久久一二三区| 欧美日韩精品欧美日韩精品一综合| 国产91丝袜在线观看| 美腿丝袜在线亚洲一区| 亚洲一区二区三区四区不卡| 欧美激情综合在线| 亚洲精品在线电影| 欧美久久久久久久久| 91首页免费视频| 成人一区二区视频| 黄页视频在线91| 男女激情视频一区| 午夜精品一区二区三区免费视频| 国产精品毛片a∨一区二区三区| 欧美一区二区免费| 欧美人与性动xxxx| 欧美午夜寂寞影院| 色婷婷久久综合| 91在线视频免费观看| 国产麻豆精品久久一二三| 久久成人综合网| 免费观看91视频大全| 日韩电影免费一区| 日韩精品午夜视频| 日韩在线一区二区| 日本va欧美va瓶| 日韩va欧美va亚洲va久久| 午夜久久电影网| 亚洲精品免费电影| 一区二区三区蜜桃| 亚洲一区在线观看网站| 亚洲制服丝袜av| 亚洲影院理伦片| 日韩精品电影在线| 麻豆freexxxx性91精品| 久久国产人妖系列| www.激情成人| 成人h动漫精品一区二区| 成人h版在线观看| 99vv1com这只有精品| 日本国产一区二区| 欧美日韩一区二区欧美激情| 欧美色欧美亚洲另类二区| 欧美日韩视频在线观看一区二区三区 | 久久99九九99精品| 国产乱一区二区| 成人手机电影网| 日本精品免费观看高清观看| 欧美视频自拍偷拍| 欧美刺激午夜性久久久久久久| 精品粉嫩超白一线天av| 国产精品久久久久久久第一福利| 一区二区视频在线| 日韩一区精品视频| 国产乱码字幕精品高清av | 一区二区三区丝袜| 天堂久久一区二区三区| 国产自产视频一区二区三区| 国产v综合v亚洲欧| 欧美性生活一区| 2020国产成人综合网| 国产精品电影一区二区| 亚洲电影激情视频网站| 久久国产精品99精品国产| 99久久久久久| 日韩一二在线观看| 亚洲日本乱码在线观看| 免费成人结看片| 97国产一区二区| 精品久久五月天| 亚洲男人电影天堂| 韩国午夜理伦三级不卡影院| 91麻豆精东视频| xfplay精品久久| 亚洲午夜三级在线| 国产精品1区2区3区在线观看| 欧美三级三级三级| 国产精品另类一区| 日韩国产在线观看一区| 91在线你懂得| 久久精品视频一区二区| 亚洲成人免费av| 91亚洲精品久久久蜜桃网站 | 欧美日精品一区视频| 国产亚洲欧美激情| 奇米在线7777在线精品| 91小视频在线观看| 亚洲综合在线五月| 国产成人精品一区二区三区四区 | 精品久久久久99| 一区二区三区免费在线观看| 福利91精品一区二区三区| 日韩欧美电影在线| 亚洲午夜在线视频| 色偷偷久久一区二区三区| 国产清纯在线一区二区www| 青娱乐精品视频| 欧美日韩不卡一区二区| 亚洲视频一区二区在线| 顶级嫩模精品视频在线看| 精品国产乱码久久久久久免费| 五月天精品一区二区三区| 色老汉一区二区三区| 国产精品入口麻豆原神| 国产福利一区二区三区视频在线| 日韩亚洲欧美成人一区| 爽爽淫人综合网网站| 欧美日韩中文精品| 亚洲一卡二卡三卡四卡 | 成人aaaa免费全部观看| 久久精品亚洲精品国产欧美kt∨| 日韩经典中文字幕一区| 欧美男生操女生| 午夜精品久久久久久久久久久 | 国产一区二区日韩精品| 日韩一区二区影院| 久久精品国产精品亚洲综合|