Steuerung ListIconGadget
Verfasst: 22.10.2010 16:59
Moin Leute. Dann melde ich mich als blutiger Anfänger das erste Mal hier im Forum. Ich habe mir da was zusammengebastelt, von dem ich mal Eure Meinung als erfahrene PureBasic Anwender wissen möchte.
Ich habe mir zum Einstieg eine kleine Aufgabe gestellt: Programmierung eines Kassenbuchs mit Anbindung an die SQLite-Datenbank. Vergesst die Datenbank mal, so weit bin ich noch nicht... Begonnen habe ich mit der Fensterprogrammierung mit Eingabe, Änderung, Löschen von Einträgen. Was man in einer Tabelle halt so macht. Folgende Dinge sind eingebaut, die auch funktionieren:
- Automatisches Einfügen des Datensatzes bei Drücken der Enter-Taste (alternativ gibts dafür noch den Button, Ziel ist aber eine überwiegende Bedienung über die Tastatur)
- Löschen der Eingabefelder mit Ausnahme derer, die ich als Vorgabe für den nächsten Eintrag haben möchte
Ich kapiere natürlich, was ich da so gemacht habe aber (und das sind meine Fragen):
1. Ist das sinnvoll, wie ich die ganze Geschichte strukturiert habe?
2. Ist die Art der Umsetzung ok oder bin ich von hinten durch die Brust ins Auge gegangen?
Wehe hier lacht einer, ich fange grade erst an
Hier mal der Code:
Ich habe mir zum Einstieg eine kleine Aufgabe gestellt: Programmierung eines Kassenbuchs mit Anbindung an die SQLite-Datenbank. Vergesst die Datenbank mal, so weit bin ich noch nicht... Begonnen habe ich mit der Fensterprogrammierung mit Eingabe, Änderung, Löschen von Einträgen. Was man in einer Tabelle halt so macht. Folgende Dinge sind eingebaut, die auch funktionieren:
- Automatisches Einfügen des Datensatzes bei Drücken der Enter-Taste (alternativ gibts dafür noch den Button, Ziel ist aber eine überwiegende Bedienung über die Tastatur)
- Löschen der Eingabefelder mit Ausnahme derer, die ich als Vorgabe für den nächsten Eintrag haben möchte
Ich kapiere natürlich, was ich da so gemacht habe aber (und das sind meine Fragen):
1. Ist das sinnvoll, wie ich die ganze Geschichte strukturiert habe?
2. Ist die Art der Umsetzung ok oder bin ich von hinten durch die Brust ins Auge gegangen?
Wehe hier lacht einer, ich fange grade erst an

