Vorschlag: Kannst du die aktuelle bzw. aktive Zelle auch einfärben? Am besten ein optionaler bool-Parameter, den man übergibt.
TableGadget (alle OS, Anfänger-Tip)
Re: TableGadget (alle OS, Anfänger-Tip)
Cool, vielen Dank 
Vorschlag: Kannst du die aktuelle bzw. aktive Zelle auch einfärben? Am besten ein optionaler bool-Parameter, den man übergibt.
Vorschlag: Kannst du die aktuelle bzw. aktive Zelle auch einfärben? Am besten ein optionaler bool-Parameter, den man übergibt.
Re: TableGadget (alle OS, Anfänger-Tip)
Freut mich das es dir gefällt. 
Neuer Parameter: #PB_Table_ActiveHighlighting
Neuer Parameter: #PB_Table_ActiveHighlighting
Code: Alles auswählen
Code siehe 1. Post
Zuletzt geändert von Tommy am 28.01.2015 13:33, insgesamt 1-mal geändert.
PB 5.41 x64
Re: TableGadget (alle OS, Anfänger-Tip)
Vielen Dank Tommy für die schnelle Umsetzung, es funktioniert wie es sein sollte und ist echt smart! Ich werde es in einem meiner Projekte nutzen. Danke dir 
Falls ich weitere Vorschläge habe, sag ich dir Bescheid.
Falls ich weitere Vorschläge habe, sag ich dir Bescheid.
Re: TableGadget (alle OS, Anfänger-Tip)
Die Cursor-Steuerung sollte so überarbeitet werden, daß sie deaktiviert wird, wenn keine Zelle mehr den Cursor hat.
Re: TableGadget (alle OS, Anfänger-Tip)
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.
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
PB 5.41 x64
Re: TableGadget (alle OS, Anfänger-Tip)
Sehr nützlich 
Re: TableGadget (alle OS, Anfänger-Tip)
Geht auch Sortieren ?
pb aktuel 6.2 windoof aktuell und sowas von 10
Ich hab Tinnitus im Auge. Ich seh nur Pfeifen.
Ich hab Tinnitus im Auge. Ich seh nur Pfeifen.
Re: TableGadget (alle OS, Anfänger-Tip)
@bobobo
Sollen Spalten hinzugefügt werden und soll via Klick auf
eine Spalte sortiert werden? Ich versuche mal was ich
umsetzen kann. Danke für den Feature Vorschlag
Sollen Spalten hinzugefügt werden und soll via Klick auf
eine Spalte sortiert werden? Ich versuche mal was ich
umsetzen kann. Danke für den Feature Vorschlag
PB 5.41 x64
Re: TableGadget (alle OS, Anfänger-Tip)
ja, sowas in der Art.
pb aktuel 6.2 windoof aktuell und sowas von 10
Ich hab Tinnitus im Auge. Ich seh nur Pfeifen.
Ich hab Tinnitus im Auge. Ich seh nur Pfeifen.