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

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

?? winskinmenu.pas

?? delphi控件
?? PAS
字號:
unit WinSkinMenu;

{.$define menutest}
{$WARNINGS OFF}
{$HINTS OFF}
{$RANGECHECKS OFF}

interface

uses windows,Messages,SysUtils,Classes,Graphics,
     WinSkinData,controls,Forms;

const c_menuprop = 'WinSkinPopMenu';

Type
  TWinSkinPopMenu = class(Tobject)
  protected
    FPrevWndProc: Pointer;
    FObjectInst: Pointer;
    done:boolean;
    procedure WinWndProc(var aMsg: TMessage);
    procedure Default(Var Msg: TMessage);
    procedure AddLog(Msg: TMessage);
    procedure WMPrint(var Msg: Tmessage);
    procedure WMPrintClient(var Msg: Tmessage);
    procedure UpdateMenu(var Msg: Tmessage);
    procedure NcPaint(var Msg: Tmessage);
    procedure WMERASEBKGND(var Msg: Tmessage);
  public
    hwnd:Thandle;
    fsd:TSkindata;
    SelIndex:integer;
    MenuBg:Tbitmap;
    hmenu :Hmenu;
    crop:boolean;
    clientRgn : hRgn;
    ownerdraw : boolean;//
    constructor Create;
    destructor Destroy; override;
    procedure InitSkin(ahwnd:Thandle;afsd:Tskindata;amenu:Hmenu);
    procedure UnSubClass;
  end;

var newskinmenu:TWinSkinPopMenu;

implementation

uses Winskinform,winskindlg;

constructor TWinSkinPopMenu.Create;
begin
   inherited;
   SelIndex:=-1;
   MenuBg:=Tbitmap.create;
   hmenu:=0;
   fobjectinst:=nil;
end;

destructor TWinSkinPopMenu.Destroy;
begin
   inherited destroy;
   MenuBg.free;
end;

procedure TWinSkinPopMenu.InitSkin(ahwnd:Thandle;afsd:Tskindata;amenu:Hmenu);
var rc,r1:Trect;
    temp:Tbitmap;
begin
    hwnd:=ahwnd;
    fsd:=afsd;
    hmenu:=amenu;
//    SetProp(ahwnd, c_menuprop, Cardinal(self));
    FObjectInst := MakeObjectInstance(WinWndProc);
    FPrevWndProc := Pointer(GetWindowLong(hwnd,GWL_WNDPROC));
    SetWindowLong(hwnd, GWL_WNDPROC,LongInt(FObjectInst));
//    SetProp(ahwnd, MakeIntAtom(ControlAtom), THandle(Self));
    ownerdraw :=false;
end;

procedure TWinSkinPopMenu.UnSubClass;
begin
     if fobjectinst<>nil then begin
         if crop then begin
           DeleteObject(clientRgn);
         end;
         SetWindowLong(hwnd, GWL_WNDPROC,LongInt(FPrevWndProc));
         FreeObjectInstance(FObjectInst);
//         RemoveProp(hwnd, MakeIntAtom(ControlAtom));
//         RemoveProp(hwnd, c_menuprop);
         MenuBg.assign(nil);
         fobjectinst:=nil;
     end;
end;

procedure TWinSkinPopMenu.AddLog(Msg: TMessage);
var s:string;
begin
  s:=MsgtoStr(Msg);
  if s='' then exit;
  if s='' then
      s:=format('%4.0x(%4.0x,%04x,%04x,%04x)',[hwnd,msg.msg,msg.wparam,msg.lparam,msg.result]);
  s:=format('Menu hook:%4x %s',[hwnd,s]);
  fsd.DoDebug(s);
  //skinaddlog(s);
end;

procedure TWinSkinPopMenu.Default(Var Msg: TMessage);
begin
  msg.result:=CallWindowProc(FPrevWndProc,hwnd,Msg.msg,msg.WParam,msg.LParam);
end;

procedure TWinSkinPopMenu.WinWndProc(var aMsg: TMessage);
var Old: boolean;
    s:string;
