Seite 1 von 1
callback bei PureColor für PB4
Verfasst: 12.07.2006 21:35
von Graffiti
Hallo habe da ein Problem mit dem neuen PureColor
vorher bei PB3.94 konnte ich im Windowcallback mit
Code: Alles auswählen
ReturnValue = PureCOLOR_CallBack(WindowID, message, wParam, lParam, ReturnValue)
die Farben im Listicon automatisch nach dem löschen einer Zeile aktualisieren. (trifft nur auf Zeilen außerhalb des vertikalen Scrollbereichs zu)
jetzt ist nur noch ein schmaler gelber Streifen zu sehen
zuvor wurde mit
Code: Alles auswählen
PureCOLOR_SetGadgetColorEx(#ListGadget,-1, RGB(255, 255, 223), RGB(255, 255, 255), #PureCOLOR_LV_AlternateColors)
die Farbe deklariert
bei PureColor für PB4 fehlt der Befehl, weiß jemand eine Lösung

Verfasst: 12.07.2006 21:58
von nicolaus
Hi
Schau dir mal in der hilfe von PureColor die function "PureCOLOR_SetCellColorCallback()" an.
Ich mußte selber von 3.94 auf PB 4 umstellen und das geht super im ListIconGadget.
hoffe das hilft, wenn nicht melde dich einfach nochmal.
Gruß,
Nico
Verfasst: 12.07.2006 22:11
von Graffiti
jabs probiert, aber irgendwas mache ich da verkehrt
das ganze Listicon flackert nur noch
Code: Alles auswählen
Procedure MyCellColorCallback(GadgetNumber.l, CellRow.l, CellColumn.l, *TextColor.Long, *BackColor.Long, *FontID.Long)
PureCOLOR_SetGadgetColorEx(#ListGadget,-1, RGB(255, 255, 223), RGB(255, 255, 255), #PureCOLOR_LV_AlternateColors)
EndProcedure
Verfasst: 13.07.2006 00:23
von nicolaus
Hier nochmal das orginal Example aus der Hilfe der PureCOLOR lib.
Schau dir das mal an denn du machst das falsch mit dem callback.
Code: Alles auswählen
FontID = LoadFont(0, "Courier New", 9, #PB_Font_Bold)
;
Procedure MyCellColorCallback(GadgetNumber.l, CellRow.l, CellColumn.l, *TextColor.LONG, *BackColor.LONG, *FontID.LONG)
Shared FontID
If GadgetNumber = 1
CellText.s = GetGadgetItemText(GadgetNumber, CellRow, CellColumn)
Debug Str(CellRow) + ":" + Str(CellColumn) + ">" + CellText
Select CellText
Case "Red"
*TextColor\l = #Red
Debug "-> Red"
Case "Blue"
*BackColor\l = #Blue
*TextColor\l = #White
Debug "-> Blue"
Case "Green"
*TextColor\l = #Green
Debug "-> Green"
Default
*FontID\l = FontID
Debug "-> Font"
EndSelect
EndIf
EndProcedure
; Create Window
OpenWindow(0, 100, 300, 400, 200, "PureCOLOR test : cell callback demo", #PB_Window_SystemMenu)
If CreateGadgetList(WindowID(0))
ListIconGadget(1, 1, 1, 300, 160, "0", 100, #PB_ListIcon_GridLines | #PB_ListIcon_FullRowSelect)
;
AddGadgetColumn(1, 1, "1", 100)
AddGadgetColumn(1, 2, "2", 100)
AddGadgetItem(1, -1, "0:0" + Chr(10) + "0:1" + Chr(10) + "Red")
AddGadgetItem(1, -1, "1:0" + Chr(10) + "1:1" + Chr(10) + "1:2")
AddGadgetItem(1, -1, "Blue" + Chr(10) + "Green" + Chr(10) + "2:2")
AddGadgetItem(1, -1, "3:0" + Chr(10) + "Red" + Chr(10) + "3:2")
AddGadgetItem(1, -1, "Red" + Chr(10) + "4:1" + Chr(10) + "Red")
AddGadgetItem(1, -1, "Green" + Chr(10) + "Blue" + Chr(10) + "5:2")
AddGadgetItem(1, -1, "6:0" + Chr(10) + "6:1" + Chr(10) + "6:2")
AddGadgetItem(1, -1, "Red" + Chr(10) + "Blue" + Chr(10) + "7:2")
EndIf
PureCOLOR_SetCellColorCallback(0, @MyCellColorCallback())
Repeat
EventID.l = WaitWindowEvent()
If EventID = #PB_Event_CloseWindow
Break
EndIf
ForEver
;
End
Was dabei zu beachten ist , ist was in dem CallBack steht.
Achte mal auf folgendes:
Du darfst
NICHT die Funktion PureCOLOR_SetGadgetColorEx() in dem callback aufrufen!!!
Gruß,
Nico
Verfasst: 13.07.2006 08:02
von Graffiti
das habe ich schon versucht, aber wenn ich die
definiere färbt es mir alle Zeilen ein und nicht nur jede 2. wie bei
Code: Alles auswählen
PureCOLOR_SetGadgetColorEx(#ListGadget,-1, RGB(x,x,x), RGB(x,x,x), #PureCOLOR_LV_AlternateColors)
welchen Trick gibts dabei
Verfasst: 13.07.2006 09:03
von Kiffi
> welchen Trick gibts dabei
ich habe mal einen Samplecode von gnozal auf das nötigste reduziert. Also
bei mir läuft alles wie gewünscht.
(Wenn man das Fenster schliessen will, dann wird die aktuell markierte
Zeile gelöscht. Wenn alle Zeilen gelöscht sind, dann beendet sich das
Programm)
Code: Alles auswählen
OpenWindow(0, #PB_Ignore, #PB_Ignore, 400, 200, "PureCOLOR test", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
If CreateGadgetList(WindowID(0))
ListIconGadget(2, 5, 5, 390, 180, "", 386, #PB_ListIcon_GridLines | #PB_ListIcon_FullRowSelect | #PB_ListIcon_AlwaysShowSelection)
AddGadgetItem(2, -1, "ListIconGadget 2-1")
AddGadgetItem(2, -1, "ListIconGadget 2-2")
AddGadgetItem(2, -1, "ListIconGadget 2-3")
AddGadgetItem(2, -1, "ListIconGadget 2-4")
AddGadgetItem(2, -1, "ListIconGadget 2-5")
EndIf
; Gadget colors
PureCOLOR_SetGadgetColorEx(2, RGB(0,0,0), RGB(255, 255, 255), RGB(255, 255, 223), #PureCOLOR_LV_AlternateColors)
Repeat
WWE = WaitWindowEvent()
Select WWE
Case #PB_Event_CloseWindow
RemoveGadgetItem(2, GetGadgetState(2))
EndSelect
Until CountGadgetItems(2)=0
Vielleicht hast Du ja an einer anderen Stelle Deines Programmes Code,
der mit PureColor kollidiert.
Grüße ... Kiffi
Verfasst: 13.07.2006 10:29
von Graffiti
habe jetzt auf 30 Einträge erhöht und das RemoveGadgetItem verändert
dann siehst du den Effekt den ich meine.
Code: Alles auswählen
OpenWindow(0, #PB_Ignore, #PB_Ignore, 400, 200, "PureCOLOR test", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
If CreateGadgetList(WindowID(0))
ListIconGadget(2, 5, 5, 390, 180, "", 386, #PB_ListIcon_GridLines | #PB_ListIcon_FullRowSelect | #PB_ListIcon_AlwaysShowSelection)
For a = 1 To 30
AddGadgetItem(2, -1, "ListIconGadget 2-" + Str(a))
Next
EndIf
; Gadget colors
PureCOLOR_SetGadgetColorEx(2, RGB(0,0,0), RGB(255, 255, 255), RGB(255, 255, 223), #PureCOLOR_LV_AlternateColors)
Repeat
WWE = WaitWindowEvent()
Select WWE
Case #PB_Event_CloseWindow
RemoveGadgetItem(2, 0)
EndSelect
Until CountGadgetItems(2)=0
Verfasst: 13.07.2006 10:46
von Kiffi
> dann siehst du den Effekt den ich meine.
OK. Jetzt kann ich es nachvollziehen.
Schneller Workaround:
Packe direkt hinter die RemoveGadgetItem()-Zeile folgenden Code:
Code: Alles auswählen
InvalidateRect_(GadgetID(DeinListIconGadget),0,1)
UpdateWindow_(GadgetID(DeinListIconGadget))
Grüße ... Kiffi
Verfasst: 13.07.2006 11:21
von Graffiti
Thanks @ Kiffi
getestet und funktioniert, jetzt muß ichs nur noch auf mein Programm zuhause übertragen.
gruß Graffiti
Verfasst: 13.07.2006 15:40
von Graffiti
habe gerade die 2 Zeilen eingebaut, funktioniert 1a
Danke und gruß Graffiti