06-21-2013, 07:32 AM
Thank you! Very useful code.
Tuning a little more...
Macro Array to Grid
Macro Use DynamicGrid_labels
Member function str.ToGrid
Function DialogDefinitionReplace2
Function DynamicGrid_dialog2
Tuning a little more...
Macro Array to Grid
ARRAY(str) a.create(7 5)
int i j
for i 0 a.len
,for j 0 a.len(1)
,,a[j i].from(i " " j)
;
ICsv x=CreateCsv(1)
x.FromArray(a)
x.ToString(_s)
lpstr ColumnLabels="a,b bbb,c is other,d,e,f,g"
lpstr RowLabels="A aaa,B label,C,D,E,F"
lpstr GridHeader="My own stats"
_s.ToGrid(500 100 ColumnLabels RowLabels GridHeader);; ColumnLabels RowLabels GridHeader are optionalMacro Use DynamicGrid_labels
_s=
;aa,ab,ac,ad,ae,af
;ba,bb,bc,bd,be,bf
;ca,cb,cc,cd,ce,cf
;da,db,dc,dd,de,df
;ea,eb,ec,ed,ee,ef
lpstr ColumnLabels="col0 is 1st col,col1,col2,col3,col4,col5"
lpstr RowLabels="row0,row1,row2 is not bad,row3,row4"
lpstr GridHeader="This is a demo"
_s.ToGrid(500 100 ColumnLabels RowLabels GridHeader);; ColumnLabels RowLabels GridHeader are optionalMember function str.ToGrid
/Dialog_Editor
function Dlgw Dlgh [$ColumnLabels] [$RowLabels] [$GridHeader]
str dd=
;BEGIN DIALOG
;0 "" 0x90C80AC8 0x0 0 0 200 119 ""
;3 QM_Grid 0x54030000 0x0 0 0 200 94 ""
;1 Button 0x54030001 0x0 98 102 48 14 "OK"
;2 Button 0x54030000 0x0 150 102 48 14 "Cancel"
;END DIALOG
;DIALOG EDITOR: "" 0x2030507 "" "" "" ""
DialogDefinitionReplace2 2 dd 0 Dlgw Dlgh
DialogDefinitionReplace2 2 dd 3 Dlgw+1 Dlgh-21
DialogDefinitionReplace2 1 dd 1 Dlgw/2-55 Dlgh-19
DialogDefinitionReplace2 1 dd 2 Dlgw/2-5 Dlgh-19
DialogDefinitionReplace2 3 dd 0 Dlgw Dlgh GridHeader
ICsv+ x._create
x.FromString(this)
x.InsertColumn(0)
for _i 0 x.RowCount
,_s.gett(RowLabels _i ",")
,x.Cell(_i 0)=_s
str sColumnLabels=ColumnLabels
if empty(ColumnLabels)
,sColumnLabels.all(x.ColumnCount 2 13);; 13: ASCII Carriage return
else sColumnLabels.findreplace("," "[]");sColumnLabels.from("[]" sColumnLabels)
str+ g_ColumnLabels=sColumnLabels
if(!ShowDialog(dd &DynamicGrid_dialog2)) retFunction DialogDefinitionReplace2
;/
function what str&dd ctrlID v1 v2 [$GridHeader];;what: 0 style/exstyle, 1 x/y, 2 width/height, 3 text
;Replaces two numeric values in dialog definition string.
;dd - variable containing dialog definition (BEGIN DIALOG...END DIALOG).
;ctrlID - control id, or 0 for dialog. It's the first number in a line.
;v1, v2 - new values. Coordinates are in dialog units.
str rx
sel what
,case 0 rx=F"^({ctrlID} .+?) 0x\w+ \w+"
,case 1 rx=F"^({ctrlID} .+? 0x\w+ \w+) \d+ \d+"
,case 2 rx=F"^({ctrlID} .+? 0x\w+ \w+ \w+ \w+) \d+ \d+"
,case 3 dd.replacerx(F"^({ctrlID} .+? 0x\w+ \w+ \w+ \w+ \d+ \d+)" F"$1 ''{GridHeader}''" 8);ret
,case else end ERR_BADARG
if(dd.replacerx(rx F"$1 {v1} {v2}" 4|8)<=0) end ERR_FAILEDFunction DynamicGrid_dialog2
;/
function# hDlg message wParam lParam
if(hDlg) goto messages
ret
;messages
DlgGrid g.Init(hDlg 3)
sel message
,case WM_INITDIALOG
,g.ColumnsAdd(g_ColumnLabels 1)
,g.FromICsv(x)
,g.ColumnsWidthAdjust(x.ColumnCount);; num columns
,__Font-- f
,int hlv=id(3 hDlg)
,f.Create("" 8)
,f.SetDialogFont(hDlg "3")
,f.SetDialogFontColor(hDlg 0xff0000 "3")
,;SendMessage hlv LVM_SETTEXTBKCOLOR 0 0xe0ffff
,;SendMessage hlv LVM_SETBKCOLOR 0 0xe0ffff
,;DT_SetBackgroundColor(hDlg 0 0x8000);; green
,;function hDlg flags color [color2] ;;flags: 1 horizontal gradient, 2 vertical gradient
,case WM_DESTROY
,case WM_COMMAND goto messages2
,case WM_NOTIFY goto messages3
ret
;messages2
sel wParam
,case IDOK
ret 1
;messages3
NMLVCUSTOMDRAW* cd=+lParam
sel cd.nmcd.dwDrawStage
,case CDDS_PREPAINT _i=CDRF_NOTIFYITEMDRAW ;;yes, notify me to draw items
,case CDDS_ITEMPREPAINT
,if(cd.nmcd.dwItemSpec&1) cd.clrTextBk=0xFAFCCF;; light blue ; indent this line = NO row colors
,case else _i=0
ret DT_Ret(hDlg _i)