begin
  {$IFDEF menutest}
    addlog(aMsg);
  {$ENDIF}
  if aMsg.Msg=CN_IsSkined then begin
     amsg.result := 1;
     exit;
  end;

  if not skinmanager.active then begin
    default(amsg);
    exit;
  end;

  done:=false;
  if aMsg.Msg=WM_DESTROY then begin
       UnSubClass;
  end;
  //create bk in  WM_print, ignore WM_ERASEBKGND
  if true then begin
     case aMsg.Msg of
        WM_print:  WMPrint(amsg);

//      WM_printclient:WMPrintclient(amsg);
//      WM_Ncpaint: if ((Win32Platform = VER_PLATFORM_WIN32_NT) and (Win32MajorVersion >= 5) and (Win32MinorVersion >= 1)) or
//      WM_Ncpaint:  Ncpaint(amsg);

       WM_Ncpaint: if (Win32Platform = VER_PLATFORM_WIN32_NT) or
                 (winversion >= $80000000) then Ncpaint(amsg);
       WM_ERASEBKGND:// amsg.Result:=1;
         if (winversion < $80000000) then WMERASEBKGND(amsg);
      else default(amsg);
      end;
  end else default(amsg);
end;

procedure TWinSkinPopMenu.UpdateMenu(var Msg: Tmessage);
var rc:Trect;
begin
   if (SelIndex <> msg.wparam) then begin
//        skinaddlog('menu hook: $1e5');
        default(msg);
        GetClientRect(hwnd,rc);
        selindex:=msg.wparam;
        InvalidateRect(hwnd,@rc,FALSE);
        done:=true;
   end;
end;

procedure TWinSkinPopMenu.WMERASEBKGND(var Msg: Tmessage);
var rc, R1: TRect;
    DC: HDC;
    temp:Tbitmap;
begin
   if not (xoMenuBG in fsd.Options) then begin
       default(msg);
   end;
   msg.result:=1;
   exit;
{   if (fsd.empty) or(fsd.MenuItemBG=nil)
       or (fsd.MenuItemBG.map.empty)
       or (not ownerdraw) then begin
       default(msg);
       msg.result:=1;
       exit;
   end;  }

   default(msg);

   GetWindowRect(hwnd, rc);
   r1:=rc;
   OffsetRect(r1,-r1.left,-r1.top);
   DC := GetWindowDC(hwnd);
//   fsd.DoDebug('***WMERASEBKGND');

   if MenuBg.empty then begin

   temp:=GetHMap(r1,fsd.MenuItemBG.map,fsd.MenuItemBG.r,1,1,fsd.MenuItemBG.Tile);
   MenuBg.assign(temp);
   temp.free;
   end;
   if hmenu=0 then newskinmenu:=self;

//   BitBlt(msg.wParam,rc.left ,rc.top,rc.right-rc.left,rc.bottom-rc.Top,
//                 MenuBg.Canvas.Handle ,0 ,0 ,Srccopy);

//   DrawRect2(msg.wParam,rc,fsd.MenuItemBG.map,fsd.MenuItemBG.r,1,1,
//         0,fsd.MenuItemBG.Tile);
   BitBlt(DC,rc.left ,rc.top,rc.right-rc.left,rc.bottom-rc.top,
                 MenuBg.Canvas.Handle ,0 ,0 ,Srccopy);
   ReleaseDC(0, DC);
   msg.result:=1;
end;

{procedure TWinSkinPopMenu.WMPrint(var Msg: Tmessage);
var rc, R1: TRect;
    DC: HDC;
    clientRgn : hRgn;
    temp:Tbitmap;
begin
   if fsd.empty or (fsd.MenuItemBG=nil) or (fsd.MenuItemBG.map.empty) then begin
      default(msg);
      exit;
   end;
//   default(msg);
   if hmenu=0 then newskinmenu:=self;
   if GetWindowRect(hwnd, rc) then begin
     OffsetRect(rc,-rc.left,-rc.top);
     r1:=rc;
     InflateRect(r1,-3,-3);

     clientRgn :=CreateRectRgn(r1.left,r1.top,r1.right,r1.bottom);
     temp:=GetHMap(rc,fsd.MenuItemBG.map,fsd.MenuItemBG.r,1,1,fsd.MenuItemBG.Tile);
     MenuBg.assign(temp);

     SetBkMode(temp.canvas.handle,TRANSPARENT);
     SelectClipRgn(temp.canvas.handle, clientRgn);
     msg.result:=CallWindowProc(FPrevWndProc,hwnd,Msg.msg,temp.canvas.handle,msg.LParam);
     SelectClipRgn(temp.canvas.handle, 0);

     BitBlt(msg.wParam,rc.left ,rc.top,rc.right-rc.left,rc.bottom-rc.Top,
                 temp.Canvas.Handle ,0 ,0 ,Srccopy);
     DeleteObject(clientRgn);
     temp.free;
   end else  default(msg);
end;}

