My MyTable/MyGrid
Posted: Mon Apr 26, 2021 11:18 am
Since everyone post his own Version of a table, here is my version.

All 5 Elements are tables. It's not "clean code" but it does what it should.
And the example to show how to use it.

All 5 Elements are tables. It's not "clean code" but it does what it should.
And the example to show how to use it.
Code: Select all
EnableExplicit
UsePNGImageDecoder()
XIncludeFile "mytable.pbi"
Define rowImage=LoadImage(#PB_Any,"C:\Users\silko\OneDrive\Dokumente\Icons\office\png-hot\48x48\Briefcase.png")
Define rowImageSub=LoadImage(#PB_Any,"C:\Users\silko\OneDrive\Dokumente\Icons\office\png-hot\48x48\Lock.png")
Define rowImageSub2=LoadImage(#PB_Any,"C:\Users\silko\OneDrive\Dokumente\Icons\office\png-hot\48x48\Attach.png")
Global mainWindow=OpenWindow(#PB_Any,0,0,800,600,"MyTable",#PB_Window_SystemMenu|#PB_Window_ScreenCentered|#PB_Window_SizeGadget|#PB_Window_MaximizeGadget|#PB_Window_MinimizeGadget)
Global canvasTable=CanvasGadget(#PB_Any,0,0,WindowWidth(mainWindow),WindowHeight(mainWindow),#PB_Canvas_Container|#PB_Canvas_Border|#PB_Canvas_DrawFocus)
Global hscrollTable=ScrollBarGadget(#PB_Any,0,GadgetHeight(canvasTable)-20,GadgetWidth(canvasTable)-20,20,0,0,100)
Global vscrollTable=ScrollBarGadget(#PB_Any,GadgetWidth(canvasTable)-20,0,20,GadgetHeight(canvasTable)-20,0,0,100,#PB_ScrollBar_Vertical)
CloseGadgetList()
Global canvasTable2=CanvasGadget(#PB_Any,0,0,WindowWidth(mainWindow),WindowHeight(mainWindow),#PB_Canvas_Container|#PB_Canvas_Border|#PB_Canvas_DrawFocus)
Global hscrollTable2=ScrollBarGadget(#PB_Any,0,GadgetHeight(canvasTable2)-20,GadgetWidth(canvasTable2)-20,20,0,0,100)
Global vscrollTable2=ScrollBarGadget(#PB_Any,GadgetWidth(canvasTable2)-20,0,20,GadgetHeight(canvasTable2)-20,0,0,100,#PB_ScrollBar_Vertical)
CloseGadgetList()
Global canvasTree=CanvasGadget(#PB_Any,0,0,WindowWidth(mainWindow),WindowHeight(mainWindow),#PB_Canvas_Container|#PB_Canvas_Border|#PB_Canvas_DrawFocus)
Global hscrollTree=ScrollBarGadget(#PB_Any,0,GadgetHeight(canvasTree)-20,GadgetWidth(canvasTree)-20,20,0,0,100)
Global vscrollTree=ScrollBarGadget(#PB_Any,GadgetWidth(canvasTree)-20,0,20,GadgetHeight(canvasTree)-20,0,0,100,#PB_ScrollBar_Vertical)
CloseGadgetList()
Global canvasTree2=CanvasGadget(#PB_Any,0,0,WindowWidth(mainWindow),WindowHeight(mainWindow),#PB_Canvas_Container|#PB_Canvas_Border|#PB_Canvas_DrawFocus)
Global hscrollTree2=ScrollBarGadget(#PB_Any,0,GadgetHeight(canvasTree2)-20,GadgetWidth(canvasTree2)-20,20,0,0,100)
Global vscrollTree2=ScrollBarGadget(#PB_Any,GadgetWidth(canvasTree2)-20,0,20,GadgetHeight(canvasTree2)-20,0,0,100,#PB_ScrollBar_Vertical)
CloseGadgetList()
Global canvasBild=CanvasGadget(#PB_Any,WindowWidth(mainWindow)-150,0,150,WindowHeight(mainWindow),#PB_Canvas_Container|#PB_Canvas_Border|#PB_Canvas_DrawFocus)
Global hscrollBild=ScrollBarGadget(#PB_Any,0,GadgetHeight(canvasBild)-20,GadgetWidth(canvasBild)-20,20,0,0,100)
Global vscrollBild=ScrollBarGadget(#PB_Any,GadgetWidth(canvasBild)-20,0,20,GadgetHeight(canvasBild)-20,0,0,100,#PB_ScrollBar_Vertical)
CloseGadgetList()
Global splitter=SplitterGadget(#PB_Any,0,0,0,0,canvasTable,canvasTable2,#PB_Splitter_FirstFixed|#PB_Splitter_Separator)
Global splitter2=SplitterGadget(#PB_Any,0,0,0,0,canvasTree,canvasTree2,#PB_Splitter_FirstFixed|#PB_Splitter_Separator)
Global splitter3=SplitterGadget(#PB_Any,0,0,WindowWidth(mainWindow)-150,WindowHeight(mainWindow),splitter2,splitter,#PB_Splitter_FirstFixed|#PB_Splitter_Vertical|#PB_Splitter_Separator)
SetGadgetState(splitter,300)
SetGadgetState(splitter2,300)
SetGadgetState(splitter3,300)
Procedure evtResizeWindow()
ResizeGadget(splitter3,
#PB_Ignore,
#PB_Ignore,
WindowWidth(EventWindow())-150,
WindowHeight(EventWindow()))
ResizeGadget(canvasBild,
WindowWidth(EventWindow())-150,
#PB_Ignore,
#PB_Ignore,
WindowHeight(EventWindow()))
EndProcedure
BindEvent(#PB_Event_SizeWindow,@evtResizeWindow(),mainWindow)
BindEvent(#PB_Event_RestoreWindow,@evtResizeWindow(),mainWindow)
BindEvent(#PB_Event_MaximizeWindow,@evtResizeWindow(),mainWindow)
MyTableRegister(mainWindow,canvasTable,hscrollTable,vscrollTable)
MyTableRegister(mainWindow,canvasTable2,hscrollTable2,vscrollTable2,#MYTABLE_TABLE_FLAGS_FULL_ROW_SELECT|#MYTABLE_TABLE_FLAGS_LAST_STRETCH|#MYTABLE_TABLE_FLAGS_GRID)
MyTableRegister(mainWindow,canvasTree,hscrollTree,vscrollTree,#MYTABLE_TABLE_FLAGS_LAST_STRETCH|#MYTABLE_TABLE_FLAGS_HIERARCHICAL_ARROW|#MYTABLE_TABLE_FLAGS_CHECKBOX)
MyTableRegister(mainWindow,canvasTree2,hscrollTree2,vscrollTree2,#MYTABLE_TABLE_FLAGS_LAST_STRETCH|#MYTABLE_TABLE_FLAGS_NO_HEADER|#MYTABLE_TABLE_FLAGS_MULTISELECT)
MyTableRegister(mainWindow,canvasBild,hscrollBild,vscrollBild,#MYTABLE_TABLE_FLAGS_LAST_STRETCH|#MYTABLE_TABLE_FLAGS_NO_HEADER|#MYTABLE_TABLE_FLAGS_GRID)
MyTableAddColumn(canvasTree,"Kategorien",0)
MyTableAddColumn(canvasTree2,"Orte",0)
MyTableSetTableRowHeight(canvasTree2,30)
MyTableAddColumn(canvasTable,"ID",50,#MYTABLE_COLUMN_FLAGS_RIGHT|#MYTABLE_COLUMN_FLAGS_INTEGER)
MyTableAddColumn(canvasTable,"Vorname",200,#MYTABLE_COLUMN_FLAGS_EDITABLE)
MyTableAddColumn(canvasTable,"Nachname",200,#MYTABLE_COLUMN_FLAGS_EDITABLE)
MyTableAddColumn(canvasTable,"Geburtsdatum",150,#MYTABLE_COLUMN_FLAGS_CENTER|#MYTABLE_COLUMN_FLAGS_DATE|#MYTABLE_COLUMN_FLAGS_EDITABLE)
MyTableAddColumn(canvasTable,"Uhrzeit",150,#MYTABLE_COLUMN_FLAGS_CENTER|#MYTABLE_COLUMN_FLAGS_TIME_LONG|#MYTABLE_COLUMN_FLAGS_EDITABLE)
MyTableAddColumn(canvasTable2,"ID",50,#MYTABLE_COLUMN_FLAGS_RIGHT|#MYTABLE_COLUMN_FLAGS_INTEGER|#MYTABLE_COLUMN_FLAGS_MIDDLE)
MyTableAddColumn(canvasTable2,"Firma",200,#MYTABLE_COLUMN_FLAGS_EDITABLE|#MYTABLE_COLUMN_FLAGS_BOTTOM)
MyTableAddColumn(canvasTable2,"Privat",50,#MYTABLE_COLUMN_FLAGS_BOOLEAN|#MYTABLE_COLUMN_FLAGS_CENTER|#MYTABLE_COLUMN_FLAGS_EDITABLE|#MYTABLE_COLUMN_FLAGS_MIDDLE)
MyTableAddColumn(canvasTable2,"Info",150,#MYTABLE_COLUMN_FLAGS_EDITABLE)
MyTableSetTableRowHeight(canvasTable2,40)
MyTableAddColumn(canvasBild,"",150,#MYTABLE_COLUMN_FLAGS_CENTER|#MYTABLE_COLUMN_FLAGS_IMAGE|#MYTABLE_COLUMN_FLAGS_MIDDLE)
MyTableSetTableRowHeight(canvasBild,128)
MyTableSetBackground(canvasTree2,RGBA(10,10,10,255))
MyTableSetForecolor(canvasTree2,RGBA(210,210,210,255))
MyTableSetSelectedforecolor(canvasTree2,RGBA(10,10,10,255))
MyTableSetBackground(canvasBild,RGBA(10,10,10,255))
Define i,g,h
i=0
MyTableRedraw(canvasBild,#False)
If ExamineDirectory(0,"C:\Users\silko\OneDrive\Dokumente\Icons\hardware\png-hot\48x48","*.png")
While NextDirectoryEntry(0)
MyTableAddRow(canvasBild,"")
MyTableSetCellImage(canvasBild,i,0,LoadImage(#PB_Any,"C:\Users\silko\OneDrive\Dokumente\Icons\hardware\png-hot\48x48\"+DirectoryEntryName(0)))
i+1
If i=10
Break
EndIf
Wend
FinishDirectory(0)
EndIf
MyTableRedraw(canvasBild,#True)
MyTableRedraw(canvasTree,#False)
For i=1 To 10
Define id=MyTableAddRow(canvasTree,"Kategorie "+Str(i),"",#PB_Ignore,rowImage,0,Random(1,0),Random(1,0))
For g=1 To Random(5,0)
Define sub= MyTableAddRow(canvasTree,"SubKategorie "+Str(g),"",#PB_Ignore,rowImageSub,0,Random(1,0),Random(1,0),id)
For h=1 To Random(3,0)
MyTableAddRow(canvasTree,"SubKategorie "+Str(g)+" "+Str(h),"",#PB_Ignore,rowImageSub2,0,Random(1,0),Random(1,0),sub)
Next
Next
Next
MyTableRedraw(canvasTree,#True)
MyTableRedraw(canvasTable,#False)
For i=1 To 100
MyTableAddRow(canvasTable,Str(i)+"|Vorname "+Str(i)+"|Nachname "+Str(i)+"|"+FormatDate("%dd.%mm.%yyyy",AddDate(Date(),#PB_Date_Day,i))+"|"+FormatDate("%hh:%ii:%ss",AddDate(Date(),#PB_Date_Second,i)),"|",#PB_Ignore,rowImageSub2)
Next
MyTableRedraw(canvasTable,#True)
MyTableRedraw(canvasTree2,#False)
For i=1 To 100
MyTableAddRow(canvasTree2,"Ort "+Str(i))
Next
MyTableRedraw(canvasTree2,#True)
MyTableRedraw(canvasTable2,#False)
For i=1 To 10000
MyTableAddRow(canvasTable2,Str(i)+"|firma "+Str(i)+"|"+Str(Random(1,0))+"|Info "+Str(i))
Next
MyTableRedraw(canvasTable2,#True)
MyTableAutosizeColumn(canvasTable,#PB_Ignore)
MyTableAutosizeColumn(canvasTable2,#PB_Ignore)
PostEvent(#PB_Event_SizeWindow,mainWindow,0)
Repeat:Until WaitWindowEvent()=#PB_Event_CloseWindow
MyTableUnRegister(canvasTable)
MyTableUnRegister(canvasTable2)
MyTableUnRegister(canvasBild)
MyTableUnRegister(canvasTree)
MyTableUnRegister(canvasTree2)