Hier mal der Code:
Code: Alles auswählen
;{- Enumerations / DataSections
;{ Windows
Enumeration
#Window_0
EndEnumeration
;}
;{ Toolbars
Enumeration
#Toolbar_Window_0
EndEnumeration
;}
;{ Menu bars
Enumeration
#Menu_Window_0
EndEnumeration
;}
;{ Menu/Toolbar items
Enumeration
#Menu_Window_0_Neu
#Menu_Window_0_Ffnen
#Menu_Window_0_Speichern
#Menu_Window_0_Schlieen
#Menu_Window_0_Beenden
#Menu_Window_0_Kopieren
#Menu_Window_0_Einfugen
#Toolbar_Window_0_New
#Toolbar_Window_0_Open
#Toolbar_Window_0_Save
EndEnumeration
;}
;{ Status bars
Enumeration
#StatusBar_Window_0
EndEnumeration
;}
;{ Gadgets
Enumeration
#Panel_0
#ComboBox_5
#Button_1
#Button_2
#Button_3
#ListIcon_4
#ComboBox_6
#String_7
#String_8
#String_9
#String_10
#String_11
#String_12
#String_13
#Button_14
#Button_15
#Button_16
EndEnumeration
;}
Define.l Event, EventWindow, EventGadget, EventType, EventMenu
;}
Procedure OpenWindow_Window_0()
If OpenWindow(#Window_0, 457, 207, 886, 561, "Datenbank Testfenster", #PB_Window_SystemMenu|#PB_Window_SizeGadget|#PB_Window_MinimizeGadget|#PB_Window_TitleBar)
If CreateMenu(#Menu_Window_0, WindowID(#Window_0))
MenuTitle("Datei")
MenuItem(#Menu_Window_0_Neu, "Neu")
MenuItem(#Menu_Window_0_Ffnen, "Öffnen")
MenuItem(#Menu_Window_0_Speichern, "Speichern")
MenuItem(#Menu_Window_0_Schlieen, "Schließen")
MenuBar()
MenuItem(#Menu_Window_0_Beenden, "Beenden")
MenuTitle("Bearbeiten")
MenuItem(#Menu_Window_0_Kopieren, "Kopieren")
MenuItem(#Menu_Window_0_Einfugen, "Einfügen")
MenuTitle("Extras")
EndIf
If CreateToolBar(#Toolbar_Window_0, WindowID(#Window_0))
ToolBarStandardButton(#Toolbar_Window_0_New, #PB_ToolBarIcon_New)
ToolBarStandardButton(#Toolbar_Window_0_Open, #PB_ToolBarIcon_Open)
ToolBarStandardButton(#Toolbar_Window_0_Save, #PB_ToolBarIcon_Save)
EndIf
If CreateStatusBar(#StatusBar_Window_0, WindowID(#Window_0))
EndIf
ButtonGadget(#Button_1, 5, 35, 120, 40, "Datenbank anlegen")
ButtonGadget(#Button_2, 140, 35, 120, 40, "Datenbank lesen")
ButtonGadget(#Button_3, 275, 35, 120, 40, "Datenbank schreiben")
PanelGadget(#Panel_0, 5, 85, 870, 415)
; Datensätze
AddGadgetItem(#Panel_0, -1, "Datensätze")
ListIconGadget(#ListIcon_4, 5, 10, 850, 280, "Mandant", 100, #PB_ListIcon_AlwaysShowSelection|#PB_ListIcon_GridLines|#PB_ListIcon_FullRowSelect)
AddGadgetColumn(#ListIcon_4, 1, "Jahr ", 100)
AddGadgetColumn(#ListIcon_4, 2, "Monat", 100)
AddGadgetColumn(#ListIcon_4, 3, "Einnahme", 100)
AddGadgetColumn(#ListIcon_4, 4, "Ausgabe", 100)
AddGadgetColumn(#ListIcon_4, 5, "Kassenbestand", 100)
AddGadgetColumn(#ListIcon_4, 6, "U-Schlüssel", 100)
AddGadgetColumn(#ListIcon_4, 7, "Skonto", 100)
AddGadgetColumn(#ListIcon_4, 8, "Belegdatum", 100)
AddGadgetColumn(#ListIcon_4, 9, "Belegtext", 100)
SendMessage_(GadgetID(#ListIcon_4), #LVM_SETCOLUMNWIDTH, 0, #LVSCW_AUTOSIZE_USEHEADER)
SendMessage_(GadgetID(#ListIcon_4), #LVM_SETCOLUMNWIDTH, 1, #LVSCW_AUTOSIZE_USEHEADER)
SendMessage_(GadgetID(#ListIcon_4), #LVM_SETCOLUMNWIDTH, 2, #LVSCW_AUTOSIZE_USEHEADER)
SendMessage_(GadgetID(#ListIcon_4), #LVM_SETCOLUMNWIDTH, 3, #LVSCW_AUTOSIZE_USEHEADER)
SendMessage_(GadgetID(#ListIcon_4), #LVM_SETCOLUMNWIDTH, 4, #LVSCW_AUTOSIZE_USEHEADER)
SendMessage_(GadgetID(#ListIcon_4), #LVM_SETCOLUMNWIDTH, 5, #LVSCW_AUTOSIZE_USEHEADER)
SendMessage_(GadgetID(#ListIcon_4), #LVM_SETCOLUMNWIDTH, 6, #LVSCW_AUTOSIZE_USEHEADER)
SendMessage_(GadgetID(#ListIcon_4), #LVM_SETCOLUMNWIDTH, 7, #LVSCW_AUTOSIZE_USEHEADER)
SendMessage_(GadgetID(#ListIcon_4), #LVM_SETCOLUMNWIDTH, 8, #LVSCW_AUTOSIZE_USEHEADER)
SendMessage_(GadgetID(#ListIcon_4), #LVM_SETCOLUMNWIDTH, 9, #LVSCW_AUTOSIZE_USEHEADER)
ComboBoxGadget(#ComboBox_5, 10, 295, 50, 20, #PB_ComboBox_Editable)
; Combo Box mit Mandantennummer vorbelegen
SetGadgetText(#ComboBox_5,"001")
AddGadgetItem(#ComboBox_5,0,"001")
AddGadgetItem(#ComboBox_5,-1,"002")
StringGadget(#String_7, 62, 295, 42, 20, "2010")
StringGadget(#String_8, 107, 295, 40, 20, "10")
StringGadget(#String_9, 150, 295, 55, 20, "")
StringGadget(#String_10, 213, 295, 50, 20, "")
ComboBoxGadget(#ComboBox_6, 335, 295, 65, 20, #PB_ComboBox_Editable)
; ComboBoxGadget mit Steuerschlüsseln vorbelegen
AddGadgetItem(#ComboBox_6,0,"19 %")
AddGadgetItem(#ComboBox_6,-1,"7 %")
SetGadgetText(#ComboBox_6,"19 %")
StringGadget(#String_11, 405, 295, 40, 20, "")
StringGadget(#String_12, 450, 295, 65, 20, "")
StringGadget(#String_13, 519, 295, 280, 20, "")
ButtonGadget(#Button_14, 800, 295, 50, 20, "Update")
ButtonGadget(#Button_15, 800, 315, 50, 20, "Change")
ButtonGadget(#Button_16, 800, 335, 50, 20, "Delete")
CloseGadgetList()
EndIf
EndProcedure
OpenWindow_Window_0()
AddKeyboardShortcut(#Window_0,#PB_Shortcut_Return,13)
;{- Event loop
Repeat
Event = WaitWindowEvent()
;Debug EventType
Select Event
; ///////////////////
Case #PB_Event_Gadget
EventGadget = EventGadget()
EventType = EventType()
If EventGadget = #Panel_0
ElseIf EventGadget = #Button_1
Gosub Datenbank_anlegen
ElseIf EventGadget = #Button_2
ElseIf EventGadget = #Button_3
ElseIf EventGadget = #ListIcon_4
ElseIf EventGadget = #ComboBox_6
ElseIf EventGadget = #ComboBox_5
ElseIf EventGadget = #String_7
ElseIf EventGadget = #String_8
ElseIf EventGadget = #String_9
ElseIf EventGadget = #String_10
ElseIf EventGadget = #String_11
ElseIf EventGadget = #String_12
ElseIf EventGadget = #String_13
;Debug EventType
;If EventType = 14001
;Gosub ListIcon_Update
;EndIf
ElseIf EventGadget = #Button_14
Gosub ListIcon_Update
ElseIf EventGadget = #Button_15
Gosub ListIcon_Change
ElseIf EventGadget = #Button_16
Gosub ListIcon_Delete
EndIf
; /////////////////
Case #PB_Event_Menu
EventMenu = EventMenu()
If EventMenu = #Menu_Window_0_Neu
ElseIf EventMenu = #Menu_Window_0_Ffnen
ElseIf EventMenu = #Menu_Window_0_Speichern
ElseIf EventMenu = #Menu_Window_0_Schlieen
ElseIf EventMenu = #Menu_Window_0_Beenden
ElseIf EventMenu = #Menu_Window_0_Kopieren
ElseIf EventMenu = #Menu_Window_0_Einfugen
ElseIf EventMenu = #Toolbar_Window_0_New
ElseIf EventMenu = #Toolbar_Window_0_Open
ElseIf EventMenu = #Toolbar_Window_0_Save
ElseIf EventMenu = 13
Gosub ListIcon_Update
EndIf
; ////////////////////////
Case #PB_Event_CloseWindow
EventWindow = EventWindow()
If EventWindow = #Window_0
CloseWindow(#Window_0)
Break
EndIf
EndSelect
ForEver
;
;}
;///////////////////////
;///////////////////////
End
;///////////////////////
;///////////////////////
;{ Button_1 (Datenbank anlegen)
;////////////////////
Datenbank_anlegen:
Debug "Button 1 legt eine Datenbank an"
UseSQLiteDatabase()
Filename$ = OpenFileRequester("Wähle einen Dateinamen", "PureBasic.sqlite", "*.sqlite|*.sqlite", 0)
If CreateFile(0, Filename$)
Debug "Datenbank-Datei erstellt"
CloseFile(0)
EndIf
If OpenDatabase(0, Filename$, "", "")
Debug "Verbunden mit PureBasic.sqlite"
If DatabaseUpdate(0, "CREATE TABLE info (test VARCHAR(255));")
Debug "Tabelle erstellt"
EndIf
EndIf
Return
;////////////////////
;}
;{ Button_14 (ListIcon Update)
;////////////////////
ListIcon_Update:
Debug "Button 14 legt einen neuen Eintrag in der Tabelle an"
Mandant.s = GetGadgetText(#ComboBox_5)
Jahr.s = GetGadgetText(#String_7)
Monat.s = GetGadgetText(#String_8)
Einnahme.s = GetGadgetText(#String_9)
Ausgabe.s = GetGadgetText(#String_10)
Steuer.s = GetGadgetText(#ComboBox_6)
Skonto.s = GetGadgetText(#String_11)
Belegdatum.s = GetGadgetText(#String_12)
Belegtext.s = GetGadgetText(#String_13)
AddGadgetItem(#ListIcon_4,-1,Mandant + Chr(10) + Jahr + Chr(10) + Monat + Chr(10) + Einnahme + Chr(10) + Ausgabe + Chr(10) + Chr(10) + Steuer + Chr(10) + Skonto + Chr(10) + Belegdatum + Chr(10) + Belegtext)
SetGadgetText(#string_9,"")
SetGadgetText(#string_10,"")
SetGadgetText(#string_11,"")
SetGadgetText(#string_13,"")
SetActiveGadget(#string_9)
Return
;////////////////////
;}
;{ Button_15 (ListIcon Eintrag ändern)
;////////////////////////
ListIcon_Change:
Debug "ListIcon Change gedrückt"
Mandant.s = GetGadgetText(#ComboBox_5)
Jahr.s = GetGadgetText(#String_7)
Monat.s = GetGadgetText(#String_8)
Einnahme.s = GetGadgetText(#String_9)
Ausgabe.s = GetGadgetText(#String_10)
Steuer.s = GetGadgetText(#ComboBox_6)
Skonto.s = GetGadgetText(#String_11)
Belegdatum.s = GetGadgetText(#String_12)
Belegtext.s = GetGadgetText(#String_13)
Position = GetGadgetState(#ListIcon_4)
Debug Position
If Position > -1
SetGadgetItemText(#ListIcon_4,Position,Mandant,0)
SetGadgetItemText(#ListIcon_4,Position,Jahr,1)
SetGadgetItemText(#ListIcon_4,Position,Monat,2)
SetGadgetItemText(#ListIcon_4,Position,Einnahme,3)
SetGadgetItemText(#ListIcon_4,Position,Ausgabe,4)
SetGadgetItemText(#ListIcon_4,Position,Steuer,6)
SetGadgetItemText(#ListIcon_4,Position,Skonto,7)
SetGadgetItemText(#ListIcon_4,Position,Belegdatum,8)
SetGadgetItemText(#ListIcon_4,Position,Belegtext,9)
SetGadgetText(#string_9,"")
SetGadgetText(#string_10,"")
SetGadgetText(#string_11,"")
SetGadgetText(#string_13,"")
SetActiveGadget(#string_9)
EndIf
Return
;////////////////////////
;}
;{ Button_16 (ListIcon Eintrag löschen)
;////////////////////////
ListIcon_Delete:
Debug "ListIcon Delete gedrückt"
Position = GetGadgetState(#ListIcon_4)
Debug Position
RemoveGadgetItem(#ListIcon_4,Position)
Return
;////////////////////////
;}