(Versuch) TreeGadget + ListIconGadget = TreeListGadget

Anfängerfragen zum Programmieren mit PureBasic.
CNESM
Beiträge: 311
Registriert: 29.08.2004 15:16
Kontaktdaten:

(Versuch) TreeGadget + ListIconGadget = TreeListGadget

Beitrag von CNESM »

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:

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
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.
Benutzeravatar
STARGÅTE
Kommando SG1
Beiträge: 7028
Registriert: 01.11.2005 13:34
Wohnort: Glienicke
Kontaktdaten:

Re: (Versuch) TreeGadget + ListIconGadget = TreeListGadget

Beitrag von STARGÅTE »

hmm, gute Idee, aber bei mir ist die Spalte "Name" koplett grau, was sollte da stehen ?
Wenn da die Namen stehen sollten, denn sind diese nicht zu sehen.
PB 6.01 ― Win 10, 21H2 ― Ryzen 9 3900X, 32 GB ― NVIDIA GeForce RTX 3080 ― Vivaldi 6.0 ― www.unionbytes.de
Aktuelles Projekt: Lizard - Skriptsprache für symbolische Berechnungen und mehr
Benutzeravatar
Kiffi
Beiträge: 10711
Registriert: 08.09.2004 08:21
Wohnort: Amphibios 9

Re: (Versuch) TreeGadget + ListIconGadget = TreeListGadget

Beitrag von Kiffi »

STARGÅTE hat geschrieben:Wenn da die Namen stehen sollten, denn sind diese nicht zu sehen.
dito hier. (Vista Business 32 SP2)

Grüße ... Kiffi
a²+b²=mc²
Benutzeravatar
STARGÅTE
Kommando SG1
Beiträge: 7028
Registriert: 01.11.2005 13:34
Wohnort: Glienicke
Kontaktdaten:

Re: (Versuch) TreeGadget + ListIconGadget = TreeListGadget

Beitrag von STARGÅTE »

Bild

Win XP SP3, 32Bit
PB 6.01 ― Win 10, 21H2 ― Ryzen 9 3900X, 32 GB ― NVIDIA GeForce RTX 3080 ― Vivaldi 6.0 ― www.unionbytes.de
Aktuelles Projekt: Lizard - Skriptsprache für symbolische Berechnungen und mehr
CNESM
Beiträge: 311
Registriert: 29.08.2004 15:16
Kontaktdaten:

Re: (Versuch) TreeGadget + ListIconGadget = TreeListGadget

Beitrag von CNESM »

Selbst mit der klassischen Ansicht sieht das bei mir so aus:

http://www.bilder-upload.eu/show.php?fi ... hrAMcx.jpg

Versuch mal den Code. Hab jetzt mal den Enable-Befehl rausgenommen:

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
Benutzeravatar
hjbremer
Beiträge: 822
Registriert: 27.02.2006 22:30
Computerausstattung: von gestern
Wohnort: Neumünster

Re: (Versuch) TreeGadget + ListIconGadget = TreeListGadget

Beitrag von hjbremer »

interessant, aber noch Optimierungs Potenzial

vor allem fehlt

Code: Alles auswählen

Global TreeListGadgetItemExpanded
oder zumindest ein shared im Callback

und ev. auch noch

Code: Alles auswählen

Global TreeListGadgetItem
aber das blick ich noch nicht. Ein paar Infos wären nicht schlecht
Purebasic 5.70 x86 5.72 X 64 - Windows 10

Der Computer hat dem menschlichen Gehirn gegenüber nur einen Vorteil: Er wird benutzt
grüße hjbremer
CNESM
Beiträge: 311
Registriert: 29.08.2004 15:16
Kontaktdaten:

Re: (Versuch) TreeGadget + ListIconGadget = TreeListGadget

Beitrag von CNESM »

Ahh, da ist beim Kopieren was verloren gegangen. Danke für den Hinweiss @hjbremer

Code: Alles auswählen

Global TreeListGadgetItemExpanded ,  TreeListGadgetItem

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
Benutzeravatar
hjbremer
Beiträge: 822
Registriert: 27.02.2006 22:30
Computerausstattung: von gestern
Wohnort: Neumünster

Re: (Versuch) TreeGadget + ListIconGadget = TreeListGadget

Beitrag von hjbremer »

Hi, so interessant wie es ist, aber so wie es ist, blickt keiner bzw. ich nicht durch !

zuerst sollten alle Gadgets aussagekräftige Konstentennamen bekommen und dann die SetWindowLong Befehle kommentieren. Ich wette in 6 Monaten blickst du da selber nicht mehr durch.

Die ResizeGadget Befehle im Callback funktionieren scheinbar nicht richtig. Ebenso das Scrollen.
Purebasic 5.70 x86 5.72 X 64 - Windows 10

