;{ pb intern struct CompilerIf Defined(PB_GadgetVT, #PB_Structure) = #False Structure PB_GadgetVT GadgetType.l SizeOf.l GadgetCallback.l FreeGadget.l GetGadgetState.l SetGadgetState.l GetGadgetText.l SetGadgetText.l AddGadgetItem2.l AddGadgetItem3.l RemoveGadgetItem.l ClearGadgetItemList.l ResizeGadget.l CountGadgetItems.l GetGadgetItemState.l SetGadgetItemState.l GetGadgetItemText.l SetGadgetItemText.l OpenGadgetList2.l GadgetX.l GadgetY.l GadgetWidth.l GadgetHeight.l HideGadget.l AddGadgetColumn.l RemoveGadgetColumn.l GetGadgetAttribute.l SetGadgetAttribute.l GetGadgetItemAttribute2.l SetGadgetItemAttribute2.l SetGadgetColor.l GetGadgetColor.l SetGadgetItemColor2.l GetGadgetItemColor2.l SetGadgetItemData.l GetGadgetItemData.l EndStructure CompilerEndIf CompilerIf Defined(PB_Gadget, #PB_Structure) = #False Structure PB_Gadget Gadget.l *VT.PB_GadgetVT UserData.l OldCallback.l Daten.l[4] EndStructure Structure PB_Panel_User_Data user_data.l forecolor.l backcolor.l static_callback.l EndStructure CompilerEndIf ;} Declare PB_GetPanelStaticItem(*gadget.PB_Gadget ,item) Declare PB_GetGadgetItemData (*gadget.PB_Gadget ,item) Declare PB_SetGadgetItemData (*gadget.PB_Gadget ,item,value) Procedure PB_PanelStaticCB(hwnd,msg,wparam,lparam) Protected *pud.PB_Panel_User_Data Protected callback.l *pud = GetWindowLong_(hwnd,#GWL_USERDATA) callback = *pud\static_callback If #WM_DESTROY = msg FreeMemory(*pud) EndIf ProcedureReturn CallWindowProc_(callback,hwnd,msg,wparam,lparam) EndProcedure Procedure PB_PanelParentCB(hwnd,msg,wparam,lparam) Protected *pud.PB_Panel_User_Data Protected *dis.DRAWITEMSTRUCT Protected shWnd.l Protected callback.l = GetProp_(hWnd,"_oldCallback") Protected fore.l,back.l,backbrush.l,text.s If #WM_DESTROY = msg SetWindowLong(hWnd,#GWL_WNDPROC,callback) RemoveProp_(hwnd,"_oldCallback") EndIf If #WM_DRAWITEM = msg *dis = lParam If *dis\CtlType = #ODT_TAB shWnd = PB_GetPanelStaticItem(IsGadget(*dis\CtlID),*dis\itemID) *pud = GetWindowLong_(shWnd,#GWL_USERDATA) If *pud fore = *pud\ForeColor back = *pud\BackColor If back = #PB_Default back = GetSysColor_(#COLOR_BTNFACE) EndIf If fore = #PB_Default fore = GetSysColor_(#COLOR_BTNTEXT) EndIf Else fore = GetSysColor_(#COLOR_BTNTEXT) back = GetSysColor_(#COLOR_BTNFACE) EndIf backbrush = CreateSolidBrush_(back) fore = SetTextColor_(*dis\hdc, fore) FillRect_(*dis\hdc, *dis\rcItem, backbrush) SetBkMode_(*dis\hdc, #TRANSPARENT) text = GetGadgetItemText(*dis\CtlID,*dis\ItemID) DrawText_(*dis\hdc, text, Len(text), *dis\rcItem, #DT_CENTER | #DT_SINGLELINE | #DT_VCENTER) DeleteObject_(backbrush) SetTextColor_(*dis\hdc, fore) ProcedureReturn 0 EndIf EndIf ProcedureReturn CallWindowProc_(callback,hwnd,msg,wparam,lparam) EndProcedure Procedure PB_GetPanelStaticItem(*gadget.PB_Gadget ,item) Protected tci.TC_ITEM\mask = #TCIF_PARAM If SendMessage_(*gadget\gadget ,#TCM_GETITEM ,item ,@tci) ProcedureReturn tci\lParam EndIf EndProcedure Procedure PB_SetGadgetItemColor(*Gadget.PB_Gadget,item.l,ColorType.l,Color,col.l) Protected hwnd = PB_GetPanelStaticItem(*gadget,item) Protected *pud.PB_Panel_User_Data Protected result.l,panel_callback.l *pud = GetWindowLong_(hwnd ,#GWL_USERDATA) If Not *pud *pud = AllocateMemory(SizeOf(PB_Panel_User_Data)) If Not *pud ; no memory ProcedureReturn 0 EndIf SetWindowLong_(hwnd ,#GWL_USERDATA,*pud) *pud\static_callback = SetWindowLong_(hwnd,#GWL_WNDPROC,@PB_PanelStaticCB()) *pud\ForeColor = -1 *pud\BackColor = -1 EndIf panel_callback = GetProp_(GetParent_(*Gadget\gadget),"_oldCallback") If Not panel_callback panel_callback = SetWindowLong_(GetParent_(*Gadget\gadget),#GWL_WNDPROC,@PB_PanelParentCB()) EndIf SetWindowLong_(*Gadget\gadget, #GWL_STYLE, GetWindowLong_(*Gadget\gadget, #GWL_STYLE) | #TCS_OWNERDRAWFIXED) SetProp_(GetParent_(*Gadget\gadget),"_oldCallback",panel_callback) Select ColorType Case #PB_Gadget_FrontColor *pud\ForeColor = color Case #PB_Gadget_BackColor *pud\BackColor = color EndSelect SetWindowPos_(*Gadget\gadget,0,0,0,0,0,#SWP_NOMOVE|#SWP_NOSIZE|#SWP_NOZORDER|#SWP_FRAMECHANGED) EndProcedure Procedure PB_GetGadgetItemColor(*Gadget.PB_Gadget,item.l,ColorType.l,col.l) Protected hwnd = PB_GetPanelStaticItem(*gadget,item) Protected *pud.PB_Panel_User_Data Protected result.l *pud = GetWindowLong_(hwnd ,#GWL_USERDATA) Select ColorType Case #PB_Gadget_FrontColor result = *pud\ForeColor Case #PB_Gadget_BackColor result = *pud\BackColor EndSelect ProcedureReturn result EndProcedure Procedure PB_GetGadgetItemData(*gadget.PB_Gadget ,item) Protected hwnd = PB_GetPanelStaticItem(*gadget ,item) Protected *pud.PB_Panel_User_Data If hwnd *pud = GetWindowLong_(hwnd ,#GWL_USERDATA) If *pud ProcedureReturn *pud\user_data EndIf EndIf EndProcedure Procedure PB_SetGadgetItemData(*gadget.PB_Gadget,item,value) Protected hwnd = PB_GetPanelStaticItem(*gadget,item) Protected *pud.PB_Panel_User_Data Protected result.l *pud = GetWindowLong_(hwnd,#GWL_USERDATA) If Not *pud *pud = AllocateMemory(SizeOf(PB_Panel_User_Data)) If Not *pud ; no memory ProcedureReturn 0 EndIf SetWindowLong_(hwnd ,#GWL_USERDATA,*pud) *pud\static_callback = SetWindowLong_(hwnd,#GWL_WNDPROC,@PB_PanelStaticCB()) *pud\ForeColor = -1 *pud\BackColor = -1 EndIf result = *pud\user_data *pud\user_data = value ProcedureReturn result EndProcedure Procedure PB_PanelGadget(id.l ,x.l ,y.l ,cx.l ,cy.l) Protected value = PanelGadget(id,x,y,cx,cy) Protected *gadget.PB_Gadget If id = #PB_Any id = value EndIf *gadget = IsGadget(id) If *gadget *gadget\vt\SetGadgetItemData = @PB_SetGadgetItemData() *gadget\vt\GetGadgetItemData = @PB_GetGadgetItemData() *gadget\vt\SetGadgetItemColor2 = @PB_SetGadgetItemColor() *gadget\vt\GetGadgetItemColor2 = @PB_GetGadgetItemColor() EndIf ProcedureReturn value EndProcedure Macro PanelGadget PB_PanelGadget EndMacro
|