Seite 1 von 1
[gelöst] ListIconGadget-Zeile ersetzen
Verfasst: 09.10.2007 22:57
von scholly
moin, moin...
Wie ersetze ich am geschicktesten eine komplette Zeile eines LIG ?
Ein analog zu
AddGadgetItem habe ich nicht gefunden (oder wieder nicht richtig gesucht

).
Im Moment schwebt mir vor:
a) Zelle für Zelle in einer Schleife ersetzen
oder
b) einfach eine neue Zeile an der Stelle der zu ändernden einfügen und dann die nächste löschen.
Ich tendiere zu b) oder gibts 'nen besseren Weg ?
bis denne... scholly
Verfasst: 09.10.2007 23:19
von roherter
Wenn Textmässig was anderes drin stehen soll müsste eigenlich SetGadgetItemText() gehen, wenn ich mich nicht irre!
Verfasst: 09.10.2007 23:35
von scholly
roherter hat geschrieben:Wenn Textmässig was anderes drin stehen soll müsste eigenlich SetGadgetItemText() gehen, wenn ich mich nicht irre!
Ja, das wäre Fall a), denn das gilt IMHO nicht für die komplette
Zeile sondern nur eine
Zelle:
HTML Help hat geschrieben:Ändert den Text des angegebenen 'Eintrag's (in der 'Spalte') beim angegebenen '#Gadget'.
Verfasst: 10.10.2007 00:20
von Kaeru Gaman
jetzt mal nur theorie, ich hab selber mit ListIconGadget noch nix gemacht/machen brauchen.
aber in der theorie ist ne tabelle ne tabelle.
wenn es dir wirklich auf ersetzen ankommt, weil du irgendwie pointer mitschreibst oder sonstwas,
wäre es natürlich "korrekter", die zeile zu ersetzen indem du mit einer schleife alle zellen überschreibst.
aber solange es nicht nötig ist, dass der physikalische speicherort erhalten bleibt,
bist du mit einfügen und löschen einfacher unterwegs.
wenn du woanders ersetzen willst, als sich der zeilenzeiger grade befand,
musst du den natürlich zwischenspeichern, damit du ihn nachher wieder auf den ursprung setzen kannst.
Verfasst: 10.10.2007 00:36
von edel
Mit WinApi geht es natuerlich einfacher
Code: Alles auswählen
Procedure ChangeCellContent(gadget,row,col,content.s,maxColumn)
Protected cont.s
For i = 0 To maxColumn - 1
If col = i
cont + content
Else
cont + GetGadgetItemText(gadget,row,i)
EndIf
cont + #LF$
Next
RemoveGadgetItem(gadget,row)
AddGadgetItem(gadget,row,cont)
EndProcedure
hwnd = OpenWindow(0,#PB_Ignore,#PB_Ignore,410,310,"Test")
CreateGadgetList(hwnd)
ListIconGadget(0,100,5,300,300,"1",30,#PB_ListIcon_GridLines)
AddGadgetColumn(0,1,"2",30)
AddGadgetColumn(0,2,"3",30)
AddGadgetColumn(0,3,"bla",200)
ButtonGadget(1,10,10,75,23,"Change")
For i = 0 To 9
AddGadgetItem(0,i,Str(i)+#LF$+Str(i)+#LF$+Str(i)+#LF$+Str(i)+#LF$)
Next
Repeat
event = WaitWindowEvent()
If event = #PB_Event_Gadget
If EventGadget() = 1
For i = 0 To CountGadgetItems(0) - 1
ChangeCellContent(0,i,2,"666",4)
Next
EndIf
EndIf
Until event = #PB_Event_CloseWindow
Verfasst: 10.10.2007 10:39
von AND51
> Wie ersetze ich am geschicktesten eine komplette Zeile eines LIG ?
Löschen und einfügen:
Code: Alles auswählen
; Zeigt mögliche Flags des ListIconGadgets in Aktion...
If OpenWindow(0, 0, 0, 640, 300, "ListIconGadgets", #PB_Window_SystemMenu | #PB_Window_ScreenCentered) And CreateGadgetList(WindowID(0))
; linke Spalte
ListIconGadget(5, 5, 5, 555, 222, "", 200,#PB_ListIcon_GridLines)
For b = 2 To 4 ; fügt 3 weitere Spalten zu jedem ListIcon hinzu
AddGadgetColumn(5, b, "Column " + Str(b), 65)
Next
For b = 0 To 10 ; fügt 10 Einträge auf jeder Zeile der ListIcons hinzu
AddGadgetItem(5, b, "Item "+Str(b)+Chr(10)+"Item "+Str(b)+Chr(10)+"Item "+Str(b)+Chr(10)+"Item "+Str(b))
Next
Repeat : Until WaitWindowEvent() = #PB_Event_CloseWindow
RemoveGadgetItem(5, 3)
AddGadgetItem(5, 3, "DIESE"+Chr(10)+"ZEILE"+Chr(10)+"WIRD"+Chr(10)+"ERSETZT")
Repeat : Until WaitWindowEvent() = #PB_Event_CloseWindow
EndIf
Um den Effekt zu sehen, bitte einmal Fenster schließen, war zu faul,
EventGadget() einzubauen.
Daraus kann man ein kleines Macro machen:
Code: Alles auswählen
Macro ReplaceGadgetItem(Gadget, Item, Text)
RemoveGadgetItem(Gadget, Item)
AddGadgetItem(Gadget, Item, Text)
EndMacro
> Ein analog zu AddGadgetItem habe ich nicht gefunden
Ist es das, was du dir vorgestellt hast?
Verfasst: 10.10.2007 12:37
von scholly
AND51 hat geschrieben:Ist es das, was du dir vorgestellt hast?
Jo, Zeile schreiben/löschen hab ich letztendlich (ohne Makro) eingebaut.
@edel:
API nehm ich eigentlich nur, wenns mit PB-Boardmitteln nicht geht, und Zelle für Zelle wäre mühsamer, weil ich den Aufbau des kompletten Strings aus einer anderen Routine (Hinzufügen eines Datensatzes) übernehmen kann.
@KG
Der Benutzer öffnet mit einem Doppelklick auf eine Zeile ein 2. Fenster mit einer Maske, in dem der Datensatz Feld für Feld geändert werden kann. Jenachdem, wie man das nutzten will, kann man die Inhalte nach den Änderungen nun als neuen Datensatz hinzufügen oder als Korrektur den alten Datensatz ersetzen.
Insofern nix kritisches; ich bin nur darüber gestolpert, daß ich in der SQLite-DB per (
Replace in ........) einfach ersetzen konnte, aber was entsprechendes fürs LIG nicht offensichtlich war.
Danke... scholly