Der Computer hat dem menschlichen Gehirn gegenüber nur einen Vorteil: Er wird benutzt
grüße hjbremer
CNESM
Beiträge: 311
Registriert: 29.08.2004 15:16
Kontaktdaten:

Re: (Versuch) TreeGadget + ListIconGadget = TreeListGadget

Beitrag von CNESM »

Aus zeitlichen Gründen habe ich mir das Nicht-Kommentieren angewöhnt.

Das der Code sehr unsauber ist, liegt auch daran, das ich mir ehrlich gesagt nicht die Arbeit gemacht habe, das alles ordentlich runterzuschreiben. Warum? Weil ich der meinung bin, das an diesem Konzept noch stark gearbeitet werden muss und daher eh noch enorm viele Anpassungen notwendig sind.

Hier mal eine andere Version:

Code: Alles auswählen

Global TreeListGadgetItemExpanded
Global TreeListGadgetItem
Global lpPrevFunc.l 
Global TgLeft
Global TgRight

Procedure GetHeaderHeight(GadgetID.l)
  Header.RECT
  GetWindowRect_(SendMessage_(GadgetID(GadgetID.l) , #LVM_GETHEADER , 0 , 0) , Header)
  ProcedureReturn Header\bottom - Header\top
EndProcedure

Procedure TreeListGadgetProc(hWnd.l,uMsg.l,wParam.l,lParam.l)  
  Select uMsg  
     Case #WM_HSCROLL, #WM_VSCROLL, #WM_MOUSEWHEEL
       If hWnd.l=TgLeft
         MyHwnd1.l=GadgetID(0)
         MyHwnd2.l=GadgetID(1)
        ElseIf hWnd.l=TgRight
         MyHwnd1.l=GadgetID(1)
         MyHwnd2.l=GadgetID(0)
       EndIf
        SetScrollPos_(MyHwnd1.l,#SB_HORZ,GetScrollPos_(MyHwnd2.l, #SB_HORZ),1)  
        SetScrollPos_(MyHwnd1.l,#SB_VERT,GetScrollPos_(MyHwnd2.l, #SB_VERT),1)   
        SendMessage_(MyHwnd1.l,#WM_SETREDRAW,1,0) 
      ProcedureReturn CallWindowProc_(lpPrevFunc,hWnd,uMsg,wParam,lParam)  
    Default  
      ProcedureReturn CallWindowProc_(lpPrevFunc,hWnd,uMsg,wParam,lParam) 
  EndSelect   
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  
      *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_BORDER) & (~#WS_DLGFRAME) & (~#WS_VSCROLL) & (~#WS_HSCROLL) & (~#WS_THICKFRAME) & (~#WS_EX_DLGMODALFRAME) & (~#WS_EX_WINDOWEDGE) & (~#WS_EX_LEFTSCROLLBAR ) & (~#WS_EX_RIGHTSCROLLBAR) & (~#WS_EX_STATICEDGE))  
        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))
        DisableGadget(2,1)
        CloseGadgetList()
      
      ContainerGadget(9 , 0 , GetHeaderHeight(2) , (GadgetWidth(5)/2) - (GetSystemMetrics_(#SM_CYEDGE)/2) , GadgetHeight(5) - GetHeaderHeight(2) - GetSystemMetrics_(#SM_CYEDGE) , #PB_Container_BorderLess) 
        TgLeft=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_BORDER) & (~#WS_DLGFRAME) & (~#WS_VSCROLL) & (~#WS_HSCROLL) & (~#WS_THICKFRAME) & (~#WS_EX_DLGMODALFRAME) & (~#WS_EX_WINDOWEDGE) & (~#WS_EX_LEFTSCROLLBAR ) & (~#WS_EX_RIGHTSCROLLBAR) & (~#WS_EX_STATICEDGE))  
        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)
        lpPrevFunc=SetWindowLong_(GadgetID(1),#GWL_WNDPROC,@TreeListGadgetProc())
      CloseGadgetList()
        
        Tgright=TreeGadget(0 ,GadgetWidth(5)/2 , GetHeaderHeight(2) , (GadgetWidth(5)/2) - (GetSystemMetrics_(#SM_CYEDGE))  , GadgetHeight(5) - GetHeaderHeight(2) - GetSystemMetrics_(#SM_CYEDGE) , #PB_Tree_NoLines | #PB_Tree_NoButtons)
        SetWindowLong_(GadgetID(0) , #GWL_EXSTYLE , GetWindowLong_(GadgetID(0) , #GWL_EXSTYLE)  & (~#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) )  
        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)
        lpPrevFunc=SetWindowLong_(GadgetID(0),#GWL_WNDPROC,@TreeListGadgetProc())
      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
        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

Das Scrollen ist leider etwas zeitversetzt. Im Grunde läuft das alles nicht rund. In meinen Fall musste auf optische Dinge weniger Wert gelegt werden. Daher habe ich ertsmal eine andere Version online gestellt. Verbesserung etc. sind herzlich Willkommen!
Antworten