Hallo Peter,
dies ist die Datei zum Testen des DataGrids (Ausgabe von Testdaten erfolgt auf das Konsolenfenster):
Code: Alles auswählen
;==============================================================================
; DataGridTest.pb
; Test des DataGrid
; Erstellt am 09.02.2013
; Letzte Bearbeitung am 17.02.2013
;==============================================================================
EnableExplicit
IncludeFile "DataGrid.pbi"
IncludeFile "DataGridTest.pbf"
Global Dim sListID.i(30)
Global Dim sTabID.i(30, 3)
Dim SpBreite.i(3)
Dim Titel.s(3)
Define i, j, event
Procedure Button_List(EventType)
; DataList auslesen
Protected.i i
ClearConsole()
ConsoleTitle("Daten in der Liste")
For i = 0 To 30
PrintN(GetGadgetText(sListID(i)))
Next
EndProcedure
Procedure Button_Tab(EventType)
; Tabelle auslesen
Protected.i i, j
ClearConsole()
ConsoleTitle("Daten in der Tabelle")
For i = 0 To 30
For j = 0 To 3
ConsoleLocate(19 * j, i)
Print(GetGadgetText(sTabID(i, j)))
Next
Next
EndProcedure
; Hauptprogramm
For i = 0 To 3
SpBreite(i) = 100
Titel(i) = "Spalte Nr. " + Str(i)
Next
OpenConsole()
ConsoleTitle("DataGridTest")
EnableGraphicalConsole(1)
OpenWindow_DataGrid()
DataList(sListID(), 20, 20, 160, 340, "Datenliste")
DataTab(sTabID(), 200, 20, 380, 340, SpBreite(), Titel())
For i = 0 To 30
SetGadgetText(sListID(i), "Eintrag Nr. " + Str(i))
Next
For i = 0 To 30
For j = 0 To 3
SetGadgetText(sTabID(i, j), "Eintrag Nr. " + Str(i) + "," + Str(j))
Next
Next
Repeat
event = WaitWindowEvent()
Until Window_DataGrid_Events(event) = #False
CloseConsole()
End
Das ist die zugehörige pbf-Datei (DataGridTest.pbf):
Code: Alles auswählen
Enumeration #PB_Compiler_EnumerationValue
#Window_DataGrid
EndEnumeration
Enumeration #PB_Compiler_EnumerationValue
#Button_List
#Button_Tab
EndEnumeration
Declare Button_List(EventType)
Declare Button_Tab(EventType)
Procedure OpenWindow_DataGrid()
OpenWindow(#Window_DataGrid, 0, 0, 600, 400, "DataGrid-Test - editierbares DataGrid", #PB_Window_SystemMenu | #PB_Window_MinimizeGadget | #PB_Window_ScreenCentered)
ButtonGadget(#Button_List, 20, 370, 160, 20, "Liste auslesen")
ButtonGadget(#Button_Tab, 200, 370, 100, 20, "Tabelle auslesen")
EndProcedure
Procedure Window_DataGrid_Events(event)
Select event
Case #PB_Event_CloseWindow
ProcedureReturn #False
Case #PB_Event_Menu
Select EventMenu()
EndSelect
Case #PB_Event_Gadget
Select EventGadget()
Case #Button_List
Button_List(EventType())
Case #Button_Tab
Button_Tab(EventType())
EndSelect
EndSelect
ProcedureReturn #True
EndProcedure
Und dies ist die Include-Datei DataGrid.pbi mit den Prozeduren zur Definition einer Liste oder einer Tabelle:
Code: Alles auswählen
;==============================================================================
; DataGrid.pbi
; Beschreibbare Datenliste oder Tabelle
; Erstellt am 09.02.2013
;==============================================================================
EnableExplicit
Procedure DataList(Array StringID.i(1), x.i, y.i, Breite.i, Hoehe.i, Titel.s)
; Einspaltige Datenliste aus StringGadgets (Höhe = 20), eingeschlossen durch ein
; ScrollAreaGadget. Parameter:
; - StringID() = Array mit den Gadget-Konstanten der StringGadgets
; - x, y, Breite, Hoehe = Position und Abmessungen des ScrollAreaGadgets
; - Titel = Ueberschrift
Protected.i i, ScrollAreaID, TextID, n = ArraySize(StringID())
ScrollAreaID = ScrollAreaGadget(#PB_Any, x, y, Breite, Hoehe, Breite, 20 * (n + 2))
TextID = TextGadget(#PB_Any, 0, 0, Breite, 20, Titel, #PB_Text_Border)
For i = 0 To ArraySize(StringID())
StringID(i) = StringGadget(#PB_Any, 0, 20 * (1 + i), Breite, 20, "")
Next
CloseGadgetList()
EndProcedure
Procedure DataTab(Array StringID.i(2), x.i, y.i, Breite.i, Hoehe.i, Array SpBreite.i(1),
Array Titel.s(1))
; Datentabelle aus StringGadgets (Höhe = 20), eingeschlossen durch ein ScrollAreaGadget.
; Parameter:
; - StringID() = Array mit den Gadget-Konstanten der StringGadgets (erster Index = Zeile,
; zweiter Index = Spalte)
; - x, y, Breite, Hoehe = Position und Abmessungen des ScrollAreaGadgets
; - SpBreite() = Array mit den Spaltenbreiten
; - Titel() = Spaltenüberschriften
Protected.i i, j, ScrollAreaID, m = ArraySize(StringID(), 1), n = ArraySize(StringID(), 2)
Protected Dim TextID.i(n)
Protected Dim Col.i(n)
; Spaltenpositonen berechnen:
Col(0) = 0
For j = 1 To n
Col(j) = Col(j - 1) + SpBreite(j - 1)
Next
; Tabelle erzeugen:
ScrollAreaID = ScrollAreaGadget(#PB_Any, x, y, Breite, Hoehe, Col(n) + SpBreite(n), 20 * (m + 2))
For j = 0 To n
TextID(j) = TextGadget(#PB_Any, Col(j), 0, SpBreite(j), 20, Titel(j), #PB_Text_Border)
Next
For i = 0 To m
For j = 0 To n
StringID(i, j) = StringGadget(#PB_Any, Col(j), 20 * (1 + i), SpBreite(j), 20, "")
Next
Next
CloseGadgetList()
EndProcedure
Eine neugierige Frage: Was ist eine Screen-Oberfläche wie beim Z1013 , 32x32 Horizontal/Vertikal? Das klingt dann doch eher nach der "CanvasGadget-Konsole" (siehe oben, Link zum Code ist angegeben). Allerdings weiß ich nicht, wie man da eine feste Spaltenzahl definieren kann, da die Zeichenbreiten der verschiedenen Buchstaben und Zahlen nicht einheitlich sind. Oder weiß jemand, ob es einen Schriftfont mit einheitlicher Zeichenbreite gibt?
Oder nimm FreeBASIC, da genügt eine Programmzeile: WIDTH 32, 32. Ist für Konsolenanwendungen eh besser geeignet als PureBasic.
Viel Erfolg,
Lothar