;Autor: Fluid Byte EnableExplicit Define EventID Structure FRAME3DEX lpPrevFunc.i clrText.l bThemeXP.b EndStructure Procedure Frame3DExProc(hWnd,uMsg,wParam,lParam) Protected *frmex.FRAME3DEX, hDC, ps.PAINTSTRUCT, Title.s, fts.SIZE, wrc.RECT, lpBuffer, hThemeButton *frmex = GetWindowLongPtr_(hwnd,#GWL_USERDATA) Select uMsg Case #WM_NCDESTROY FreeMemory(*frmex) ProcedureReturn 0 Case #WM_PAINT hdc = BeginPaint_(hwnd,ps) SelectObject_(hdc,SendMessage_(hwnd,#WM_GETFONT,0,0)) Title = GetGadgetText(GetDlgCtrlID_(hwnd)) GetTextExtentPoint32_(hdc,Title,Len(Title),fts) GetClientRect_(hWnd,wrc) SetRect_(wrc,wrc\left,wrc\top + fts\cy / 2,wrc\right,wrc\bottom) If OSVersion() >= #PB_OS_Windows_XP And IsThemeActive_() And IsAppThemed_() And *frmex\bThemeXP lpBuffer = AllocateMemory(14) : PokeS(lpBuffer,"Button",-1,#PB_Unicode) hThemeButton = OpenThemeData_(WindowID(0),lpBuffer) DrawThemeBackground_(hThemeButton,hdc,4,1,wrc,0) CloseThemeData_(hThemeButton) FreeMemory(lpBuffer) Else DrawEdge_(hdc,wrc,#EDGE_ETCHED,#BF_RECT) EndIf If GetWindowColor(0) > -1 SetBkColor_(hdc,GetWindowColor(0)) Else SetBkColor_(hdc,GetSysColor_(#COLOR_3DFACE)) EndIf SetTextColor_(hdc,*frmex\clrText) TextOut_(hdc,9,0,Title,Len(Title)) EndPaint_(hwnd,ps) ProcedureReturn 0 EndSelect ProcedureReturn CallWindowProc_(*frmex\lpPrevFunc,hWnd,uMsg,wParam,lParam) EndProcedure Procedure Frame3DGadgetEx(Gadget,X,Y,Width,Height,Text.s,Color.l=0) Protected *frmex.FRAME3DEX, HINSTANCE, hResData, Length Protected dvi.DLLVERSIONINFO\cbsize = SizeOf(DLLVERSIONINFO) Frame3DGadget(Gadget,X,Y,Width,Height,Text) *frmex = AllocateMemory(SizeOf(FRAME3DEX)) *frmex\lpPrevFunc = SetWindowLongPtr_(GadgetID(Gadget),#GWL_WNDPROC,@Frame3DExProc()) *frmex\clrText = Color HINSTANCE = OpenLibrary(#PB_Any,"comctl32.dll") If HINSTANCE CallFunction(HINSTANCE,"DllGetVersion",@dvi) If dvi\dwMajorVersion = 6 : *frmex\bThemeXP = #True : EndIf CloseLibrary(HINSTANCE) EndIf SetWindowLongPtr_(GadgetID(Gadget),#GWL_USERDATA,*frmex) ProcedureReturn GadgetID(Gadget) EndProcedure SetGadgetFont(#PB_Default,LoadFont(0,"Arial",9)) If OpenWindow(0,0,0,500,400,"Window",#PB_Window_SystemMenu|#PB_Window_ScreenCentered) Frame3DGadgetEx(0,10,5,200,90,"Frame3DGadgetEx #1",#Red) Frame3DGadgetEx(1,10,100,200,90,"Frame3DGadgetEx #2",RGB(40,180,70)) Frame3DGadgetEx(2,10,195,200,90,"Frame3DGadgetEx #3",#Blue) Repeat EventID=WaitWindowEvent() If EventID = #PB_Event_CloseWindow End EndIf ForEver EndIf