Gute Idee und du hast recht. Wen ich auf den Button klicke
und dann Cursor nach links/rechts/oben/unten dann gibts Fehler.
Hab den Fehler jetzt behandelt.
Code: Alles auswählen
;Programmierer: Tommy
Structure TableStruct
GadgetNr.i
Content.s
i.i
j.i
EndStructure
; Verfügbare Flags
#PB_Table_BorderLess = $20000
#PB_Table_ActiveHighlighting = $C0
; Event Constanten
#PB_Table_Event_Key_Up = $A000
#PB_Table_Event_Key_Down = $A001
#PB_Table_Event_Key_Right = $A002
#PB_Table_Event_Key_Left = $A003
Procedure TableGadgetHandler()
Protected DataValue, i, j, *this.TableStruct
DataValue = GetGadgetData(EventGadget())
*this.TableStruct = DataValue
*this\Content = GetGadgetText(*this\GadgetNr)
EndProcedure
Procedure TableGadgetFocusHandler()
SetGadgetColor(EventGadget(), #PB_Gadget_BackColor, RGB(255, 255, 220))
EndProcedure
Procedure TableGadgetLostFocusHandler()
SetGadgetColor(EventGadget(), #PB_Gadget_BackColor, -1)
EndProcedure
Procedure TableGadgetKeyHandler(Array TableStruct.TableStruct(2), Key)
Protected cGadget, *this.TableStruct, DataValue, maxWidthField, maxHeightField
cGadget = GetActiveGadget()
If IsGadget(cGadget)
maxWidthField = ArraySize(TableStruct(), 1)
maxHeightField = ArraySize(TableStruct(), 2)
DataValue = GetGadgetData(cGadget)
*this.TableStruct = DataValue
If *this
*this\Content = GetGadgetText(*this\GadgetNr)
; Mit Pfeiltasten steuerbar
Select Key
Case #PB_Table_Event_Key_Up : If *this\j <> 0: SetActiveGadget(TableStruct(*this\i, *this\j-1)\GadgetNr) : EndIf
Case #PB_Table_Event_Key_Down : If *this\j <> maxHeightField-1: SetActiveGadget(TableStruct(*this\i, *this\j+1)\GadgetNr) : EndIf
Case #PB_Table_Event_Key_Right: If *this\i <> maxWidthField-1: SetActiveGadget(TableStruct(*this\i+1, *this\j)\GadgetNr) : EndIf
Case #PB_Table_Event_Key_Left : If *this\i <> 0: SetActiveGadget(TableStruct(*this\i-1, *this\j)\GadgetNr) : EndIf
EndSelect
EndIf
EndIf
EndProcedure
Procedure TableGadget(Array TableStruct.TableStruct(2), x, y, Width, Height, CellWidth = 100, CellHeight = 20, Flags = 0)
Protected i, j, Gadget
; Mit Pfeiltasten steuerbar
AddKeyboardShortcut(0, #PB_Shortcut_Up, #PB_Table_Event_Key_Up)
AddKeyboardShortcut(0, #PB_Shortcut_Down, #PB_Table_Event_Key_Down)
AddKeyboardShortcut(0, #PB_Shortcut_Right, #PB_Table_Event_Key_Right)
AddKeyboardShortcut(0, #PB_Shortcut_Left, #PB_Table_Event_Key_Left)
; Schleife für alle Spalten
For j=0 To (Height/CellHeight)-1
; Schleife für alle Zeilen
For i=0 To (Width/CellWidth)-1
Gadget = StringGadget(#PB_Any, i*CellWidth, j*CellHeight, CellWidth, CellHeight, "", Flags)
; Übergebenes TableStruct intern speichern
SetGadgetData(Gadget, TableStruct(i, j))
; Eingegebener Inhalt bei Änderung automatisch ins TableStruct speichern
BindGadgetEvent(Gadget, @TableGadgetHandler(), #PB_EventType_Change)
; Active Zelle färben
If Flags & #PB_Table_ActiveHighlighting
BindGadgetEvent(Gadget, @TableGadgetFocusHandler(), #PB_EventType_Focus)
BindGadgetEvent(Gadget, @TableGadgetLostFocusHandler(), #PB_EventType_LostFocus)
EndIf
TableStruct(i, j)\GadgetNr = Gadget
TableStruct(i, j)\i = i
TableStruct(i, j)\j = j
Next i
Next j
EndProcedure
Define event
Define ArrayX
Define ArrayY
; Neues Fenster erstellen
OpenWindow(0, 0, 0, 800, 640, "", #PB_Window_SystemMenu|#PB_Window_ScreenCentered)
; Array für die Tabelle erstellen. Alle Daten werden automatisch darein gespeichert
Dim TableStruct.TableStruct(800/100, 600/20)
; Tabellen-Gadget erstellen. Zellen werden abhängig von der Breite und Höhe angelegt so viel da rein passen
TableGadget(TableStruct(), 0, 0, 800, 600, 100, 20, #PB_Table_ActiveHighlighting)
ButtonGadget(0, 300, 610, 200, 20, "Gebe alle Daten aus", 0)
Repeat
event = WaitWindowEvent()
If event = #PB_Event_Menu
Select EventMenu()
; Mit Pfeiltasten steuerbar
Case #PB_Table_Event_Key_Up : TableGadgetKeyHandler(TableStruct(), #PB_Table_Event_Key_Up)
Case #PB_Table_Event_Key_Down : TableGadgetKeyHandler(TableStruct(), #PB_Table_Event_Key_Down)
Case #PB_Table_Event_Key_Right: TableGadgetKeyHandler(TableStruct(), #PB_Table_Event_Key_Right)
Case #PB_Table_Event_Key_Left : TableGadgetKeyHandler(TableStruct(), #PB_Table_Event_Key_Left)
EndSelect
EndIf
If event = #PB_Event_Gadget
Select EventGadget()
Case 0
; Ausgabe der Daten, kann auch in Datei exportiert werden
For ArrayY=0 To ArraySize(TableStruct(), 2)
For ArrayX=0 To ArraySize(TableStruct(), 1)
Debug TableStruct(ArrayX, ArrayY)\Content
Next ArrayX
Next ArrayY
EndSelect
EndIf
Until event = #PB_Event_CloseWindow