08-16-2019, 07:51 PM
Quote:1. How could I change font color and background color according to row items? (ex all txt to white, rabbit background to red, tiger to blue, horse to green)
;LoadQmGrid
str dd=
;BEGIN DIALOG
;0 "" 0x90C80AC8 0x0 0 0 300 314 "Dialog" "4"
;3 QM_Grid 0x56031041 0x200 12 12 276 242 "0[]A[]B"
;1 Button 0x54030001 0x4 172 288 48 14 "OK"
;2 Button 0x54030000 0x4 240 288 48 14 "Cancel"
;END DIALOG
;DIALOG EDITOR: "" 0x2040802 "*" "" "" ""
str controls = "3"
str qmg3
if(!ShowDialog(dd &sub.DlgProc &controls)) ret
#sub DlgProc
function# hDlg message wParam lParam
DlgGrid RN.Init(hDlg 3)
ICsv ADATA._create;ADATA.Separator=","
sel message
,case WM_INITDIALOG goto gInit
,case WM_DESTROY
,case WM_COMMAND goto messages2
,case WM_NOTIFY goto messages3
ret
;messages2
sel wParam
,case IDOK
,case IDCANCEL
ret 1
;gInit
str CSV =
;rabbit,10
;tiger,20
;horse,30
;rabbit,40
ADATA.FromString(CSV)
RN.FromICsv(ADATA)
ret
;messages3
NMHDR* nh=+lParam
int- row isChecked col
sel nh.idFrom
,case 3
,sel nh.code
,,case NM_CUSTOMDRAW goto gridCustomDraw
,,
;gridCustomDraw
NMCUSTOMDRAW* cd=+lParam
NMLVCUSTOMDRAW* cd2=+lParam
int R ;;the return value
sel cd.dwDrawStage
,case CDDS_PREPAINT
,R=CDRF_NOTIFYITEMDRAW ;;notify to draw items
,case CDDS_ITEMPREPAINT ;;now draw item
,R=CDRF_NEWFONT|CDRF_NOTIFYSUBITEMDRAW ;;notify to draw subitems
,case CDDS_ITEMPREPAINT|CDDS_SUBITEM ;;now draw subitem
,row=cd.dwItemSpec; col=cd2.iSubItem
,str cell=RN.CellGet(row 0)
,sel cell
,,case "rabbit"
,,cd2.clrTextBk=0x0000FF;;; red
,,case "tiger"
,,cd2.clrTextBk=0xFF0000;;; blue
,,case "horse"
,,cd2.clrTextBk=0x00FF00;;; green
,cd2.clrText=0xFFFFFF;;; white
ret DT_Ret(hDlg R)Quote:2. How could I fix to change row color just when check checkbox of it's row ?example using your code
;LoadQmGrid
str dd=
;BEGIN DIALOG
;0 "" 0x90C80AC8 0x0 0 0 300 314 "Dialog" "4"
;3 QM_Grid 0x56031041 0x200 12 12 276 242 "0x20,0,0,0x0,0x0[]A,,,[]B,,,"
;1 Button 0x54030001 0x4 172 288 48 14 "OK"
;2 Button 0x54030000 0x4 240 288 48 14 "Cancel"
;END DIALOG
;DIALOG EDITOR: "" 0x2040802 "*" "" "" ""
str controls = "3"
str qmg3x
if(!ShowDialog(dd &sub.DlgProc &controls)) ret
#sub DlgProc
function# hDlg message wParam lParam
DlgGrid RN.Init(hDlg 3)
ICsv ADATA._create;ADATA.Separator=","
sel message
,case WM_INITDIALOG goto gInit
,case WM_DESTROY
,case WM_COMMAND goto messages2
,case WM_NOTIFY goto messages3
ret
;messages2
sel wParam
,case IDOK
,case IDCANCEL
ret 1
;gInit
str CSV =
;rabbit,10
;tiger,20
;horse,30
;rabbit,40
ADATA.FromString(CSV)
RN.FromICsv(ADATA)
ret
;messages3
NMHDR* nh=+lParam
int row isChecked col
sel nh.idFrom
,case 3
,sel nh.code
,,case LVN_ITEMCHANGED
,,if(RN.RowIsCheckNotification(lParam row isChecked)) out "%schecked %i" iif(isChecked "" "un") row
,,case NM_CUSTOMDRAW goto gridCustomDraw
;gridCustomDraw
NMCUSTOMDRAW* cd=+lParam
NMLVCUSTOMDRAW* cd2=+lParam
int R ;;the return value
sel cd.dwDrawStage
,case CDDS_PREPAINT
,R=CDRF_NOTIFYITEMDRAW ;;notify to draw items
,case CDDS_ITEMPREPAINT ;;now draw item
,R=CDRF_NEWFONT|CDRF_NOTIFYSUBITEMDRAW ;;notify to draw subitems
,case CDDS_ITEMPREPAINT|CDDS_SUBITEM ;;now draw subitem
,row=cd.dwItemSpec; col=cd2.iSubItem
,if(RN.RowIsChecked(row))
,,str cell=RN.CellGet(row 0)
,,sel cell
,,,case "rabbit"
,,,cd2.clrTextBk=0x0000FF;;; red
,,,case "tiger"
,,,cd2.clrTextBk=0xFF0000;;; blue
,,,case "horse"
,,,cd2.clrTextBk=0x00FF00;;; green
,,cd2.clrText=0xFFFFFF;;; white
ret DT_Ret(hDlg R)