I've some problems implementing a callback to show bars in the last four columns of a listicongadget -- additionally ther should be a color marker in one of the cells. But this (red) background color will be seen also within the last 4 columns


Here's the code - you may have a look at it:
Code: Select all
; Define
EnableExplicit
Global i
Global MonthZ; Höhe des Monatsreportfensters
Global CallbackReturnValue; Callback-Variablen
Global CallbackX; hauptsächlich für Balkengraphik des Monatsreports verwendet
Global CallbackY;
Global CallbackZ;
Global CallbackM;
Global CallbackN;
Global CallbackO;
Global CallbackDC;
Global *CallbackMessage.NM_LISTVIEW
Global *CallbackCustomdraw.NMLVCUSTOMDRAW
Global *CallbackDrawItem.DRAWITEMSTRUCT
Global CallbackText.s
Global Rect.RECT; in Callback und bei Initialisierung benötigt
Enumeration
#MonthTable
#monthID; Monatsreport
EndEnumeration
Global planecol,backcol; Brushes für Bodenplatte
Global linecol,rectcol; Pen/Brush für Callback-Routine
Global lineold,rectold; Sicherung der alten Pen/Brush
Global month,monthreportopen; Handle und Status für Monats-Reportfenster
; EndDefine
Procedure WindowCallback(WindowID,Message,wParam,lParam)
CallbackReturnValue=#PB_ProcessPureBasicEvents
Select Message
Case #WM_NOTIFY
*CallbackMessage=lParam
; nur im Monatsreportfenster spielt es sich ab...
If *CallbackMessage\hdr\hwndFrom=GadgetID(#MonthTable); [oder] If GetDlgCtrlID_(*CallbackMessage\hdr\hwndFrom)=#MonthTable
Select *CallbackMessage\hdr\code
; Benutzerdefiniertes Malen der Balken (Zeit, Länge, Geschwindigkeit, Pace)...
Case #NM_CUSTOMDRAW
; If MonthType>#MonthButtonAll
*CallbackCustomdraw.NMLVCUSTOMDRAW=lParam
CallbackX=*CallbackCustomdraw\nmcd\dwItemSpec; Zeile
CallbackY=*CallbackCustomdraw\iSubitem; Spalte der jeweiligen Balkengraphik
Debug Str(CallbackX)+":"+Str(Callbacky)
If CallbackY>=5
Select *CallbackCustomdraw\nmcd\dwDrawStage
;Case #CDDS_PREPAINT; Gitterlinien verschwinden :-(
;CallbackReturnValue=#CDRF_NOTIFYITEMDRAW
Case #CDDS_ITEMPREPAINT
CallbackReturnValue=#CDRF_NOTIFYSUBITEMDRAW
Case #CDDS_ITEMPREPAINT|#CDDS_SUBITEM
CallbackReturnValue=#CDRF_NOTIFYPOSTPAINT
Case #CDDS_ITEMPOSTPAINT|#CDDS_SUBITEM
Debug Str(CallbackX)+":"+Str(Callbacky)
Rect\left=#LVIR_LABEL
Rect\top=CallbackY; sollte eigentlich die Spalte sein??? (=6)
SendMessage_(*CallbackCustomdraw\nmcd\hdr\hwndFrom,#LVM_GETSUBITEMRECT,*CallbackCustomdraw\nmcd\dwItemSpec,@Rect)
If Rect\left<Rect\right
Rect\left+1
Rect\top+3
Rect\right-1
Rect\bottom-3
CallbackX=Random(1000)
CallbackDC=*CallbackCustomdraw\nmcd\hdc
Select CallbackX
Case 0 To 300
CallbackX/2; 50m
CallbackY=2; 0.1km
CallbackM=10; 0.5
CallbackN=20; 1
CallbackO=100; 5
rectcol=$FF8080; kobalt-blau
Case 301 To 1000
CallbackX/5; 125m
CallbackY=2; 0.25km
CallbackM=8; 1
CallbackN=40; 5
CallbackO=80; 10
rectcol=$49D89E; grasgrün
Default
CallbackX/20; 500m
CallbackY=2; 1km
CallbackM=2; -
CallbackN=10; 5
CallbackO=20; 10km
rectcol=$4A85FF; orange
EndSelect
rectcol=CreateSolidBrush_(rectcol);
rectold=SelectObject_(CallbackDC,rectcol);
linecol=CreatePen_(#PS_SOLID,1,#Black);
lineold=SelectObject_(CallbackDC,linecol);
Rectangle_(CallbackDC,rect\left,rect\top,rect\left+CallbackX+1,rect\bottom)
CallbackZ=CallbackY
While CallbackZ<CallbackX
MoveToEx_(CallbackDC,rect\left+CallbackZ,rect\top,#Null)
If CallbackZ%CallbackM
LineTo_(CallbackDC,rect\left+CallbackZ,rect\top+2)
ElseIf CallbackZ%CallbackN
LineTo_(CallbackDC,rect\left+CallbackZ,rect\top+4)
ElseIf CallbackZ%CallbackO
LineTo_(CallbackDC,rect\left+CallbackZ,rect\top+7)
Else
LineTo_(CallbackDC,rect\left+CallbackZ,rect\top+9)
EndIf
CallbackZ+CallbackY
Wend
SelectObject_(CallbackDC,lineold);
DeleteObject_(linecol);
SelectObject_(CallbackDC,rectold);
DeleteObject_(rectcol);
EndIf
CallbackReturnValue=#CDRF_SKIPDEFAULT
EndSelect
EndIf
; EndIf
EndSelect
EndIf
EndSelect
ProcedureReturn CallbackReturnValue
EndProcedure
MonthZ=400
#MonthY=500
month=OpenWindow(#monthID,10,10,#MonthY,MonthZ,"-",#PB_Window_Invisible|#PB_Window_Normal|#PB_Window_SystemMenu)
ListIconGadget(#MonthTable,10,10,#MonthY-20,340,"x",128,#PB_ListIcon_GridLines|#PB_ListIcon_FullRowSelect|#PB_ListIcon_AlwaysShowSelection)
For i=1 To 8
AddGadgetColumn(#MonthTable,i,"x",40)
Next i
For i=0 To 9
AddGadgetItem(#MonthTable,i,Chr(Random(25)+'A')+#LF$+Chr(Random(25)+'A')+#LF$+Chr(Random(25)+'A')+#LF$+Chr(Random(25)+'A')+#LF$+Chr(Random(25)+'A'))
Next
SetGadgetItemColor(#MonthTable,5,#PB_Gadget_BackColor,#Red,4)
HideWindow(#monthid,0)
SetWindowCallback(@WindowCallback(),#monthID)
Repeat
Until WaitWindowEvent(100)=#WM_CHAR