procedure TWinSkinPopMenu.WMPrint(var Msg: Tmessage);
var rc, R1: TRect;
    DC: HDC;
    clientRgn : hRgn;
    temp:Tbitmap;
    OldMode: integer;
begin
   if fsd.empty or (fsd.MenuItemBG=nil) or (fsd.MenuItemBG.map.empty) then begin
      default(msg);
      exit;
   end;
//   default(msg);
   if hmenu=0 then newskinmenu:=self;
   if GetWindowRect(hwnd, rc) then begin
     OffsetRect(rc,-rc.left,-rc.top);
     r1:=rc;
     InflateRect(r1,-3,-3);

     clientRgn :=CreateRectRgn(r1.left,r1.top,r1.right,r1.bottom);
     temp:=GetHMap(rc,fsd.MenuItemBG.map,fsd.MenuItemBG.r,1,1,fsd.MenuItemBG.Tile);
     MenuBg.assign(temp);
     temp.free;
     BitBlt(msg.wParam,rc.left ,rc.top,rc.right-rc.left,rc.bottom-rc.Top,
                 MenuBg.Canvas.Handle ,0 ,0 ,Srccopy);

     OldMode := SetBkMode(msg.wparam, TRANSPARENT);
     SelectClipRgn(msg.wParam, clientRgn);
     msg.result:=CallWindowProc(FPrevWndProc,hwnd,Msg.msg,msg.wparam,msg.LParam);
     SelectClipRgn(msg.wParam, 0);
     DeleteObject(clientRgn);
     SetBkMode(msg.wparam, OldMode);
   end else  default(msg);
end;

{procedure TWinSkinPopMenu.WMPrint(var Msg: Tmessage);
var rc, R1: TRect;
    DC: HDC;
    clientRgn : hRgn;
    temp:Tbitmap;
    OldMode: integer;
begin
   if fsd.empty or (fsd.MenuItemBG=nil) or (fsd.MenuItemBG.map.empty) then begin
      default(msg);
      exit;
   end;
   if hmenu=0 then newskinmenu:=self;
   if GetWindowRect(hwnd, rc) then begin

     OffsetRect(rc,-rc.left,-rc.top);
     r1:=rc;
     InflateRect(r1,-3,-3);

     temp:=GetHMap(rc,fsd.MenuItemBG.map,fsd.MenuItemBG.r,1,1,fsd.MenuItemBG.Tile);
     MenuBg.assign(temp);
     temp.free;

     default(msg);
     if ownerdraw then begin
        ExcludeClipRect(msg.wParam,rc.left+3,rc.top+3,rc.right-3,rc.bottom-3);
        BitBlt(msg.wParam,rc.left ,rc.top,rc.right-rc.left,rc.bottom-rc.Top,
                 MenuBg.Canvas.Handle ,0 ,0 ,Srccopy);
        SelectClipRgn(msg.wParam, 0);
     end;
   end else  default(msg);
end;}

