(Versuch) TreeGadget + ListIconGadget = TreeListGadget
Verfasst: 13.08.2010 13:41
Hallo,
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:
Wahrscheinlich werden einige ihre Arme über den Kopf zusammenschlagen, aber vielleicht hat der ein oder andere ja Lust, das ganze noch etwas anzupassen bzw. zu erweitern.
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