für ein kleines Projekt habe ich ein Gadget benötigt, das sich etwa aus einer Kombination von TreeGadget + ListIconGadget beschreiben lässt. Herausgekommen ist folgender Code:
Code: Alles auswählen
Procedure GetHeaderHeight(GadgetID.l)
Header.RECT
GetWindowRect_(SendMessage_(GadgetID(GadgetID.l) , #LVM_GETHEADER , 0 , 0) , Header)
ProcedureReturn Header\bottom - Header\top
EndProcedure
Procedure WindowCallBack(Window , message , wParam , lParam)
Protected wWidth.l , wHeight.l , Gadget_ID.l , AktColumn.l , LastColumn.l
Protected *pnmtv.NM_TREEVIEW
ReturnValue = #PB_ProcessPureBasicEvents
Select message
Case #WM_NOTIFY
*nmHEADER.HD_NOTIFY = lParam
Gadget_ID = *nmHEADER\hdr\hwndFrom
Select *nmHEADER\hdr\code
Case #HDN_ITEMCHANGING ; is header item changing?
Select GetParent_(Gadget_ID)
Case GadgetID(2)
If *nmHEADER\iItem = 0
Width.l = GetGadgetItemAttribute(2 , - 1 , #PB_ListIcon_ColumnWidth , 0)
ResizeGadget(8 , Width.l , #PB_Ignore , 300 - Width.l , #PB_Ignore)
ResizeGadget(0 , #PB_Ignore , #PB_Ignore , 300 - Width.l , #PB_Ignore)
ResizeGadget(1 , #PB_Ignore , #PB_Ignore , Width.l , #PB_Ignore)
ElseIf *nmHEADER\iItem = 1
ReturnValue = #True
EndIf
EndSelect
EndSelect
*pnmtv = lParam
Select *pnmtv\hdr\code
Case #TVN_ITEMEXPANDED
TreeListGadgetItem = *pnmtv\itemNew\lParam
Select *pnmtv\action
Case 1
TreeListGadgetItemExpanded = 1
Case 2
TreeListGadgetItemExpanded = 2
EndSelect
EndSelect
EndSelect
ProcedureReturn ReturnValue
EndProcedure
Procedure TreeListGadget_AddItem(Position.l , Text1.s , Text2.s , ImageID1.l , ImageID2.l , SubLevel.l)
AddGadgetItem(1 , Position.l , Text1.s , ImageID1.l , SubLevel.l)
AddGadgetItem(0 , Position.l , Text2.s , ImageID2.l , SubLevel.l)
EndProcedure
Procedure TreeListGadget_DeleteItem(Position.l)
RemoveGadgetItem(1 , Position.l)
RemoveGadgetItem(0 , Position.l)
EndProcedure
If OpenWindow(0 , 100 , 100 , 320 , 250 , "TreeListGadget" , #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
ContainerGadget(5 , 10 , 10 , 300 , 151 , #PB_Container_Flat)
SetGadgetColor(5 , #PB_Gadget_BackColor , RGB(255 , 255 , 255))
ContainerGadget(3 , 0 , 0 , GadgetWidth(5) - (GetSystemMetrics_(#SM_CYEDGE)/2) , 100 , #PB_Container_BorderLess)
ListIconGadget(2 , 0 , 0 , GadgetWidth(5) + 5 , 100 , "City" , 150 , #LVS_NOSCROLL)
AddGadgetColumn(2 , 1 , "Name" , 300)
AddGadgetItem(2 , - 1 , "" + Chr(10) + "")
SetGadgetColor(2 , #PB_Gadget_BackColor , RGB(245 , 245 , 245))
SetGadgetItemColor(2 , 0 , #PB_Gadget_BackColor , RGB(255 , 255 , 255) , 1)
SetWindowLong_(GadgetID(2) , #GWL_EXSTYLE , GetWindowLong_(GadgetID(2) , #GWL_EXSTYLE) & (~#WS_EX_CLIENTEDGE) & (~#WS_EX_CLIENTEDGE) & (~#WS_BORDER) & (~#WS_DLGFRAME) & (~#WS_VSCROLL) & (~#WS_HSCROLL) & (~#WS_THICKFRAME) & (~#WS_EX_DLGMODALFRAME) & (~#WS_EX_WINDOWEDGE) & (~#WS_EX_LEFTSCROLLBAR ) & (~#WS_EX_RIGHTSCROLLBAR) & (~#WS_EX_STATICEDGE) & (~#WS_EX_CLIENTEDGE) & (~#WS_EX_CLIENTEDGE) & (~#WS_EX_CLIENTEDGE) & (~#WS_EX_CLIENTEDGE) & (~#WS_EX_CLIENTEDGE))
SetWindowPos_(GadgetID(2) , 0 , 0 , 0 , 0 , 0 , #SWP_SHOWWINDOW | #SWP_NOZORDER | #SWP_NOSIZE | #SWP_NOMOVE | #SWP_FRAMECHANGED)
ResizeGadget(2 , #PB_Ignore , #PB_Ignore , #PB_Ignore , GetHeaderHeight(2))
ResizeGadget(3 , #PB_Ignore , #PB_Ignore , #PB_Ignore , GetHeaderHeight(2))
CloseGadgetList()
ContainerGadget(9 , 0 , GetHeaderHeight(2) , (GadgetWidth(5)/2) - (GetSystemMetrics_(#SM_CYEDGE)/2) , GadgetHeight(5) - GetHeaderHeight(2) - GetSystemMetrics_(#SM_CYEDGE) , #PB_Container_BorderLess)
TreeGadget(1 , 0 , 0 , (GadgetWidth(5)/2) - (GetSystemMetrics_(#SM_CYEDGE)/2) + GetSystemMetrics_(#SM_CXVSCROLL) , GadgetHeight(5) - GetHeaderHeight(2) - GetSystemMetrics_(#SM_CYEDGE) , #PB_Tree_CheckBoxes | #PB_Tree_NoLines) ; TreeGadget mit Checkboxen + ohne Linien
SetWindowLong_(GadgetID(1) , #GWL_EXSTYLE , GetWindowLong_(GadgetID(1) , #GWL_EXSTYLE) & (~#WS_EX_CLIENTEDGE) & (~#WS_EX_CLIENTEDGE) & (~#WS_BORDER) & (~#WS_DLGFRAME) & (~#WS_VSCROLL) & (~#WS_HSCROLL) & (~#WS_THICKFRAME) & (~#WS_EX_DLGMODALFRAME) & (~#WS_EX_WINDOWEDGE) & (~#WS_EX_LEFTSCROLLBAR ) & (~#WS_EX_RIGHTSCROLLBAR) & (~#WS_EX_STATICEDGE) & (~#WS_EX_CLIENTEDGE) & (~#WS_EX_CLIENTEDGE) & (~#WS_EX_CLIENTEDGE) & (~#WS_EX_CLIENTEDGE) & (~#WS_EX_CLIENTEDGE))
SetWindowPos_(GadgetID(1) , 0 , 0 , 0 , 0 , 0 , #SWP_SHOWWINDOW | #SWP_NOZORDER | #SWP_NOSIZE | #SWP_NOMOVE | #SWP_FRAMECHANGED)
SetWindowLong_(GadgetID(1) , #GWL_STYLE , GetWindowLong_(GadgetID(1) , #GWL_STYLE) & ~#WS_HSCROLL)
SetWindowPos_(GadgetID(1) , 0 , 0 , 0 , 0 , 0 , #SWP_NOMOVE | #SWP_NOSIZE | #SWP_NOZORDER | #SWP_FRAMECHANGED)
CloseGadgetList()
ContainerGadget(8 , GadgetWidth(5)/2 , GetHeaderHeight(2) , (GadgetWidth(5)/2) - (GetSystemMetrics_(#SM_CYEDGE)/2) , GadgetHeight(5) - GetHeaderHeight(2) - GetSystemMetrics_(#SM_CYEDGE) , #PB_Container_BorderLess)
TreeGadget(0 , 0 , 0 , (GadgetWidth(5)/2) - (GetSystemMetrics_(#SM_CYEDGE)/2) + GetSystemMetrics_(#SM_CXVSCROLL) , GadgetHeight(5) - GetHeaderHeight(2) - GetSystemMetrics_(#SM_CYEDGE) , #PB_Tree_NoLines | #PB_Tree_NoButtons)
SetGadgetColor(0 , #PB_Gadget_BackColor , GetSysColor_(#COLOR_3DFACE) )
SetWindowLong_(GadgetID(0) , #GWL_EXSTYLE , GetWindowLong_(GadgetID(0) , #GWL_EXSTYLE) & (~#WS_EX_CLIENTEDGE) & (~#WS_EX_CLIENTEDGE) & (~#WS_BORDER) & (~#WS_DLGFRAME) & (~#WS_VSCROLL) & (~#WS_HSCROLL) & (~#WS_THICKFRAME) & (~#WS_EX_DLGMODALFRAME) & (~#WS_EX_WINDOWEDGE) & (~#WS_EX_LEFTSCROLLBAR ) & (~#WS_EX_RIGHTSCROLLBAR) & (~#WS_EX_STATICEDGE) & (~#WS_EX_CLIENTEDGE) & (~#WS_EX_CLIENTEDGE) & (~#WS_EX_CLIENTEDGE) & (~#WS_EX_CLIENTEDGE) & (~#WS_EX_CLIENTEDGE))
SetWindowPos_(GadgetID(0) , 0 , 0 , 0 , 0 , 0 , #SWP_SHOWWINDOW | #SWP_NOZORDER | #SWP_NOSIZE | #SWP_NOMOVE | #SWP_FRAMECHANGED)
SendMessage_(GadgetID(0) , #TVM_SETINDENT , - 1 , 0)
EnableWindow_(GadgetID(0) , #False)
CloseGadgetList()
CloseGadgetList()
;Add some buttons
ButtonGadget(100 , 10 , 180 , 100 , 25 , "Add item")
ButtonGadget(101 , 10 , 210 , 100 , 25 , "Delete item")
SetWindowCallback(@WindowCallBack())
Repeat
Event = WaitWindowEvent()
If Event = #PB_Event_Gadget
If EventGadget() = 1
Select TreeListGadgetItemExpanded
Case 1
SetGadgetItemState(0 , TreeListGadgetItem , #PB_Tree_Collapsed)
Case 2
SetGadgetItemState(0 , TreeListGadgetItem , #PB_Tree_Expanded)
EndSelect
If GetWindowLong_(GadgetID(0) , #GWL_STYLE) & #WS_VSCROLL
ResizeGadget(8 , #PB_Ignore , #PB_Ignore , GetGadgetItemAttribute(2 , - 1 , #PB_ListIcon_ColumnWidth , 1) - GetGadgetItemAttribute(2 , - 1 , #PB_ListIcon_ColumnWidth , 0) - GetSystemMetrics_(#SM_CXVSCROLL) , #PB_Ignore)
OpenGadgetList(5)
ScrollBarGadget(6 , 300 - GetSystemMetrics_(#SM_CXVSCROLL) - GetSystemMetrics_(#SM_CYEDGE) , GetHeaderHeight(2) , GetSystemMetrics_(#SM_CXVSCROLL) , GadgetHeight(5) - GetHeaderHeight(2) - GetSystemMetrics_(#SM_CYEDGE) , 0 , 100 , 50 , #PB_ScrollBar_Vertical)
CloseGadgetList()
SetWindowLong_(GadgetID(1) , #GWL_STYLE , GetWindowLong_(GadgetID(1) , #GWL_STYLE) & ~#WS_HSCROLL & ~#WS_VSCROLL)
SetWindowPos_(GadgetID(1) , 0 , 0 , 0 , 0 , 0 , #SWP_NOMOVE | #SWP_NOSIZE | #SWP_NOZORDER | #SWP_FRAMECHANGED)
Else
ResizeGadget(8 , #PB_Ignore , #PB_Ignore , GetGadgetItemAttribute(2 , - 1 , #PB_ListIcon_ColumnWidth , 1) - GetGadgetItemAttribute(2 , - 1 , #PB_ListIcon_ColumnWidth , 0) , #PB_Ignore)
FreeGadget(6)
EndIf
ElseIf EventGadget() = 100
TreeListGadget_AddItem( - 1 , "Berlin" , "" , 0 , 0 , 0)
TreeListGadget_AddItem( - 1 , "Charlottenburg" , "Peter" , 0 , 0 , 1)
TreeListGadget_AddItem( - 1 , "Kreuzberg" , "Levent" , 0 , 0 , 1)
TreeListGadget_AddItem( - 1 , "Neukölln" , "Tobias" , 0 , 0 , 1)
TreeListGadget_AddItem( - 1 , "Tiergarten" , "Erkan" , 0 , 0 , 1)
ElseIf EventGadget() = 101
TreeListGadget_DeleteItem(0)
EndIf
EndIf
Until Event = #PB_Event_CloseWindow
EndIf