{procedure TWinSkinPopMenu.WMPrint(var Msg: Tmessage);
var rc, R1: TRect;
    DC: HDC;
    clientRgn : hRgn;
    temp:Tbitmap;
begin
   if fsd.empty then exit;
   if (fsd.MenuItemBG=nil) or (fsd.MenuItemBG.map.empty) then exit;

//   default(msg);
   GetWindowRect(hwnd, rc);
   OffsetRect(rc,-rc.left,-rc.top);

   r1:=rc;
   InflateRect(r1,-3,-3);
   clientRgn :=CreateRectRgn(r1.left,r1.top,r1.right,r1.bottom);

   temp:=GetHMap(rc,fsd.MenuItemBG.map,fsd.MenuItemBG.r,1,1,fsd.MenuItemBG.Tile);
   MenuBg.assign(temp);
   temp.free;
   if hmenu=0 then newskinmenu:=self;
   temp:=Tbitmap.create;
   temp.width:=rc.right;
   temp.height:=rc.bottom;
   temp.canvas.brush.color:=clFuchsia;
   temp.canvas.fillrect(rc);
//   BitBlt(msg.wParam,rc.left ,rc.top,rc.right-rc.left,rc.bottom-rc.Top,
//                 MenuBg.Canvas.Handle ,0 ,0 ,Srccopy);

   SelectClipRgn(temp.canvas.handle, clientRgn);

//   msg.result:=CallWindowProc(FPrevWndProc,hwnd,Msg.msg,msg.wparam,msg.LParam);
   msg.result:=CallWindowProc(FPrevWndProc,hwnd,Msg.msg,temp.canvas.handle,msg.LParam);
   BitBlt(msg.wParam,rc.left ,rc.top,rc.right-rc.left,rc.bottom-rc.Top,
                 temp.Canvas.Handle ,0 ,0 ,Srccopy);

   SelectClipRgn(temp.canvas.handle, 0);
   DeleteObject(clientRgn);
   temp.free;
   done:=true;
end;}

procedure TWinSkinPopMenu.NcPaint(var Msg: Tmessage);
var rc, R1: TRect;
    DC: HDC;
    clientRgn : hRgn;
    temp:Tbitmap;
begin
   if fsd.empty or (fsd.MenuItemBG=nil) or (fsd.MenuItemBG.map.empty) then begin
     default(msg);
     exit;
   end;

   if (Win32Platform = VER_PLATFORM_WIN32_NT) and (Win32MajorVersion >= 5) and (Win32MinorVersion > 1) then
       Dc := GetWindowDC(hwnd) 
   else
       Dc := GetDCEx(hwnd, msg.WParam, DCX_WINDOW or DCX_INTERSECTRGN or $10000 );
//   Dc := GetDCEx(hwnd, msg.WParam, DCX_WINDOW or DCX_INTERSECTRGN or  $10000 );
   GetWindowRect(hwnd, rc);
   r1:=rc;
   InflateRect(r1,-3,-3);
   OffsetRect(rc,-rc.left,-rc.top);

   temp:=GetHMap(rc,fsd.MenuItemBG.map,fsd.MenuItemBG.r,1,1,fsd.MenuItemBG.Tile);
   MenuBg.assign(temp);
   temp.free;
   if hmenu=0 then newskinmenu:=self;

   BitBlt(dc,rc.left ,rc.top,rc.right-rc.left,rc.top+3,
                 MenuBg.Canvas.Handle ,0 ,0 ,Srccopy);
   StretchBlt(dc,rc.left ,rc.bottom-3,rc.right-rc.left,rc.bottom,
     MenuBg.Canvas.Handle ,rc.left ,rc.bottom-3,rc.right-rc.left,rc.bottom,Srccopy);
   StretchBlt(dc,rc.left,rc.top+3,rc.left+3,rc.bottom-3,
     MenuBg.Canvas.Handle,rc.left,rc.top+3,rc.left+3,rc.bottom-3,Srccopy);
   StretchBlt(dc,rc.right-3,rc.top+3,rc.right,rc.bottom,
     MenuBg.Canvas.Handle ,rc.right-3,rc.top+3,rc.right,rc.bottom,Srccopy);

   BitBlt(dc,rc.left ,rc.top,rc.right-rc.left,rc.bottom-rc.top,
                 MenuBg.Canvas.Handle ,0 ,0 ,Srccopy);
//   fsd.DoDebug(format('NCPaint %1d %1d',[rc.right,rc.bottom]));
   ReleaseDC(hwnd, DC);
end;

