A multiselect Grid
this code builds a grid with multiSelect Functionalities as windows explorer does(click to select an object and reclick maintaining shift key to make a selection).
to achieve this goal we need to a logic field (added automatically to the recordSource cursor at the first grid column.
a checkbox is created to retrieve this logical field (.t. or .f. values) and made as column1.currentcontrol.
-in grid init we made grid dynamicBakcolor to evaluate the value of this checkbox(.t. or .f.) and highlights all relative row.
bindevent() functions binds any mousedown event on any grid.column.text1 to the method "my".bindevent can determine the object clicked(method my).
-Mousedown on any record to select it.
-click with shift key to select a row.click next another row to make selection.
-CTRL+click on any row to deselect one row (even in selected area)
can preview the selected records on a simple browse view
can make a quick report from 4 columns of the cursor used here(limitation for portait report).
(can build a solid report for that purpose instead a quick report)
of course can open any vfp valid table and with select statement extract fields to a cursor as made in form.load.(its the better way to work with any table and view it on vfp grid).
[post 257]
Click on code to select [then copy] -click outside to deselect
*1* created on Monday 22 of january 2018
*!* this code builds a grid with multiSelect Functionalities.
*!* to achieve this goal we need to a logic field (added automatically to the recordSource cursor at the first column.
*!* a checkbox is created to retrieve this logical field (.t. or .f. values) and made as column1.currentcontrol.
*!* -in grid init we made grid dynamicBakcolor to evaluate the value of this checkbox(.t. or .f.) and highlights all relative row.
*!* bindevent() functions binds any mousedown event on any column.text1 to the method "my".
*!* Mousedown on any record to select it.
*!* click with shift key to select a row.click next another row to make selection.
*!* CTRL+click on any row to deselect one row (even in selected area)
*!* can preview the selected records on a simple browse view
*!* can make a quick report from 4 columns of the cursor used here(limitation for portait report).(can build a solid report for that purpose instead a quick report)
Set Safe Off
Close Data All
_Screen.AddProperty("ocolor",Rgb(123,216,255))
Public oform
oform=Newobject("ygridMultiSelect")
oform.Show
Return
Define Class ygridMultiSelect As Form
Top = 0
Left = 0
Height = 700
Width = 900
ShowWindow=0
ShowTips=.t.
AutoCenter=.T.
Caption = "A vfp9 grid MultiSelect"
rec0 = 0
Name = "Form1"
Add Object grid1 As Grid With ;
Anchor=15,;
Width=900,;
height=600,;
deletemark=.F. ,;
AllowHeaderSizing = .F.,;
AllowRowSizing = .F.,;
GridLines = 0,;
MousePointer = 15,;
ScrollBars = 3,;
HighlightBackColor = Rgb(255,255,255),;
HighlightForeColor = Rgb(0,0,0),;
HighlightStyle = 2,; && Enable highlighting for current row and persist when grid is not the current active control.
AllowCellSelection = .T.,; && &&important for bindevent
MousePointer=15,;
ReadOnly=.T.,;
Name = "Grid1"
Add Object command1 As CommandButton With ;
Caption="Preview selected", ;
anchor=768,;
left=200+120,;
top=600+15,;
height=25,;
fontbold=.T.,;
mousepointer=15,;
fontsize=12,;
forecolor=Rgb(128,0,64),;
autosize=.T.,;
specialEffect=2,;
name="command1"
Add Object command2 As CommandButton With ;
Caption="Report", ;
anchor=768,;
left=400+100,;
top=600+20,;
height=25,;
fontbold=.T.,;
fontsize=12,;
forecolor=Rgb(128,0,64),;
specialEffect=2,;
mousepointer=15,;
name="command2"
Add Object ylab As Label With ;
anchor=768,;
backstyle=1,;
backcolor=Rgb(255,253,117),;
forecolor=Rgb(128,0,64),;
fontbold=.T.,;
fontsize=8,;
wordwrap=.T. ,;
left=5,;
top=615,;
width=300,;
height=60,;
name="ylab"
Add Object ycol As CommandButton With ;
caption="...",;
mousepointer=15,;
backcolor=Rgb(123,216,255),;
autosize=.T.,;
left=770,;
top=620,;
tooltiptext="Selection color", ;
name="ycol"
Procedure Load
Close Data All
Sele * From Home(1)+"samples\data\customer" Into Cursor ycurs0 Readwrite
Alter Table ycurs0 Add Column chk L && add a logiczal field (0-1)
Sele ycurs0
Repl All chk With .F.
* Brow
Locate
Local m.x
m.x=""
For i=1 To Fcount()-1
If !i=Fcount()-1
m.x=m.x+Field(i)+","
Else
m.x=m.x+Field(i)
Endi
Endfor
Local m.myf
TEXT to m.myf textmerge noshow
sele chk,<<m.x>> from ycurs0 into cursor ycurs Readwrite
ENDTEXT
Execscript(m.myf)
Use In Select("ycurs0")
Sele ycurs
Endproc
Procedure KeyPress
Lparameters nKeyCode, nShiftAltCtrl
If nKeyCode=27
Thisform.Release
endi
Endproc
Procedure Init
With Thisform.grid1
. RecordSource=""
. RecordSource="ycurs"
. RecordSourceType=0
. AutoFit
. SetAll('DynamicBackColor','iif(Chk=.t., _screen.ocolor,rgb(255,255,255))','column')
. Visible=.T.
With .column1
.AddObject("check1","checkbox")
With .check1
.Caption=""
.AutoSize=.T.
.Value=.F.
.Visible=.T.
.Name="check1"
Endwith
.CurrentControl="check1"
.Sparse=.F.
Endwith
.SetAll("fontbold",.T.,"header")
.SetAll("fontsize",11,"header")
For i=1 To .ColumnCount
Bindevent(.Columns(i).text1,"mousedown",Thisform,"my")
Endfor
.column1.Width=35
Endwith
TEXT to thisform.ylab.caption pretext 7 noshow
Mousedown on any record to select it.
click with shift key to select a row.click next another row to make selection
CTRL+click to deselect one row (even in selected area)
ENDTEXT
Endproc
Procedure Destroy
Sele ycurs
Replace All chk With .F.
Use In Select("ycurs")
Erase yreport.frx
Erase yreport.frt
Close Data All
Clea Events
Endproc
Procedure grid1.BeforeRowColChange
Lparameters nColIndex
Thisform.LockScreen = .T.
Thisform.rec0 = Recno()
Endproc
Procedure grid1.Init
Thisform.rec0 = Recno()
Endproc
Procedure ycol.Click
Local m.xcolor
m.xcolor=Getcolor()
If m.xcolor=-1
Return .F.
Endi
_Screen.ocolor=m.xcolor
Thisform.grid1.Refresh
Endproc
Procedure my
Lparameters nButton, nShift, nXCoord, nYCoord
*--- aevent create an array laEvents
Aevents( myArray, 0)
*--- reference the calling object
loObject = myArray[1]
If nButton = 1
Sele ycurs
Do Case
Case nShift = 2 && Ctrl
Replace chk With !chk
Case nShift = 1 && Shift
rec = Recno()
For i=Min(Thisform.rec0, rec) To Max(Thisform.rec0, rec)
Go i
Replace chk With .T.
Next
Go rec
Otherwise
rec = Recno()
Replace All chk With .F.
Go rec
Endcase
loObject.Parent.Parent.HighlightBackColor=Iif(chk=.T., _Screen.ocolor,Rgb(255,255,255))
Thisform.LockScreen=.F.
Endif
Endproc
Procedure command1.Click
Sele * From ycurs Where chk=.T. Into Cursor zcurs
Browse Name ybrow Title "Selected records: "+Trans(Reccount()) Nowait && window as oop object
With ybrow
.DeleteMark=.F.
.GridLines=0
.RecordMark=.F.
.Width=sysmetric(1)
.Left=2
.SetAll("DynamicBackColor", "IIF(MOD(RECNO( ), 2)=0, RGB(255,255,255) , RGB(190,235,200))", "Column")
.FontBold=.T.
Endwith
wait window
Use In Select("zcurs")
Sele ycurs
Endproc
Procedure command2.Click
*CREATE REPORT FileName | ? FROM Source [FORM | COLUMN]
*[FIELDS FieldList] [ALIAS] [NOOVERWRITE] [WIDTH nColumns]
*extract 4 columns only here (report as portait)
Local m.myvar
TEXT to m.myvar textmerge noshow
Sele <<field(2)>>,<<field(3)>>,<<field(4)>>,<<field(5)>> From ycurs Where chk=.T. Into Cursor zcurs
sele zcurs
ENDTEXT
= Execscript(m.myvar)
if reccount()=0
return .f.
endi
Set reportbehavior 90 &&for toolbar
Create Report yreport From Dbf("zcurs") Column
Repo Form yreport Preview && window (thisform.name)
Use In Select("zcurs")
Sele ycurs
With Thisform.grid1
.SetFocus
.Refresh
Inke(0.3)
.Parent.Refresh && must click manually on grid to make it visible !
Endwith
Endproc
Enddefine
*
*-- EndDefine: ygridMultiSelect
can select with the mouse down (shift+click,ctrl+click) any record wanted (select-unselect)
Click on code to select [then copy] -click outside to deselect
*2* created on Tuesday 23 of january 2018
*!* this code builds a grid with multiSelect Functionalities.its globally the same code as *1* but with a new column as image(checkbox)
*!* to achieve this goal we need to a logic field (added automatically to the recordSource cursor at the first column.
*!* a checkbox is created to retrieve this logical field (.t. or .f. values) and made as column1.currentcontrol.
*!* -in grid init we made grid dynamicBakcolor to evaluate the value of this checkbox(.t. or .f.) and highlights all relative row.
*!* bindevent() functions binds any mousedown event on any column.text1 to the method "my".
*!* Mousedown on any record to select it.
*!* click with shift key to select a row.click next another row to make selection.
*!* CTRL+click on any row to deselect one row (even in selected area)
*!* can preview the selected records on a simple browse view
*!* can make a quick report from 4 columns of the cursor used here(limitation for portait report).(can build a solid report for that purpose instead a quick report)
*!* i added a code to modify on the fly the report as landscape one.
*:* i added a column with currencontrol as picture (enabled/disabled gif).it plays exactly the same role as the checkBox.(can choose one or other or two)
Set Safe Off
Close Data All
set defa to addbs(justpath(sys(16,1)))
*Rebuild *2 gif images as checkbox (ok.gif+ok1.gif)
local m.myvar
text to m.myvar noshow
R0lGODlhGAAYAHcAACH5BAEAAAAALAAAAAAYABgApwEAAP///6XhXkvOHkrOHgCMACyRKDGuEAqRAP/9/wh8AnTbMDOxEU/NHkvMHqThXLjiqwCJAKbhXgiRAAGPAEzAKzy7FLHjbafiX03QIABoAP/3/1/VF0zRHdjupFHNHc3rmVXRGD67Ez27EwORANHslxh9EFDRH9HwoqjiYMLqfSFuIQBmAETDGKrqd5DOW1HSH0zPH0/OHmDYHKbobCqjDiGAIRF4CErOH9PumLLjbaTgXP7+/pjYVtTvl1DOHiKZDVjPHABkACyiD8HngbThdafdbXS8RlSlMU7SH7rpf57fYUjHGQBQAGrUMSWfD/78/k7RIKPgW2GzRMTqhtDsmqbiXwJoAkXJHS6mDgBgAFrRFhd4D6nobA9zC1DNHhuODT67FaboaJveYwJdAs/slnjCUjCqEf/y/6HhYE3RIMztnq7ieVnRHNXump7cccDmtc3tnajlZwCKAPLz8gCHAEzRH13SHVbQEe/s7/L08qHkXaDeXqbhX9bxqeLf6G/VMrzohfHx76vlYVrSHFjQHBKXCMvsm1LPHtLvnajiX5nZVlHQILniq6PeaO7t7qLhZgaQAFvSFv/2/zuqKla5N1nXF9vzrVnUH5rZV1rVIFHPHUi/KlPNHVPOHcnrlrrirvj390nOHrrkrbLjbp3hWPHm8cjwkvn4+Z/ga53gVGvULaXkYiu1AJnbVJjYVcvrmf/7///4/1fPHPr4+tXxpuHj4lbSGFjTHrbqaBKHCsjpu1vSHrvoc5HXUFLQHBGTAK/mY07RH1LQH53hXP78/8vrv9PvnrHldNLsnl2/I7LoZPj3+FPNF//t/7bqZ6HfWNHvogaUAROZA1TUIQWPANDunZzfVfn3+6XhXf/1//v6+w+TALnjqwl5A53hTA+ACpvgSv/+/1PRHl3UHkK7FUK/Ftbuolm8KcLtjfz6/FvUHFPTIPHx8SynD/r7+1DPH7DjbVPQH/X09aLhYqLgWsrrl03LE0/ME/b09v37/arkYaDhXunp6uro6gAAAAj/AAEIHDhwRRMhQpqsIMiwIRkvSF4UoUKlyAskXsg0ZKjlCBEfbkqUKVPCjQ8iR7RsFMjFSI4qIJKd87DGQxwQVXIY4bLRhJJEh+ypiHfhgg4dF1TAWnNMiQmGLNhE+0QqnJQdD7I+2CHlWy9rtdiwGHjFjJ9Aqur1EcC2rQAMuQooo3TJzBWBN1Agu8YvTRq3bBUFixBgUoJKKG4AMDAlXSlWEgRIkJCtLYZBhPPRCWDo1BQDNt4Qo+dqXwoMfBxZsZLiWZ0AqEIlGBVpzxsbGsQskbMMna9MPV71WASN8LZ3AbpVW7BEjAZvXcZAKvCnwL1bIUJYmhMACo8AjSZw/1owposGXTRSSXNmSluBGeRmFAhQTFwACAgsrFuwgAY4BS4AMg0atvizQQGtzAdFAPflx8EWeKziggIKONFMOSSg0U8esmyQgD7f4WcBB5JswQs+TihgQBiFtHEACRs80s48zKgTACgIjHBHEEEQMksbYRgAwBOYeIKLOxTEIogetAQABwIiqEHAlKJ0oskTAoHBBCJfjGMOBQlgE8AuE4ggzAADEPDBB/IwAcZAQJzwQwPDjEBBAMZMUIEdaKbZwA8wAMHQGezI0MAvFXADTAUd9DmlDNScsdEBJ8DTwCZJJNEomgR8wQgMB6wEQA1YZBDDAA6k6sAAMaiBRQ2iCh80BAMt4BBFBhlEgUMLDAwRK0EGMJDFAQdkwYCQGwUEADs=
endtext
=strtofile(strconv(m.myvar,14),"ok.gif")
text to m.myvar noshow
R0lGODlhGAAYAHAAACH5BAEAAAAALAAAAAAYABgAhwAAAAAAMwAAZgAAmQAAzAAA/wArAAArMwArZgArmQArzAAr/wBVAABVMwBVZgBVmQBVzABV/wCAAACAMwCAZgCAmQCAzACA/wCqAACqMwCqZgCqmQCqzACq/wDVAADVMwDVZgDVmQDVzADV/wD/AAD/MwD/ZgD/mQD/zAD//zMAADMAMzMAZjMAmTMAzDMA/zMrADMrMzMrZjMrmTMrzDMr/zNVADNVMzNVZjNVmTNVzDNV/zOAADOAMzOAZjOAmTOAzDOA/zOqADOqMzOqZjOqmTOqzDOq/zPVADPVMzPVZjPVmTPVzDPV/zP/ADP/MzP/ZjP/mTP/zDP//2YAAGYAM2YAZmYAmWYAzGYA/2YrAGYrM2YrZmYrmWYrzGYr/2ZVAGZVM2ZVZmZVmWZVzGZV/2aAAGaAM2aAZmaAmWaAzGaA/2aqAGaqM2aqZmaqmWaqzGaq/2bVAGbVM2bVZmbVmWbVzGbV/2b/AGb/M2b/Zmb/mWb/zGb//5kAAJkAM5kAZpkAmZkAzJkA/5krAJkrM5krZpkrmZkrzJkr/5lVAJlVM5lVZplVmZlVzJlV/5mAAJmAM5mAZpmAmZmAzJmA/5mqAJmqM5mqZpmqmZmqzJmq/5nVAJnVM5nVZpnVmZnVzJnV/5n/AJn/M5n/Zpn/mZn/zJn//8wAAMwAM8wAZswAmcwAzMwA/8wrAMwrM8wrZswrmcwrzMwr/8xVAMxVM8xVZsxVmcxVzMxV/8yAAMyAM8yAZsyAmcyAzMyA/8yqAMyqM8yqZsyqmcyqzMyq/8zVAMzVM8zVZszVmczVzMzV/8z/AMz/M8z/Zsz/mcz/zMz///8AAP8AM/8AZv8Amf8AzP8A//8rAP8rM/8rZv8rmf8rzP8r//9VAP9VM/9VZv9Vmf9VzP9V//+AAP+AM/+AZv+Amf+AzP+A//+qAP+qM/+qZv+qmf+qzP+q///VAP/VM//VZv/Vmf/VzP/V////AP//M///Zv//mf//zP///wAAAAAAAAAAAAAAAAj/APcJHDjQ17uD74gRXMjwXTpHXbqwaNHikKN07xgufOeIhQwWHkN6RJRR475fVwR8lCHA44qVArr80phupccWXWbkbDFDZLqNIGVc8RLxShejRXvGaFFy37tDMnAmPaoTZ4uHuFgcKplOANIrOrHkFNvlKoCzHX/i6ki1i9gZSOGmO3s2HQtHuHxF7OIF7NGILsrOpStjXESDf1s4Iso44uCzVtIhgutQajoV6RIhmoUo0WMAMtLJ6tvFodFxAAwAkKwZNd0Y43Ihmn21JiLUMerm+hxadiLNkVk/mpubLuFxsjQnkvUIUTpcsmXtNn7cd/LOuHDty3V9egAYZ2HLWp4la3P5XAIlc5b+mEW66IgeXZ/1U+AvRPPnrhC92XwiXIigR9B4+DkyzkPrydefgAvJhstymq233IImbceZhA8mJ4sjDJoEnXT9JQddhxXu40suuYyYnUkBAQA7
endtext
=strtofile(strconv(m.myvar,14),"ok1.gif")
_screen.addproperty("ocolor",rgb(123,216,255))
Public oform
oform=Newobject("ygridMultiSelect")
oform.Show
Return
Define Class ygridMultiSelect As Form
Top = 0
Left = 0
Height = 700
Width = 900
ShowWindow=0
AutoCenter=.T.
Caption = "A vfp9 grid MultiSelect"
showTips=.t.
rec0 = 0
Name = "Form1"
Add Object grid1 As Grid With ;
Anchor=15,;
Width=900,;
height=600,;
deletemark=.F. ,;
AllowHeaderSizing = .F.,;
AllowRowSizing = .F.,;
GridLines = 0,;
MousePointer = 15,;
ScrollBars = 3,;
HighlightBackColor = Rgb(255,255,255),;
HighlightForeColor = Rgb(0,0,0),;
HighlightStyle = 2,; &&Enable highlighting for current row and persist when grid is not the current active control.
AllowCellSelection = .T.,; &&important for bindevent
MousePointer=15,;
ReadOnly=.t.,;
Name = "Grid1"
Add Object command1 As CommandButton With ;
Caption="Preview selected", ;
anchor=768,;
left=200+120,;
top=600+15,;
height=25,;
fontbold=.T.,;
mousepointer=15,;
fontsize=12,;
forecolor=Rgb(128,0,64),;
autosize=.T.,;
specialEffect=2,;
name="command1"
Add Object command2 As CommandButton With ;
Caption="Report", ;
anchor=768,;
left=400+100,;
top=600+20,;
height=25,;
fontbold=.T.,;
fontsize=12,;
forecolor=Rgb(128,0,64),;
specialEffect=2,;
mousepointer=15,;
name="command2"
Add Object ylab As Label With ;
anchor=768,;
backstyle=1,;
backcolor=Rgb(255,253,117),;
forecolor=Rgb(128,0,64),;
fontbold=.T.,;
fontsize=8,;
wordwrap=.T. ,;
left=5,;
top=615,;
width=300,;
height=60,;
name="ylab"
Add Object ycol as Commandbutton with ;
caption="...",;
mousepointer=15,;
backcolor=rgb(123,216,255),;
autosize=.t.,;
left=770,;
top=620,;
tooltiptext="selection color",;
name="ycol"
procedure ycol.click
local m.xcolor
m.xcolor=getcolor()
if m.xcolor=-1
return .f.
endi
_screen.ocolor=m.xcolor
thisform.grid1.refresh
endproc
Procedure Load
Close Data All
Sele * From Home(1)+"samples\data\customer" Into Cursor ycurs0 Readwrite
*brow
Alter Table ycurs0 Add Column chk L && add a logical field (0-1) for checkbox
Alter Table ycurs0 Add Column yimg c(20) && &Add Column yimg c(20) for picture
Sele ycurs0
Local m.x
m.x=""
For i=1 To Fcount()-2
If !i=Fcount()-2
m.x=m.x+Field(i)+","
Else
m.x=m.x+Field(i)
Endi
Endfor
Local m.myf &&make check1 and yimg as 1th and 2th column of grid
TEXT to m.myf textmerge noshow
sele chk,yimg,<<m.x>> from ycurs0 into cursor ycurs Readwrite
ENDTEXT
Execscript(m.myf)
Use In Select("ycurs0")
Sele ycurs
Repl All chk With .F.
* Brow
Locate
Endproc
Procedure KeyPress
Lparameters nKeyCode, nShiftAltCtrl
If nKeyCode=27
Thisform.Release
endi
Endproc
Procedure Init
With Thisform.grid1
. RecordSource=""
. RecordSource="ycurs"
. RecordSourceType=0
. AutoFit
With .column1
.AddObject("check1","checkbox")
With .check1
.Caption=""
.AutoSize=.T.
.Value=.F.
.Visible=.T.
.Name="check1"
Endwith
.CurrentControl="check1"
.Sparse=.F.
Endwith
with .column2
.Addobject("img","image")
With .img
.stretch=2
.width=16
.height=16
.picture="ok1.gif"
.visible=.f.
.name="img"
endwith
.CurrentControl="img"
.Sparse=.F.
.refresh
endwith
.Visible=.T.
.SetAll("fontbold",.T.,"header")
.SetAll("fontsize",11 ,"header")
For i=3 To .ColumnCount
Bindevent(.Columns(i).text1,"mousedown",Thisform,"my")
Endfor
.column1.Width=35
.column2.width=16
.SetAll('DynamicBackColor','iif(Chk=.t., _screen.ocolor,rgb(255,255,255))','column')
Endwith
TEXT to thisform.ylab.caption pretext 7 noshow
Mousedown on any record to select it.
click with shift key to select a row.click next another row to make selection
CTRL+click to deselect one row (even in selected area)
ENDTEXT
Endproc
Procedure Destroy
Sele ycurs
Replace All chk With .F.
Use In Select("ycurs")
Erase yreport.frx
Erase yreport.frt
Close Data All
Clea Events
Endproc
Procedure grid1.BeforeRowColChange
Lparameters nColIndex
Thisform.LockScreen = .T.
Thisform.rec0 = Recno()
Endproc
Procedure grid1.Init
Thisform.rec0 = Recno()
Endproc
Procedure my
Lparameters nButton, nShift, nXCoord, nYCoord
*--- aevent create an array laEvents
Aevents( myArray, 0)
*--- reference the calling object
loObject = myArray[1]
If nButton = 1
Sele ycurs
Do Case
Case nShift = 2 && Ctrl key
Replace chk With !chk
Case nShift = 1 && Shift key
rec = Recno()
For i=Min(Thisform.rec0, rec) To Max(Thisform.rec0, rec)
Go i
Replace chk With .T.
Next
Go rec
Otherwise
rec = Recno()
Replace All chk With .F.
Go rec
Endcase
loObject.Parent.Parent.HighlightBackColor=Iif(chk=.T., _screen.ocolor,Rgb(255,255,255))
thisform.grid1.column2.dynamicfontbold='iif(Chk=.t., thisform.showPict( thisform.grid1.column2.img,"ok.gif"),thisform.showpict( thisform.grid1.column2.img,"ok1.gif"))'
Thisform.LockScreen=.F.
Endif
Endproc
procedure shoWpict
lparameters oControl,topict
dodefault()
oControl.picture=topict
endproc
Procedure command1.Click
Sele * From ycurs Where chk=.T. Into Cursor zcurs
Browse Name ybrow Title "Selected records: "+Trans(Reccount()) Nowait &&window as oop object
With ybrow
.DeleteMark=.F.
.GridLines=0
.RecordMark=.F.
.Width=900
.Left=2
.SetAll("DynamicBackColor", "IIF(MOD(RECNO( ), 2)=0, RGB(255,255,255) , RGB(190,235,200))", "Column")
.FontBold=.T.
Endwith
wait window
Use In Select("zcurs")
Sele ycurs
Endproc
Procedure command2.Click
*CREATE REPORT FileName | ? FROM Source [FORM | COLUMN]
*[FIELDS FieldList] [ALIAS] [NOOVERWRITE] [WIDTH nColumns]
*extract 4 columns only here (report as portait)
Local m.myvar
TEXT to m.myvar textmerge noshow
Sele <<field(3)>>,<<field(4)>>,<<field(5)>>,<<field(6)>> From ycurs Where chk=.T. Into Cursor zcurs
sele zcurs
ENDTEXT
= Execscript(m.myvar)
if reccount()=0
return .f.
endi
Set reportbehavior 90 &&for toolbar
Create Report yreport From Dbf("zcurs") Column
*!* set programmatly the report as Landscape (report as table to update)
USE in select("yreport.frx")
UPDATE yReport.frx set expr = STRTRAN(expr,"ORIENTATION=0","ORIENTATION=1") WHERE objtype = 1
USE in "yreport.frx" &&close report table
*!*
sele zcurs
Repo Form yreport Preview && window (thisform.name)
Use In Select("zcurs")
Sele ycurs
With Thisform.grid1
.SetFocus
.Refresh
thisform.refresh
Inke(0.3)
.Parent.Refresh && must click manually on grid to make it visible !
Endwith
Endproc
Enddefine
*
*-- EndDefine: ygridMultiSelect
of course can choose checkbox or/and checked gif Image.i made the general case in the code above.
Important:All Codes above are tested on VFP9SP2 & windows 10 pro 64 bits version 1709(fall creator) & IE11 emulation.