Checkbox in jedem Feld einer Tabelle
Checkbox in jedem Feld einer Tabelle
Hallo,
ich möchte eine Tabelle erstellen mir Spaltenüberschriften und in der ersten Spalte eine Bezeichnung z.B. Name, in den übrigen Felder möchte ich jeweils eine Checkbox haben. Ziel z.B. Tagesanwesendheit von Schülern.
Einfach ein Klick in die Checkbox, Schüler ist da.
Wie kann ich das realisieren. Suche im Forum: irgendwie nichts gefunden.
Immer nur die erste Spalte.
Gruß
Dysti
ich möchte eine Tabelle erstellen mir Spaltenüberschriften und in der ersten Spalte eine Bezeichnung z.B. Name, in den übrigen Felder möchte ich jeweils eine Checkbox haben. Ziel z.B. Tagesanwesendheit von Schülern.
Einfach ein Klick in die Checkbox, Schüler ist da.
Wie kann ich das realisieren. Suche im Forum: irgendwie nichts gefunden.
Immer nur die erste Spalte.
Gruß
Dysti
eGrid bietet soetwas an. Ist eine UserLib und findet sich bei
http://www.purebasic.fr/english/viewtop ... ight=egrid
Ist etwas aufwändiger, aber mit Standardcontrols kann man sich eine Tabelle basteln (StringGadgets und CheckBoxGadgets). Ich habe irgendwann mal so ein minimalistisches StringGrid zusammengefummelt:
Ich hoffe, du weisst was ich meine.
Gruß Karl
_______________________________________________
Whoops,
meint er, dass die Checkbox nur in der ersten Spalte stehen soll? Na dann ist dat ja geschenkt.
Gruß Karl
http://www.purebasic.fr/english/viewtop ... ight=egrid
Ist etwas aufwändiger, aber mit Standardcontrols kann man sich eine Tabelle basteln (StringGadgets und CheckBoxGadgets). Ich habe irgendwann mal so ein minimalistisches StringGrid zusammengefummelt:
Code: Alles auswählen
;Stringgrid
Enumeration
#strGrid_left
#strGrid_mid
#strGrid_right
EndEnumeration
#Zwischenraum = 1
Structure cell
id.l
wert.s
EndStructure
Global strRows.l, strColumns.l
Dim zelle.cell(0,0)
strRows = 0
strColumns = 0
Procedure.l strGrid_create(Window.l, x.l, y.l, width.l, height.l, rows.l , columns.l, align.l)
;erzeugt ein Containergadget mit einem Stringgrid (Anordnung von Stringgadgets)
Protected hstrGrid.l, i.l, j.l, hoehe.l, breite.l, flag.l, font.l
Dim zelle.cell(rows-1, columns-1)
strRows = rows
strColumns = columns
hstrGrid = ContainerGadget(#PB_Any, x, y, width, height, #PB_Container_Single)
hoehe = Int((height-(rows-1) * #Zwischenraum) / rows)
breite = Int((width-(columns-1)*#Zwischenraum) / columns)
Debug hoehe
Debug breite
Select align
Case #strGrid_left
flag = #es_left
Case #strGrid_right
flag = #es_right
Case #strGrid_mid
flag = #es_center
EndSelect
font = LoadFont(0, "Courier", 12)
For i = 0 To rows - 1
For j = 0 To columns - 1
zelle(i, j)\id = StringGadget(#PB_Any, (breite+#Zwischenraum)*j, (hoehe+#Zwischenraum)*i, breite, hoehe, "", flag)
SetGadgetFont(zelle(i, j)\id, font)
Next j
Next i
CloseGadgetList()
ProcedureReturn hstrGrid
EndProcedure
Procedure strGrid_setValue(row.l, column.l, value.s)
If (row <= strRows) And (column <= strColumns) And (row > 0) And (column > 0)
zelle(row-1, column-1)\wert = value
SetGadgetText(zelle(row-1, column-1)\id, value)
EndIf
EndProcedure
Procedure.s strGrid_getValue(row.l, column.l)
If (row <= strRows) And (column <= strColumns) And (row > 0) And (column > 0)
ProcedureReturn zelle(row-1, column-1)\wert
EndIf
EndProcedure
Procedure strGrid_lockCell(row.l, column.l, flag.l)
If (row <= strRows) And (column <= strColumns) And (row > 0) And (column > 0)
SendMessage_(GadgetID(zelle(row-1, column-1)\id), #EM_SETREADONLY, flag, 0)
EndIf
EndProcedure
Gruß Karl
_______________________________________________
Whoops,
meint er, dass die Checkbox nur in der ersten Spalte stehen soll? Na dann ist dat ja geschenkt.
Gruß Karl
Zuletzt geändert von Karl am 27.04.2006 11:44, insgesamt 1-mal geändert.
The Kopyright Liberation Front also known as the justified ancients of Mumu!
PB 5.X
PB 5.X
http://www.purebasic.fr/german/viewtopic.php?t=365
oder so?
oder so?
Code: Alles auswählen
;PB 3.94
Enumeration
#Window_0
#ListIcon_0
EndEnumeration
If OpenWindow(#Window_0, 216, 0, 600, 300, #PB_Window_SystemMenu | #PB_Window_SizeGadget | #PB_Window_TitleBar , "New window ( 0 )")
If CreateGadgetList(WindowID())
ListIconGadget(#ListIcon_0, 0, 0, WindowWidth(), WindowHeight(), "Anwesend", 100,#PB_ListIcon_CheckBoxes|#PB_ListIcon_GridLines)
AddGadgetColumn(#Listicon_0,1,"Vorname",50)
AddGadgetColumn(#Listicon_0,2,"Nachname",50)
EndIf
EndIf
AddGadgetItem(#ListIcon_0,-1,""+Chr(10)+"Herbert"+Chr(10)+"Meier")
AddGadgetItem(#ListIcon_0,-1,""+Chr(10)+"Fred"+Chr(10)+"Müller")
AddGadgetItem(#ListIcon_0,-1,""+Chr(10)+"Hansi"+Chr(10)+"Huber")
AddGadgetItem(#ListIcon_0,-1,""+Chr(10)+"Seppl"+Chr(10)+"Schmidt")
AddGadgetItem(#ListIcon_0,-1,""+Chr(10)+"Alois"+Chr(10)+"Alzheime")
; autmatisches Anpassen der Spaltenbreiten
For i=0 To 3
SendMessage_(GadgetID(#LIsticon_0),#LVM_SETCOLUMNWIDTH,i,#LVSCW_AUTOSIZE_USEHEADER)
Next i
Repeat
Event = WaitWindowEvent()
WindowID = EventWindowID()
GadgetID = EventGadgetID()
EventType = EventType()
If Event = #PB_EventGadget
If GadgetID = #ListIcon_0
EndIf
EndIf
Until Event = #PB_Event_CloseWindow
End
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.
Hallo Karl,
du hast das schon richtig verstanden. In der ersten Spalte der Name und dann in der Reihe ca. 31 Checkboxen. Für jeden Tag eine.
Das Beispiel von bobobo ist nicht richtig und genau andersherum.
Die Lib kann ich wohl nicht nehmen, da ich mit 4er Version arbeite.
Dein Beispiel werde ich erstmal als Grundlage nehmen.
Vielleicht entwickeln sich noch andere Ideen.
Danke erstmal.
Dysti
du hast das schon richtig verstanden. In der ersten Spalte der Name und dann in der Reihe ca. 31 Checkboxen. Für jeden Tag eine.
Das Beispiel von bobobo ist nicht richtig und genau andersherum.
Die Lib kann ich wohl nicht nehmen, da ich mit 4er Version arbeite.
Dein Beispiel werde ich erstmal als Grundlage nehmen.
Vielleicht entwickeln sich noch andere Ideen.
Danke erstmal.
Dysti

zur Strafe habe ich mir 'ne andere Lösung aufgebrummt
ohne ListIcon und mit PB 3.94
die schülerListe wird bei ProgrammEnde gespeichert
Code: Alles auswählen
Enumeration
#Window
#schlist
EndEnumeration
Structure schueler
Nachname.s
Vorname.s
Tage.s
EndStructure
Structure CheckBoxen
Nummer.l
Stringfeld.l
EndStructure
CopyFile("Anwesenheitsliste.schueler","Anwesenheitsliste.schueler.bak")
ReadFile(#schlist,"Anwesenheitsliste.schueler")
NewList schueler.schueler()
NewList Stringfelder.l()
NewList CheckBoxen.Checkboxen()
While Eof(#Schlist)=0
count+1
AddElement(schueler())
tmp.s=ReadString()
schueler()\Vorname = Trim (StringField(tmp,2,";"))
schueler()\Nachname= Trim (StringField(tmp,1,";"))
tmp=RemoveString(tmp,schueler()\Vorname)
tmp=RemoveString(tmp,schueler()\Nachname)
schueler()\Tage=tmp
Wend
CloseFile(#schlist)
OpenWindow(#Window,0,0,800,600,#PB_Window_Invisible|#PB_Window_SystemMenu,"Anwesenheitsliste")
CreateGadgetList(WindowID(#window))
sh.l=20
For i =0 To count-2 ;Anzahl der Schüler
SelectElement(schueler(),i)
AddElement (Stringfelder())
Stringfelder()=StringGadget(#PB_Any,0,sh*i,200,sh,schueler()\Nachname+" "+schueler()\Vorname)
cb=15
For day=1 To 32 ;Anzahl der Tage pro Monat
AddElement(Checkboxen())
CheckBoxen()\Nummer=CheckBoxGadget(#PB_Any,cb*(day+1)+200,sh*i,cb,sh,"")
CheckBoxen()\Stringfeld=Stringfelder()
If StringField(schueler()\Tage,day+2,";")="1"
SetGadgetState(checkBoxen()\Nummer,#True)
EndIf
Next day
Next i
HideWindow(#Window,0)
Repeat
Until WaitWindowEvent()=#PB_Event_CloseWindow
SelectElement(Checkboxen(),0)
schueleralt.s=GetGadgetText(Checkboxen()\Stringfeld)
outschueler.s+ StringField(schueleralt,1," ")+";"+StringField(schueleralt,2," ")+";"
outcb.s
outschueler.s
If CreateFile(#schlist,"Anwesenheitsliste.schueler")
SelectElement(Checkboxen(),0)
schueler.s=GetGadgetText(Checkboxen()\Stringfeld)
ForEach Checkboxen()
schueler.s=GetGadgetText(Checkboxen()\Stringfeld)
If schueleralt<>schueler
Nextschueler=1
outall.s=outschueler.s+outcb.s
outschueler.s=""
outcb.s=""
outschueler.s+ StringField(schueler,1," ")+";"+StringField(schueler,2," ")+";"
schueleralt=schueler
EndIf
If schueleralt=schueler
outcb.s+Str(GetGadgetState(Checkboxen()\Nummer))+";"
EndIf
If outall
WriteStringN(outall)
outall.s=""
EndIf
Next
WriteStringN("")
WriteStringN("")
Else
MessageRequester("schwerwiegend","Anwesenheitsliste.schueler konnte nicht gespeichert werden",#MB_ICONERROR)
EndIf
unter den Namen Anwesenheitslist.schueler zu liegen hat
(!! Die Leerzeichen am Ende sind Pflicht!)
Code: Alles auswählen
Blutwurst;Bernd
Fleissig;Fritz
Fechter;Friedolin
Guck;Gustav
Hackenschlag;Hubert
Karst;Karl
Meier;Max
Schmidt;Seppl
Vollwurst;Volker
Listig;Lisa
Faul;Frieda
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.
Misch mich mal ein ... :)
Also ich würde zuerst mal Jahr und Monat mit einbinden. Und dann nur den aktuellen Tag mit Checkboxen ausführen, die anderen Tage als "0" und "1" schreiben. Dann ein Pfeil nach links und rechts, so daß man einen Tag zurück oder vor kann - zum korrigieren. Wenn ich dann noch mehr wollte, würde ich Attribute dazu einführen, wie "krank", "entschuldigt", "unentschudigt", etc. damit man nachher das auch noch nachvollziehen kann, wenn man die Schuljahres-Statistik produziert aus den CSV Dateien.
Nur so als kleine Hilfestellung. Das ganze dann (auch) auf dem PDA (Ups, PB kann das ja noch nicht) für mehrere Klassen und es wäre ein klasse Werkzeug.
Viele Grüße
Sigi
Also ich würde zuerst mal Jahr und Monat mit einbinden. Und dann nur den aktuellen Tag mit Checkboxen ausführen, die anderen Tage als "0" und "1" schreiben. Dann ein Pfeil nach links und rechts, so daß man einen Tag zurück oder vor kann - zum korrigieren. Wenn ich dann noch mehr wollte, würde ich Attribute dazu einführen, wie "krank", "entschuldigt", "unentschudigt", etc. damit man nachher das auch noch nachvollziehen kann, wenn man die Schuljahres-Statistik produziert aus den CSV Dateien.
Nur so als kleine Hilfestellung. Das ganze dann (auch) auf dem PDA (Ups, PB kann das ja noch nicht) für mehrere Klassen und es wäre ein klasse Werkzeug.
Viele Grüße
Sigi
Hallo Zusammen,
das sind Beiträge die einen weiter bringen. Ich werde alle eure Anregungen in meinem endgültigen Programm verwenden, allerdings werde ich eine Access-Datenbank verwenden, weil da gleich die Vorteile von SQL nutzen kann. Somit habe ich die Daten gleich sortiert und für weitere statistische Verarbeitung zur Verfügung. Damit stehen ein alle Wege offen.
das sind Beiträge die einen weiter bringen. Ich werde alle eure Anregungen in meinem endgültigen Programm verwenden, allerdings werde ich eine Access-Datenbank verwenden, weil da gleich die Vorteile von SQL nutzen kann. Somit habe ich die Daten gleich sortiert und für weitere statistische Verarbeitung zur Verfügung. Damit stehen ein alle Wege offen.