{procedure TWinSkinPopMenu.WMPrintClient(var Msg: Tmessage);
var rc, R1: TRect;
    DC: HDC;
    temp:Tbitmap;
    c:Tcolor;
begin
   if fsd.empty then exit;
   if (fsd.MenuItemBG=nil) or (fsd.MenuItemBG.map.empty) then exit;

   GetWindowRect(hwnd, rc);
   InflateRect(rc,-3,-3);
   OffsetRect(rc,-rc.left,-rc.top);

   temp:=Tbitmap.create;
   temp.width:=rc.right;
   temp.height:=rc.bottom;
   c:=GetSysColor(COLOR_MENU);
   temp.canvas.brush.color:=c;
   SetBkMode(temp.canvas.handle,TRANSPARENT);
   temp.canvas.fillrect(rc);
   msg.result:=CallWindowProc(FPrevWndProc,hwnd,Msg.msg,temp.canvas.handle,msg.LParam);
   DrawTranmap(msg.wParam,rc,temp,c);
   temp.free;
   done:=true;
end;}

procedure TWinSkinPopMenu.WMPrintClient(var Msg: Tmessage);
var rc, R1: TRect;
    DC: HDC;
    c:Tcolor;
begin
   default(msg);
   if fsd.empty then exit;
   if (fsd.MenuItemBG=nil) or (fsd.MenuItemBG.map.empty) then exit;

   if GetWindowRect(hwnd, rc) then begin
     ExcludeClipRect(msg.wParam,rc.left+3,rc.top+3,rc.right-3,rc.bottom-3);
     BitBlt(msg.wParam,rc.left ,rc.top,rc.right-rc.left,rc.bottom-rc.Top,
                 MenuBg.Canvas.Handle ,0 ,0 ,Srccopy);
     SelectClipRgn(msg.wParam, 0);
   end;
end;

end.

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
精品福利一二区| 欧美国产欧美综合| 亚洲精品一区二区三区在线观看| 久久久亚洲高清| 一区二区在线观看视频| 久久99久久99小草精品免视看| www.爱久久.com| 91精品国产色综合久久| 国产精品国产馆在线真实露脸| 日韩高清在线不卡| 色婷婷久久久综合中文字幕| 久久伊人中文字幕| 五月激情综合婷婷| 欧洲精品一区二区三区在线观看| 国产日韩欧美高清| 麻豆免费看一区二区三区| 日本高清免费不卡视频| 中文字幕成人在线观看| 国产真实乱偷精品视频免| 欧美一区二区三区视频在线观看 | 在线一区二区三区| 国产亚洲美州欧州综合国| 毛片一区二区三区| 884aa四虎影成人精品一区| 亚洲一线二线三线久久久| 成人福利视频在线看| 国产午夜精品一区二区三区视频 | 成人av动漫在线| www激情久久| 国产自产高清不卡| 久久久久一区二区三区四区| 蜜臀久久久久久久| 日韩视频永久免费| 韩国一区二区三区| 国产调教视频一区| 国产成人精品亚洲777人妖| 精品国产乱码久久久久久久| 激情综合五月婷婷| 久久久不卡网国产精品一区| 国产专区综合网| 中文一区一区三区高中清不卡| 粉嫩aⅴ一区二区三区四区五区| 久久久国产综合精品女国产盗摄| 国产成人夜色高潮福利影视| 日本一区二区三区四区| 91免费国产在线观看| 亚洲精品中文在线| 欧美精品v日韩精品v韩国精品v| 午夜精品一区二区三区三上悠亚| 91精品黄色片免费大全| 精品一区二区三区不卡| 久久精品欧美一区二区三区不卡 | 免费黄网站欧美| 精品免费一区二区三区| 国产乱一区二区| 国产精品国产三级国产aⅴ中文 | 91视频在线观看免费| 亚洲一区二三区| 欧美成人女星排行榜| 国产成人免费视频网站 | 国产日本欧洲亚洲| 91麻豆高清视频| 婷婷亚洲久悠悠色悠在线播放| 日韩欧美国产综合一区 | 国产精品九色蝌蚪自拍| 欧美色爱综合网| 精品一区二区三区久久久| 日韩一区在线看| 欧美一区二视频| 丰满亚洲少妇av| 亚洲第一成人在线| 久久久久国产精品麻豆| 91亚洲午夜精品久久久久久| 日韩国产欧美在线观看| 国产精品嫩草影院av蜜臀| 欧美美女喷水视频| 成人影视亚洲图片在线| 五月天久久比比资源色| 亚洲国产精华液网站w| 7777精品伊人久久久大香线蕉完整版| 美女尤物国产一区| 亚洲综合999| 中文一区在线播放| 精品国产乱码久久久久久久久| 色婷婷久久综合| 盗摄精品av一区二区三区| 日本vs亚洲vs韩国一区三区二区| 亚洲欧美激情在线| 国产精品入口麻豆九色| 欧美一级xxx| 欧美色手机在线观看| 国产高清精品在线| 免费成人在线播放| 日韩黄色小视频| 一二三四社区欧美黄| 国产欧美一区二区精品性色| 日韩欧美一级精品久久| 欧美欧美欧美欧美| 欧美色图片你懂的| 91首页免费视频| 成人动漫一区二区三区| 国产一区二区免费视频| 蜜桃av一区二区在线观看| 国产乱人伦偷精品视频不卡 | 91国偷自产一区二区三区观看| 国产一区二区精品久久| 精品综合久久久久久8888| 视频一区视频二区在线观看| 亚洲制服欧美中文字幕中文字幕| 国产精品你懂的在线| 国产免费久久精品| 国产精品乱码妇女bbbb| 欧美国产日韩亚洲一区| 久久精品人人做人人综合| 久久亚洲春色中文字幕久久久| 日韩女优制服丝袜电影| 欧美第一区第二区| 精品黑人一区二区三区久久| 欧美一区二区三区思思人| 日韩一级视频免费观看在线| 欧美一卡在线观看| 26uuu另类欧美亚洲曰本| 久久精品亚洲乱码伦伦中文| 国产亚洲欧美在线| 国产精品毛片a∨一区二区三区| 中文天堂在线一区| 亚洲色图视频网| 亚洲一区二区三区四区在线免费观看| 亚洲尤物视频在线| 视频一区欧美精品| 国产一区二区久久| 91蜜桃在线观看| 91网站最新网址| 欧美猛男男办公室激情| 欧美一区二区三区在线观看视频| 日韩欧美亚洲一区二区| 久久久精品国产免费观看同学| 亚洲欧洲在线观看av| 亚洲五码中文字幕| 久久精品久久99精品久久| 国内久久精品视频| 色综合天天在线| 欧美一级在线免费| 中文字幕国产一区二区| 亚洲一区在线视频| 久久精品国产77777蜜臀| 国产99久久久精品| 欧美日韩免费观看一区三区| 欧美va亚洲va在线观看蝴蝶网| 国产日韩欧美激情| 午夜久久久久久久久| 国产成人av一区二区三区在线| 91香蕉视频在线| 日韩写真欧美这视频| 日韩毛片在线免费观看| 蜜臀精品一区二区三区在线观看| 国产不卡在线播放| 在线成人小视频| 国产精品无码永久免费888| 亚洲综合图片区| 高清久久久久久| 91精品在线麻豆| 亚洲欧洲三级电影| 国内精品伊人久久久久av一坑| 色av一区二区| 久久精品一区八戒影视| 日韩成人免费看| 91传媒视频在线播放| 国产色产综合色产在线视频| 天堂午夜影视日韩欧美一区二区| 国产91在线看| 欧美r级在线观看| 亚洲va欧美va人人爽| 制服丝袜日韩国产| 一区二区三区免费| 粉嫩av亚洲一区二区图片| 欧美一级久久久| 亚洲第一成人在线| 在线国产电影不卡| 18成人在线视频| 国产成人免费视频网站高清观看视频| 欧美一区二区三区视频免费播放| 一区二区欧美精品| 91在线无精精品入口| 国产婷婷色一区二区三区| 经典三级在线一区| 欧美一二三四区在线| 日韩国产精品久久| 欧美美女一区二区三区| 亚洲午夜电影在线| 欧美在线观看一区二区| 玉足女爽爽91| 色综合天天狠狠| 亚洲男人天堂一区| 91影视在线播放| 亚洲日本在线a| 91视频在线观看| 亚洲一区二区在线观看视频 | 欧美一区二区视频观看视频| 午夜精品免费在线|