1122:
How can I define a column of button type

PROCEDURE OnButtonClick(oGrid,Item,ColIndex,Key)
	LOCAL oItems
	oItems := oGrid:Items()
		DevOut( Transform(oItems:CellValue(Item,ColIndex),"") )
RETURN

#include "AppEvent.ch"
#include "ActiveX.ch"

PROCEDURE Main
 	LOCAL oForm
	LOCAL nEvent := 0, mp1 := NIL, mp2 := NIL, oXbp := NIL
	LOCAL oGrid
	LOCAL oColumn
	LOCAL oItems

	oForm := XbpDialog():new( AppDesktop() )
	oForm:drawingArea:clipChildren := .T.
	oForm:create( ,,{100,100}, {640,480},, .F. )
	oForm:close  := {|| PostAppEvent( xbeP_Quit )}

	oGrid := XbpActiveXControl():new( oForm:drawingArea )
	oGrid:CLSID  := "Exontrol.Grid.1" /*{101EE60F-7B07-48B0-A13A-F32BAE7DA165}*/
	oGrid:create(,, {10,60},{610,370} )

		oGrid:ButtonClick := {|Item,ColIndex,Key| OnButtonClick(oGrid,Item,ColIndex,Key)} /*Occurs when user clicks on the cell's button.*/

		oGrid:BeginUpdate()
		oColumn := oGrid:Columns():Add("Button")
			oColumn:SetProperty("Def",2/*exCellHasButton*/,.T.)
			oColumn:SetProperty("Def",3/*exCellButtonAutoWidth*/,.F.)
			oColumn:FormatColumn := "``"
			oColumn:AllowSizing := .F.
			oColumn:Width := 48
		oGrid:Columns():Add("Second"):FormatColumn := "` Item ` + 1 index ``"
		oItems := oGrid:Items()
			oItems:AddItem("Button 1")
			oItems:AddItem("Button 2")
			oItems:AddItem("Button 3 ")
		oGrid:EndUpdate()

	oForm:Show()
	DO WHILE nEvent != xbeP_Quit
		nEvent := AppEvent( @mp1, @mp2, @oXbp )
		oXbp:handleEvent( nEvent, mp1, mp2 )
	ENDDO 
RETURN
1121:
Is it possible to configure different colour/icon when there is a active filter

PROCEDURE OnFilterChange(oGrid)
	oGrid:SetProperty("Background",0/*exHeaderFilterBarButton*/,oGrid:FormatABC("value = 0 ? 0x1000001 : 0x10000FF ",oGrid:Columns:Item(0):FilterType()))
RETURN

#include "AppEvent.ch"
#include "ActiveX.ch"

PROCEDURE Main
 	LOCAL oForm
	LOCAL nEvent := 0, mp1 := NIL, mp2 := NIL, oXbp := NIL
	LOCAL oGrid
	LOCAL oAppearance
	LOCAL oColumn,oColumn1
	LOCAL oItems

	oForm := XbpDialog():new( AppDesktop() )
	oForm:drawingArea:clipChildren := .T.
	oForm:create( ,,{100,100}, {640,480},, .F. )
	oForm:close  := {|| PostAppEvent( xbeP_Quit )}

	oGrid := XbpActiveXControl():new( oForm:drawingArea )
	oGrid:CLSID  := "Exontrol.Grid.1" /*{101EE60F-7B07-48B0-A13A-F32BAE7DA165}*/
	oGrid:create(,, {10,60},{610,370} )

		oGrid:FilterChange := {|| OnFilterChange(oGrid)} /*Occurs when filter was changed.*/

		oGrid:BeginUpdate()
		oAppearance := oGrid:VisualAppearance()
			oAppearance:RenderType := -16777216
			oAppearance:Add(1,"gBFLBCJwBAEHhEJAAEhABXUIQAAYAQGKIcBiAKBQAGYBIJDEMgzDDAUBjKKocQTC4AIQjCK4JDKHYJRpHEZyCA8EhqGASRAFUQBYiWE4oSpLABQaK0ZwIGyRIrkGQgQgmPYDSDNU4zVIEEglBI0TDNczhNDENgtGYaJqHIYpZBcM40TKkEZoSIITZcRrOEBiRL1S0RBhGcRUHZlWzdN64LhuK47UrWdD/XhdVzXRbjfz1Oq+bxve48Br7A5yYThdr4LhOFQ3RjIL4xbIcUwGe6VZhjOLZXjmO49T69HTtOCYBEBA")
		oGrid:DrawGridLines := -1/*exAllLines*/
		oGrid:ShowFocusRect := .F.
		oGrid:SetProperty("Background",0/*exHeaderFilterBarButton*/,0x1000001)
		oGrid:SetProperty("Background",32/*exCursorHoverColumn*/,-1)
		oGrid:HeaderAppearance := 4/*Etched*/
		oGrid:SetProperty("BackColorHeader",AutomationTranslateColor( GraMakeRGBColor  ( { 255,255,255 } )  , .F. ))
		oGrid:HeaderVisible := .T.
		oColumn := oGrid:Columns():Add("Filter")
			oColumn:DisplayFilterButton := .T.
			oColumn:AllowSort := .F.
			oColumn:AllowDragging := .F.
			oColumn:FilterList := 256/*exShowCheckBox*/
		oItems := oGrid:Items()
			oItems:AddItem("Item A")
			oItems:AddItem("Item B")
			oItems:AddItem("Item C")
		oColumn1 := oGrid:Columns:Item(0)
			oColumn1:Filter := "Item B"
			oColumn1:FilterType := 240/*exFilter*/
		oGrid:ApplyFilter()
		oGrid:EndUpdate()

	oForm:Show()
	DO WHILE nEvent != xbeP_Quit
		nEvent := AppEvent( @mp1, @mp2, @oXbp )
		oXbp:handleEvent( nEvent, mp1, mp2 )
	ENDDO 
RETURN
1120:
How can I display the type of the value the column display

#include "AppEvent.ch"
#include "ActiveX.ch"

PROCEDURE Main
 	LOCAL oForm
	LOCAL nEvent := 0, mp1 := NIL, mp2 := NIL, oXbp := NIL
	LOCAL oGrid
	LOCAL oColumn
	LOCAL oItems

	oForm := XbpDialog():new( AppDesktop() )
	oForm:drawingArea:clipChildren := .T.
	oForm:create( ,,{100,100}, {640,480},, .F. )
	oForm:close  := {|| PostAppEvent( xbeP_Quit )}

	oGrid := XbpActiveXControl():new( oForm:drawingArea )
	oGrid:CLSID  := "Exontrol.Grid.1" /*{101EE60F-7B07-48B0-A13A-F32BAE7DA165}*/
	oGrid:create(,, {10,60},{610,370} )

		oGrid:BeginUpdate()
		oGrid:HeaderAppearance := 4/*Etched*/
		oGrid:DrawGridLines := -2/*exRowLines*/
		oColumn := oGrid:Columns():Add("Values")
			oColumn:SetProperty("Def",17/*exCellValueFormat*/,1)
			oColumn:FormatColumn := "value + ` <off 4><fgcolor=808080>type(` + type(%0) + `)`"
		oItems := oGrid:Items()
			oItems:AddItem()
			oItems:AddItem(-1)
			oItems:AddItem("string")
			oItems:AddItem("01/01/2001")
			oItems:AddItem(2)
			oItems:AddItem(.T.)
			oItems:AddItem(12.34)
		oGrid:EndUpdate()

	oForm:Show()
	DO WHILE nEvent != xbeP_Quit
		nEvent := AppEvent( @mp1, @mp2, @oXbp )
		oXbp:handleEvent( nEvent, mp1, mp2 )
	ENDDO 
RETURN
1119:
I want to create a conditional format for a column, verifying that the value of the cell is numeric, how can I do

#include "AppEvent.ch"
#include "ActiveX.ch"

PROCEDURE Main
 	LOCAL oForm
	LOCAL nEvent := 0, mp1 := NIL, mp2 := NIL, oXbp := NIL
	LOCAL oGrid
	LOCAL oConditionalFormat
	LOCAL oItems

	oForm := XbpDialog():new( AppDesktop() )
	oForm:drawingArea:clipChildren := .T.
	oForm:create( ,,{100,100}, {640,480},, .F. )
	oForm:close  := {|| PostAppEvent( xbeP_Quit )}

	oGrid := XbpActiveXControl():new( oForm:drawingArea )
	oGrid:CLSID  := "Exontrol.Grid.1" /*{101EE60F-7B07-48B0-A13A-F32BAE7DA165}*/
	oGrid:create(,, {10,60},{610,370} )

		oGrid:BeginUpdate()
		oGrid:HeaderAppearance := 4/*Etched*/
		oGrid:DrawGridLines := -2/*exRowLines*/
		oGrid:Columns():Add("Values")
		oConditionalFormat := oGrid:ConditionalFormats():Add("type(%0) in (2,3,4,5,18,19,20,21)")
			oConditionalFormat:SetProperty("ForeColor",AutomationTranslateColor( GraMakeRGBColor  ( { 255,0,0 } )  , .F. ))
			oConditionalFormat:Bold := .T.
		oGrid:ConditionalFormats():Add("type(%0) = 11"):SetProperty("ForeColor",AutomationTranslateColor( GraMakeRGBColor  ( { 0,255,0 } )  , .F. ))
		oGrid:ConditionalFormats():Add("type(%0) = 7"):SetProperty("ForeColor",AutomationTranslateColor( GraMakeRGBColor  ( { 0,0,255 } )  , .F. ))
		oGrid:ConditionalFormats():Add("type(%0) in (0,1)"):SetProperty("BackColor",AutomationTranslateColor( GraMakeRGBColor  ( { 240,240,240 } )  , .F. ))
		oItems := oGrid:Items()
			oItems:AddItem()
			oItems:AddItem(-1)
			oItems:AddItem("string")
			oItems:AddItem("01/01/2001")
			oItems:AddItem(2)
			oItems:AddItem(.T.)
			oItems:AddItem(12.34)
		oGrid:EndUpdate()

	oForm:Show()
	DO WHILE nEvent != xbeP_Quit
		nEvent := AppEvent( @mp1, @mp2, @oXbp )
		oXbp:handleEvent( nEvent, mp1, mp2 )
	ENDDO 
RETURN
1118:
How can I assign a computed value on a different column based on other columns

PROCEDURE OnChange(oGrid,Item,ColIndex,NewValue)
	LOCAL oItems
	oGrid:FreezeEvents(.T.)
	oItems := oGrid:Items()
		oItems:SetProperty("CellValue",Item,1,oGrid:FormatABC("int(255*sin(value/2))",NewValue))
		oItems:SetProperty("CellValue",Item,2,oGrid:FormatABC("int(255*cos(value/2))",NewValue))
	oGrid:FreezeEvents(.F.)
RETURN

#include "AppEvent.ch"
#include "ActiveX.ch"

PROCEDURE Main
 	LOCAL oForm
	LOCAL nEvent := 0, mp1 := NIL, mp2 := NIL, oXbp := NIL
	LOCAL oGrid
	LOCAL oColumn,var_Column
	LOCAL oItems

	oForm := XbpDialog():new( AppDesktop() )
	oForm:drawingArea:clipChildren := .T.
	oForm:create( ,,{100,100}, {640,480},, .F. )
	oForm:close  := {|| PostAppEvent( xbeP_Quit )}

	oGrid := XbpActiveXControl():new( oForm:drawingArea )
	oGrid:CLSID  := "Exontrol.Grid.1" /*{101EE60F-7B07-48B0-A13A-F32BAE7DA165}*/
	oGrid:create(,, {10,60},{610,370} )

		oGrid:Change := {|Item,ColIndex,NewValue| OnChange(oGrid,Item,ColIndex,NewValue)} /*Occurs when the user changes the cell's content.*/

		oGrid:BeginUpdate()
		oGrid:SelBackMode := 1/*exTransparent*/
		oGrid:HeaderAppearance := 4/*Etched*/
		oGrid:DrawGridLines := -2/*exRowLines*/
		oColumn := oGrid:Columns():Add("Value")
			oColumn:Editor():EditType := 4/*SpinType*/
			oColumn:Width := 64
			oColumn:AllowSizing := .F.
		oGrid:Columns():Add("Assign A"):SetProperty("Def",4/*exCellBackColor*/,16448250)
		oGrid:Columns():Add("Assign B"):SetProperty("Def",4/*exCellBackColor*/,16448250)
		var_Column := oGrid:Columns:Add("Computed")
			var_Column:SetProperty("Def",4/*exCellBackColor*/,16448250)
			var_Column:ComputedField := "%1 + %2"
			var_Column:FormatColumn := "value format ``"
			var_Column:Alignment := 2/*RightAlignment*/
			var_Column:HeaderAlignment := var_Column:Alignment()
		oGrid:ConditionalFormats():Add("%3 >= 0"):Bold := .T.
		oItems := oGrid:Items()
			oItems:AddItem(1989)
			oItems:AddItem(2001)
			oItems:AddItem(2017)
			oItems:AddItem(2018)
			oItems:AddItem(2019)
		oGrid:EndUpdate()

	oForm:Show()
	DO WHILE nEvent != xbeP_Quit
		nEvent := AppEvent( @mp1, @mp2, @oXbp )
		oXbp:handleEvent( nEvent, mp1, mp2 )
	ENDDO 
RETURN
1117:
How can I get computed a value on a different column

#include "AppEvent.ch"
#include "ActiveX.ch"

PROCEDURE Main
 	LOCAL oForm
	LOCAL nEvent := 0, mp1 := NIL, mp2 := NIL, oXbp := NIL
	LOCAL oGrid
	LOCAL oColumn
	LOCAL oItems

	oForm := XbpDialog():new( AppDesktop() )
	oForm:drawingArea:clipChildren := .T.
	oForm:create( ,,{100,100}, {640,480},, .F. )
	oForm:close  := {|| PostAppEvent( xbeP_Quit )}

	oGrid := XbpActiveXControl():new( oForm:drawingArea )
	oGrid:CLSID  := "Exontrol.Grid.1" /*{101EE60F-7B07-48B0-A13A-F32BAE7DA165}*/
	oGrid:create(,, {10,60},{610,370} )

		oGrid:BeginUpdate()
		oGrid:HeaderAppearance := 4/*Etched*/
		oGrid:DrawGridLines := -2/*exRowLines*/
		oColumn := oGrid:Columns():Add("Year")
			oColumn:Editor():EditType := 4/*SpinType*/
			oColumn:Width := 64
			oColumn:AllowSizing := .F.
		oGrid:Columns():Add("Easter"):FormatColumn := "date(dateS('3/1/' + %0)  + ((1:=(((255 - 11 * (%0 mod 19)) - 21) mod 30) + 21) + (=:1 > 48 ? -1 : 0) + 6 - ((%0 + int(%0 / 4)) + =:1 + (=:1 > 48 ? -1 : 0) + 1) mod 7))"
		oItems := oGrid:Items()
			oItems:AddItem(1989)
			oItems:AddItem(2001)
			oItems:AddItem(2017)
			oItems:AddItem(2018)
			oItems:AddItem(2019)
		oGrid:EndUpdate()

	oForm:Show()
	DO WHILE nEvent != xbeP_Quit
		nEvent := AppEvent( @mp1, @mp2, @oXbp )
		oXbp:handleEvent( nEvent, mp1, mp2 )
	ENDDO 
RETURN
1116:
How can I prevent applying ConditionalFormats on a specified cell, for instance I am displaying a Total field, and I will like to have formatted in a different way (method 2)

PROCEDURE OnChange(oGrid,Item,ColIndex,NewValue)
	oGrid:Refresh()
RETURN

#include "AppEvent.ch"
#include "ActiveX.ch"

PROCEDURE Main
 	LOCAL oForm
	LOCAL nEvent := 0, mp1 := NIL, mp2 := NIL, oXbp := NIL
	LOCAL oGrid
	LOCAL oColumn
	LOCAL oConditionalFormat
	LOCAL oEditor
	LOCAL oItems,oItems1
	LOCAL h

	oForm := XbpDialog():new( AppDesktop() )
	oForm:drawingArea:clipChildren := .T.
	oForm:create( ,,{100,100}, {640,480},, .F. )
	oForm:close  := {|| PostAppEvent( xbeP_Quit )}

	oGrid := XbpActiveXControl():new( oForm:drawingArea )
	oGrid:CLSID  := "Exontrol.Grid.1" /*{101EE60F-7B07-48B0-A13A-F32BAE7DA165}*/
	oGrid:create(,, {10,60},{610,370} )

		oGrid:Change := {|Item,ColIndex,NewValue| OnChange(oGrid,Item,ColIndex,NewValue)} /*Occurs when the user changes the cell's content.*/

		oGrid:BeginUpdate()
		oConditionalFormat := oGrid:ConditionalFormats():Add("(%0 >= 0)")
			oConditionalFormat:Expression := "(0=type(%CD0)) and (%0 >= 0)"
			oConditionalFormat:Bold := .T.
			oConditionalFormat:SetProperty("ForeColor",AutomationTranslateColor( GraMakeRGBColor  ( { 255,0,0 } )  , .F. ))
			DevOut( "ConditionalFormat.Valid" )
			DevOut( Transform(oConditionalFormat:Valid(),"") )
		oColumn := oGrid:Columns():Add("Numbers")
			oEditor := oColumn:Editor()
				oEditor:Numeric := -1/*exInteger*/
				oEditor:EditType := 4/*SpinType*/
			oColumn:SortType := 1/*SortNumeric*/
		oItems := oGrid:Items()
			oItems:AddItem(100)
			oItems:AddItem(-25)
			oItems:AddItem(31)
			oItems:AddItem(-48)
		oItems1 := oGrid:Items()
			h := oItems1:AddItem("sum(all,dir,dbl(%0))")
			oItems1:SetProperty("SelectableItem",h,.F.)
			oItems1:SetProperty("SortableItem",h,.F.)
			oItems1:SetProperty("ItemBackColor",h,AutomationTranslateColor( GraMakeRGBColor  ( { 240,240,240 } )  , .F. ))
			oItems1:SetProperty("CellData",h,0,"total")
			oItems1:SetProperty("CellValueFormat",h,0,5/*exTotalField+exHTML*/)
			oItems1:SetProperty("FormatCell",h,0,"'Total: <b><fgcolor=0000FF>'+(value format ``)")
		oGrid:EndUpdate()

	oForm:Show()
	DO WHILE nEvent != xbeP_Quit
		nEvent := AppEvent( @mp1, @mp2, @oXbp )
		oXbp:handleEvent( nEvent, mp1, mp2 )
	ENDDO 
RETURN
1115:
How can I prevent applying ConditionalFormats on a specified cell, for instance I am displaying a Total field, and I will like to have formatted in a different way (method 1)

PROCEDURE OnChange(oGrid,Item,ColIndex,NewValue)
	oGrid:Refresh()
RETURN

#include "AppEvent.ch"
#include "ActiveX.ch"

PROCEDURE Main
 	LOCAL oForm
	LOCAL nEvent := 0, mp1 := NIL, mp2 := NIL, oXbp := NIL
	LOCAL oGrid
	LOCAL oColumn
	LOCAL oConditionalFormat
	LOCAL oEditor
	LOCAL oItems,oItems1
	LOCAL h

	oForm := XbpDialog():new( AppDesktop() )
	oForm:drawingArea:clipChildren := .T.
	oForm:create( ,,{100,100}, {640,480},, .F. )
	oForm:close  := {|| PostAppEvent( xbeP_Quit )}

	oGrid := XbpActiveXControl():new( oForm:drawingArea )
	oGrid:CLSID  := "Exontrol.Grid.1" /*{101EE60F-7B07-48B0-A13A-F32BAE7DA165}*/
	oGrid:create(,, {10,60},{610,370} )

		oGrid:Change := {|Item,ColIndex,NewValue| OnChange(oGrid,Item,ColIndex,NewValue)} /*Occurs when the user changes the cell's content.*/

		oGrid:BeginUpdate()
		oConditionalFormat := oGrid:ConditionalFormats():Add("%0 >= 0")
			oConditionalFormat:Bold := .T.
			oConditionalFormat:SetProperty("ForeColor",AutomationTranslateColor( GraMakeRGBColor  ( { 255,0,0 } )  , .F. ))
			oConditionalFormat:ApplyTo := 0/*exFormatToColumns*/
		oColumn := oGrid:Columns():Add("Numbers")
			oEditor := oColumn:Editor()
				oEditor:Numeric := -1/*exInteger*/
				oEditor:EditType := 4/*SpinType*/
			oColumn:SortType := 1/*SortNumeric*/
		oGrid:Columns():Add("Total"):Visible := .F.
		oItems := oGrid:Items()
			oItems:SetProperty("LockedItemCount",2/*exBottom*/,1)
			h := oItems:LockedItem(2/*exBottom*/,0)
			oItems:SetProperty("ItemDivider",h,1)
			oItems:SetProperty("ItemDividerLine",h,0/*EmptyLine*/)
			oItems:SetProperty("ItemBackColor",h,AutomationTranslateColor( GraMakeRGBColor  ( { 240,240,240 } )  , .F. ))
			oItems:SetProperty("CellValue",h,1,"sum(all,dir,dbl(%0))")
			oItems:SetProperty("CellValueFormat",h,1,5/*exTotalField+exHTML*/)
			oItems:SetProperty("CellHAlignment",h,1,2/*RightAlignment*/)
			oItems:SetProperty("FormatCell",h,1,"'Total: <b><fgcolor=0000FF>'+(value format ``)")
		oItems1 := oGrid:Items()
			oItems1:AddItem(100)
			oItems1:AddItem(-25)
			oItems1:AddItem(31)
			oItems1:AddItem(-48)
		oGrid:EndUpdate()

	oForm:Show()
	DO WHILE nEvent != xbeP_Quit
		nEvent := AppEvent( @mp1, @mp2, @oXbp )
		oXbp:handleEvent( nEvent, mp1, mp2 )
	ENDDO 
RETURN
1114:
ADODB Requery sample

PROCEDURE OnButtonClick(oGrid,Item,ColIndex,Key)
	LOCAL cmd
	cmd := CreateObject("ADODB.Command")
		cmd:ActiveConnection := oGrid:DataSource():ActiveConnection()
		cmd:CommandText := "INSERT INTO Orders (EmployeeID) VALUES(12345)"
		cmd:CommandType := 1/*adCmdText*/
		cmd:Execute()
	oGrid:DataSource():Requery()
RETURN

PROCEDURE OnError(oGrid,Error,Description)
	DevOut( Transform(Description,"") )
RETURN

#include "AppEvent.ch"
#include "ActiveX.ch"

PROCEDURE Main
 	LOCAL oForm
	LOCAL nEvent := 0, mp1 := NIL, mp2 := NIL, oXbp := NIL
	LOCAL oGrid
	LOCAL oItems
	LOCAL h
	LOCAL rs

	oForm := XbpDialog():new( AppDesktop() )
	oForm:drawingArea:clipChildren := .T.
	oForm:create( ,,{100,100}, {640,480},, .F. )
	oForm:close  := {|| PostAppEvent( xbeP_Quit )}

	oGrid := XbpActiveXControl():new( oForm:drawingArea )
	oGrid:CLSID  := "Exontrol.Grid.1" /*{101EE60F-7B07-48B0-A13A-F32BAE7DA165}*/
	oGrid:create(,, {10,60},{610,370} )

		oGrid:ButtonClick := {|Item,ColIndex,Key| OnButtonClick(oGrid,Item,ColIndex,Key)} /*Occurs when user clicks on the cell's button.*/
		oGrid:Error := {|Error,Description| OnError(oGrid,Error,Description)} /*Fired when an internal error occurs.*/

		oGrid:BeginUpdate()
		oGrid:HeaderAppearance := 4/*Etched*/
		oGrid:ColumnAutoResize := .F.
		rs := CreateObject("ADODB.Recordset")
			rs:Open("Select * From Orders","Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\Program Files\Exontrol\ExGrid\Sample\Access2007\sample.accdb",1/*adOpenKeyset*/,3/*adLockOptimistic*/)
		oGrid:DataSource := rs
		oGrid:ConditionalFormats():Add("%1=12345"):SetProperty("BackColor",AutomationTranslateColor( GraMakeRGBColor  ( { 240,240,240 } )  , .F. ))
		oItems := oGrid:Items()
			oItems:SetProperty("LockedItemCount",0/*exTop*/,1)
			h := oItems:LockedItem(0/*exTop*/,0)
			oItems:SetProperty("ItemDivider",h,0)
			oItems:SetProperty("CellHasButton",h,0,.T.)
			oItems:SetProperty("CellValue",h,0,"Requery (add a new record, using ADODB.Command)")
			oItems:SetProperty("CellHAlignment",h,0,1/*CenterAlignment*/)
		oGrid:EndUpdate()

	oForm:Show()
	DO WHILE nEvent != xbeP_Quit
		nEvent := AppEvent( @mp1, @mp2, @oXbp )
		oXbp:handleEvent( nEvent, mp1, mp2 )
	ENDDO 
RETURN
1113:
I am using DetectAddNew property, but no new items is added when AddNew is performed

PROCEDURE OnButtonClick(oGrid,Item,ColIndex,Key)
	LOCAL oRecordset
	oRecordset := oGrid:DataSource()
		oRecordset:AddNew("EmployeeID",123)
		oRecordset:Update()
RETURN

PROCEDURE OnError(oGrid,Error,Description)
	DevOut( Transform(Description,"") )
RETURN

#include "AppEvent.ch"
#include "ActiveX.ch"

PROCEDURE Main
 	LOCAL oForm
	LOCAL nEvent := 0, mp1 := NIL, mp2 := NIL, oXbp := NIL
	LOCAL oGrid
	LOCAL oItems
	LOCAL h
	LOCAL rs

	oForm := XbpDialog():new( AppDesktop() )
	oForm:drawingArea:clipChildren := .T.
	oForm:create( ,,{100,100}, {640,480},, .F. )
	oForm:close  := {|| PostAppEvent( xbeP_Quit )}

	oGrid := XbpActiveXControl():new( oForm:drawingArea )
	oGrid:CLSID  := "Exontrol.Grid.1" /*{101EE60F-7B07-48B0-A13A-F32BAE7DA165}*/
	oGrid:create(,, {10,60},{610,370} )

		oGrid:ButtonClick := {|Item,ColIndex,Key| OnButtonClick(oGrid,Item,ColIndex,Key)} /*Occurs when user clicks on the cell's button.*/
		oGrid:Error := {|Error,Description| OnError(oGrid,Error,Description)} /*Fired when an internal error occurs.*/

		oGrid:BeginUpdate()
		oGrid:HeaderAppearance := 4/*Etched*/
		oGrid:ColumnAutoResize := .F.
		rs := CreateObject("ADODB.Recordset")
			rs:Open("Orders","Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\Program Files\Exontrol\ExGrid\Sample\Access2007\sample.accdb",1/*adOpenKeyset*/,3/*adLockOptimistic*/)
		oGrid:DataSource := rs
		oItems := oGrid:Items()
			oItems:SetProperty("LockedItemCount",0/*exTop*/,1)
			h := oItems:LockedItem(0/*exTop*/,0)
			oItems:SetProperty("ItemDivider",h,0)
			oItems:SetProperty("CellHasButton",h,0,.T.)
			oItems:SetProperty("CellValue",h,0,"AddNew")
			oItems:SetProperty("CellHAlignment",h,0,1/*CenterAlignment*/)
		oGrid:DetectAddNew := .T.
		oGrid:DetectDelete := .T.
		oGrid:EndUpdate()

	oForm:Show()
	DO WHILE nEvent != xbeP_Quit
		nEvent := AppEvent( @mp1, @mp2, @oXbp )
		oXbp:handleEvent( nEvent, mp1, mp2 )
	ENDDO 
RETURN
1112:
I am skinning the control's header-bar, but the background of the header-bar is shown on each item in the filter-bar drop down panel. What can I do

#include "AppEvent.ch"
#include "ActiveX.ch"

PROCEDURE Main
 	LOCAL oForm
	LOCAL nEvent := 0, mp1 := NIL, mp2 := NIL, oXbp := NIL
	LOCAL oGrid
	LOCAL oAppearance
	LOCAL oColumn
	LOCAL oItems

	oForm := XbpDialog():new( AppDesktop() )
	oForm:drawingArea:clipChildren := .T.
	oForm:create( ,,{100,100}, {640,480},, .F. )
	oForm:close  := {|| PostAppEvent( xbeP_Quit )}

	oGrid := XbpActiveXControl():new( oForm:drawingArea )
	oGrid:CLSID  := "Exontrol.Grid.1" /*{101EE60F-7B07-48B0-A13A-F32BAE7DA165}*/
	oGrid:create(,, {10,60},{610,370} )

		oGrid:BeginUpdate()
		oAppearance := oGrid:VisualAppearance()
			oAppearance:Add(1,"gBFLBCJwBAEHhEJAAEhABFgDg6AADACAxRDgMQBQKAAzQFAYcBqGqGAAGQZxYgmFgAQhFcZQSKUOQTDKMIziYBYfgkMIgSbJUgDGAkRRdDSOYDmGQYDiCIoRShOMIjHLUXxtDaIZwhEAoJb+RgAUY/cTzaAEUwHHiTKInaCQGhsCYJUJAdRURQ9EwvCIZBpEWwLChENQwWLCNj2TScBwjCyqbale45ViqdoDU8lORLUi+M4zSBPcZVTRtGShPDBKTjMKKYgkG4lVpRNa0PC1GTzQ6mazkKQLRADDIDVbAeL3LiMBy9LyLLItQALByua5mWhbcZyBCOPgBTrRb5zO58FjuTK7YLjMB7NrUNYtFaUMy2OpOCADIaecTNcaWLxPF2MY1HWYxVj2Jw3DuRJonKYBgggSRAlIYw6B0ThGFgPAkFUDAhBMfZRiGNAkFECZnm4YQdneJwqnsSQrGAAhWAIJBJBIQgFCQIBiEIAglgqYo0i4V4MEgRI9gSToYFS" +;
		"b4Fk6Y4+BmBZhFOJgTC8TBogQAArgqco4muCZOkOMJtgmYpIjYKg7GKE4uCUK4AAKKg2DwI4DiCZw5k6KJ2D6D4OHiag4DwIxiiQAArAqMosnEPBPAOIhOg+DozjIJ4PGSY4iEwPAkhKLhHUUSQsnKFCnkYU9MjORhcCsAAIACLQ8iaSJ6FKC5jJoaobA8KYoACCRKnmMJzhuDpZnSboMCKGJ4nMPIPDmYAACwKIDk6CoLCeU40m6I5oliMoKDyaICokLIpgoThviOKJoGYf4KmUKhMjMLJLCAAojCyaYoiYGoGmqM46CkOwPEoKonAACxKlSdItmiWBeBeDgrioNo3D0KxSlAAAtgsUpYnUPRPEoco8hCa+T40SxbBRj5tEsHJ1i6JhbGYS4ug8awelQLZAAKZI5C4DxrhYQ9ehmUppWiA48nAPRuFKYpiAAC47laZQ9iuKZSgOPotkuFI7C6C4gACPJAm8eQOhOQZoikDp3kCS5AACPoEk8fBGnqQg" +;
		"pDOSppD2TxjlyPZD6CfwekQTx5lKP5ImseZTCAL5MAMAAAkoTADmMLpIjISp+HSS4PgyMAADBzAHDSIoPCOUpWjObIKE8NJOHKIwPEaTprBsHpdjWLB9AieQ+DQYwQAAMR1EOZxWi+bx7HcWQ8msfRYnnDhQACRwxgwc5rGaMZPE0ZxqjWNZtgyRwAAyTZEnuXJzEyAx2kQcxNkye5cEy3cYAcANrGAIH4OAhx3gNGGPAfgIR8jBA4McBMARViHH4HQOYmxuCpF2MsecEQVBvGQCcIQvA6i2CAAIARAQ=")
			oAppearance:Add(2,"gBFLBCJwBAEHhEJAAEhABZEGACAADACAxRDgMQBQKAAzQFAYcBqGqGAAGQZxYgmFgAQhFcZQSKUOQTDKMIziYBYJhEMwwDhEIwjHCEEhsGIbJAGQBJCjWGodQLOEgzNC0IxNFCQILhEZJADKII8TTOU5UPRESwTE4cKBmKhQCo2NpKR7VUTxCKQahLLivoCjBT8EzHMqtIzrCA6MpaP4pQjKcqwHJ8YyHEi0ZrjazKaj6T5AXDUcaWbbNVx3PK3aioOpLZrqOZZYzYFoABTuJzPMSyIhxXD8cweaZvSpLExVYK9BY3PbKMgxC77QgTIpDaQMNS6PjtF43PAALLFUaNYzoOKzABMHATBIXAYJCwIIR5G7ID4BbQcCQAHL9DBaEEIAEEISgGhMGZQmocgymmIRQkIEQ2BcGgbEIRQci8XaMBqTRVgSAZHG+S5pnOep+D6f4vjec5zn0fpfmgBgAH6TRoBYBoAh+eAmAiAgPFgNArgOQpIESdoEmCOAOAq" +;
		"BYfFGAgaEaBgYHYFYFmIB5UiGCJUgKCgmgeYoHk4BgCmKRQiCwApgHgYgyH8B54lQU4NkMeJlBoDgjkiXBTg0R54iYIR+koeQVBoKpkgkChKhEJBkF4SFEjkDgJhFQoeEmDJlBeehUhWJQJGIXoICWOQ6FeFIlhkfhlDsSJpiQVoamaSY2G6G5nAmRhpCOH5pkwVYdmeCZmHqHpnkmdhzhmaAIFiax8AABAEICA==")
		oGrid:SetProperty("BackColorHeader",0x1000000)
		oGrid:SetProperty("ForeColorHeader",AutomationTranslateColor( GraMakeRGBColor  ( { 128,128,128 } )  , .F. ))
		oGrid:SetProperty("Background",0/*exHeaderFilterBarButton*/,0x2000000)
		oGrid:SetProperty("Background",26/*exBackColorFilter*/,AutomationTranslateColor( GraMakeRGBColor  ( { 255,255,255 } )  , .F. ))
		oGrid:SetProperty("Background",27/*exForeColorFilter*/,AutomationTranslateColor( GraMakeRGBColor  ( { 0,0,1 } )  , .F. ))
		oGrid:SetProperty("Background",20/*exSelBackColorFilter*/,0x1ff8000)
		oGrid:SetProperty("Background",21/*exSelForeColorFilter*/,AutomationTranslateColor( GraMakeRGBColor  ( { 240,240,240 } )  , .F. ))
		oGrid:SetProperty("Background",32/*exCursorHoverColumn*/,-1)
		oGrid:HeaderHeight := 24
		oGrid:SetProperty("BackColorLevelHeader",oGrid:BackColor())
		oColumn := oGrid:Columns():Add("Filter")
			oColumn:DisplayFilterButton := .T.
			oColumn:DisplayFilterPattern := .F.
			oColumn:FilterList := 9504/*exShowExclude+exShowFocusItem+exShowCheckBox+exSortItemsAsc*/
			oColumn:SetProperty("Def",52/*exHeaderPaddingLeft*/,2)
			oColumn:SetProperty("Def",53/*exHeaderPaddingRight*/,2)
		oItems := oGrid:Items()
			oItems:AddItem("A")
			oItems:AddItem("B")
			oItems:AddItem("C")
			oItems:AddItem("D")
		oGrid:EndUpdate()

	oForm:Show()
	DO WHILE nEvent != xbeP_Quit
		nEvent := AppEvent( @mp1, @mp2, @oXbp )
		oXbp:handleEvent( nEvent, mp1, mp2 )
	ENDDO 
RETURN
1111:
How can I change the font for entire column (method 3)

PROCEDURE OnAddItem(oGrid,Item)
	LOCAL oItems
	oItems := oGrid:Items()
		oItems:SetProperty("CellFont",Item,1,oGrid:Columns:Item(1):Data())
		oItems:SetProperty("CellBold",Item,1,.T.)
		oItems:SetProperty("CellForeColor",Item,1,AutomationTranslateColor( GraMakeRGBColor  ( { 255,0,0 } )  , .F. ))
RETURN

#include "AppEvent.ch"
#include "ActiveX.ch"

PROCEDURE Main
 	LOCAL oForm
	LOCAL nEvent := 0, mp1 := NIL, mp2 := NIL, oXbp := NIL
	LOCAL oGrid
	LOCAL oColumn
	LOCAL oItems
	LOCAL f

	oForm := XbpDialog():new( AppDesktop() )
	oForm:drawingArea:clipChildren := .T.
	oForm:create( ,,{100,100}, {640,480},, .F. )
	oForm:close  := {|| PostAppEvent( xbeP_Quit )}

	oGrid := XbpActiveXControl():new( oForm:drawingArea )
	oGrid:CLSID  := "Exontrol.Grid.1" /*{101EE60F-7B07-48B0-A13A-F32BAE7DA165}*/
	oGrid:create(,, {10,60},{610,370} )

		oGrid:AddItem := {|Item| OnAddItem(oGrid,Item)} /*Occurs after a new Item has been inserted to Items collection.*/

		oGrid:BeginUpdate()
		oGrid:HeaderHeight := 24
		oGrid:HeaderAppearance := 4/*Etched*/
		oGrid:Columns():Add("C1")
		oColumn := oGrid:Columns():Add("C2")
			oColumn:HTMLCaption := "<b><font Tahoma;14>C2"
			f := CreateObject("StdFont")
				f:Name := "Tahoma"
				f:Size := 11
			oColumn:Data := f
		oItems := oGrid:Items()
			oItems:SetProperty("CellValue",oItems:AddItem(10),1,11)
			oItems:SetProperty("CellValue",oItems:AddItem(12),1,13)
		oGrid:EndUpdate()

	oForm:Show()
	DO WHILE nEvent != xbeP_Quit
		nEvent := AppEvent( @mp1, @mp2, @oXbp )
		oXbp:handleEvent( nEvent, mp1, mp2 )
	ENDDO 
RETURN
1110:
How can I change the font for entire column (method 2)

PROCEDURE OnAddItem(oGrid,Item)
	LOCAL oItems
	LOCAL f
	oItems := oGrid:Items()
		f := CreateObject("StdFont")
			f:Name := "Tahoma"
			f:Size := 11
		oItems:SetProperty("CellFont",Item,1,f)
		oItems:SetProperty("CellBold",Item,1,.T.)
		oItems:SetProperty("CellForeColor",Item,1,AutomationTranslateColor( GraMakeRGBColor  ( { 255,0,0 } )  , .F. ))
RETURN

#include "AppEvent.ch"
#include "ActiveX.ch"

PROCEDURE Main
 	LOCAL oForm
	LOCAL nEvent := 0, mp1 := NIL, mp2 := NIL, oXbp := NIL
	LOCAL oGrid
	LOCAL oItems

	oForm := XbpDialog():new( AppDesktop() )
	oForm:drawingArea:clipChildren := .T.
	oForm:create( ,,{100,100}, {640,480},, .F. )
	oForm:close  := {|| PostAppEvent( xbeP_Quit )}

	oGrid := XbpActiveXControl():new( oForm:drawingArea )
	oGrid:CLSID  := "Exontrol.Grid.1" /*{101EE60F-7B07-48B0-A13A-F32BAE7DA165}*/
	oGrid:create(,, {10,60},{610,370} )

		oGrid:AddItem := {|Item| OnAddItem(oGrid,Item)} /*Occurs after a new Item has been inserted to Items collection.*/

		oGrid:BeginUpdate()
		oGrid:HeaderHeight := 24
		oGrid:HeaderAppearance := 4/*Etched*/
		oGrid:Columns():Add("C1")
		oGrid:Columns():Add("C2"):HTMLCaption := "<b><font Tahoma;14>C2"
		oItems := oGrid:Items()
			oItems:SetProperty("CellValue",oItems:AddItem(10),1,11)
			oItems:SetProperty("CellValue",oItems:AddItem(12),1,13)
		oGrid:EndUpdate()

	oForm:Show()
	DO WHILE nEvent != xbeP_Quit
		nEvent := AppEvent( @mp1, @mp2, @oXbp )
		oXbp:handleEvent( nEvent, mp1, mp2 )
	ENDDO 
RETURN
1109:
How can I change the font for entire column (method 1)

#include "AppEvent.ch"
#include "ActiveX.ch"

PROCEDURE Main
 	LOCAL oForm
	LOCAL nEvent := 0, mp1 := NIL, mp2 := NIL, oXbp := NIL
	LOCAL oGrid
	LOCAL oConditionalFormat
	LOCAL oItems
	LOCAL f

	oForm := XbpDialog():new( AppDesktop() )
	oForm:drawingArea:clipChildren := .T.
	oForm:create( ,,{100,100}, {640,480},, .F. )
	oForm:close  := {|| PostAppEvent( xbeP_Quit )}

	oGrid := XbpActiveXControl():new( oForm:drawingArea )
	oGrid:CLSID  := "Exontrol.Grid.1" /*{101EE60F-7B07-48B0-A13A-F32BAE7DA165}*/
	oGrid:create(,, {10,60},{610,370} )

		oGrid:BeginUpdate()
		oConditionalFormat := oGrid:ConditionalFormats():Add("1")
			oConditionalFormat:Bold := .T.
			oConditionalFormat:SetProperty("ForeColor",AutomationTranslateColor( GraMakeRGBColor  ( { 255,0,0 } )  , .F. ))
			f := CreateObject("StdFont")
				f:Name := "Tahoma"
				f:Size := 11
			oConditionalFormat:Font := f
			oConditionalFormat:ApplyTo := 1/*0x1+*/
		oGrid:HeaderHeight := 24
		oGrid:HeaderAppearance := 4/*Etched*/
		oGrid:Columns():Add("C1")
		oGrid:Columns():Add("C2"):HTMLCaption := "<b><font Tahoma;14>C2"
		oItems := oGrid:Items()
			oItems:SetProperty("CellValue",oItems:AddItem(10),1,11)
			oItems:SetProperty("CellValue",oItems:AddItem(12),1,13)
		oGrid:EndUpdate()

	oForm:Show()
	DO WHILE nEvent != xbeP_Quit
		nEvent := AppEvent( @mp1, @mp2, @oXbp )
		oXbp:handleEvent( nEvent, mp1, mp2 )
	ENDDO 
RETURN
1108:
I am using ExComboBox as an user editor, how can I display a different column

PROCEDURE OnUserEditorClose(oGrid,Object,Item,ColIndex)
	/*Items.CellValue(Item,ColIndex) = Object.Select("OrderID")*/

RETURN

PROCEDURE OnUserEditorOleEvent(oGrid,Object,Ev,CloseEditor,Item,ColIndex)
	DevOut( Transform(Ev,"") )
RETURN

PROCEDURE OnUserEditorOpen(oGrid,Object,Item,ColIndex)
	/*Object.Select("OrderID") = Me.Items.CellValue(Item,ColIndex)*/

RETURN

#include "AppEvent.ch"
#include "ActiveX.ch"

PROCEDURE Main
 	LOCAL oForm
	LOCAL nEvent := 0, mp1 := NIL, mp2 := NIL, oXbp := NIL
	LOCAL oGrid
	LOCAL oColumn,oColumn1
	LOCAL oComboBox
	LOCAL oEditor
	LOCAL oItems
	LOCAL h
	LOCAL rs

	oForm := XbpDialog():new( AppDesktop() )
	oForm:drawingArea:clipChildren := .T.
	oForm:create( ,,{100,100}, {640,480},, .F. )
	oForm:close  := {|| PostAppEvent( xbeP_Quit )}

	oGrid := XbpActiveXControl():new( oForm:drawingArea )
	oGrid:CLSID  := "Exontrol.Grid.1" /*{101EE60F-7B07-48B0-A13A-F32BAE7DA165}*/
	oGrid:create(,, {10,60},{610,370} )

		oGrid:UserEditorClose := {|Object,Item,ColIndex| OnUserEditorClose(oGrid,Object,Item,ColIndex)} /*Fired the user editor is about to be opened.*/
		oGrid:UserEditorOleEvent := {|Object,Ev,CloseEditor,Item,ColIndex| OnUserEditorOleEvent(oGrid,Object,Ev,CloseEditor,Item,ColIndex)} /*Occurs when an user editor fires an event.*/
		oGrid:UserEditorOpen := {|Object,Item,ColIndex| OnUserEditorOpen(oGrid,Object,Item,ColIndex)} /*Occurs when an user editor is about to be opened.*/

		oGrid:BeginUpdate()
		oGrid:SortOnClick := 0/*exNoSort*/
		oEditor := oGrid:Columns():Add("Exontrol.ComboBox"):Editor()
			oEditor:EditType := 16/*UserEditorType*/
			oEditor:UserEditor("Exontrol.ComboBox","")
			oComboBox := oEditor:UserEditorObject()
				oComboBox:BeginUpdate()
				oComboBox:Style := 2/*DropDownList*/
				oComboBox:ColumnAutoResize := .F.
				rs := CreateObject("ADOR.Recordset")
					rs:Open("Orders","Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\Program Files\Exontrol\ExGrid\Sample\SAMPLE.MDB",3/*adOpenStatic*/,3/*adLockOptimistic*/)
				oComboBox:DataSource := rs
				oComboBox:Alignment := 0/*LeftAlignment*/
				oComboBox:IntegralHeight := .T.
				oComboBox:MinHeightList := 128
				oComboBox:MinWidthList := 648
				oComboBox:HeaderHeight := 36
				oComboBox:AllowSizeGrip := .T.
				oComboBox:SingleEdit := .T.
				oComboBox:LabelColumnIndex := 7
				oComboBox:SearchColumnIndex := 0
				oColumn := oComboBox:Columns:Item(0)
					oColumn:HeaderBold := .T.
					oColumn:HTMLCaption := "OrderID<br><fgcolor=808080>(search)"
				oColumn1 := oComboBox:Columns:Item(7)
					oColumn1:HeaderBold := .T.
					oColumn1:HTMLCaption := "ShipName<br><fgcolor=808080>(display)"
					oColumn1:Width := 128
				oComboBox:UseTabKey := .F.
				oComboBox:EndUpdate()
		oGrid:DrawGridLines := -2/*exRowLines*/
		oGrid:TreeColumnIndex := -1
		oGrid:DefaultItemHeight := 21
		oItems := oGrid:Items()
			h := oItems:AddItem("shows always the drop-down editor")
			oItems:SetProperty("CellHAlignment",h,0,1/*CenterAlignment*/)
			oItems:SetProperty("ItemDivider",h,0)
			oItems:SetProperty("ItemDividerLineAlignment",h,1/*DividerCenter*/)
			oItems:SetProperty("SelectableItem",h,.F.)
			oItems:SetProperty("EnableItem",h,.F.)
			oItems:SetProperty("CellEditorVisible",oItems:AddItem(10248),0,1/*exEditorVisible*/)
			oItems:SetProperty("CellEditorVisible",oItems:AddItem(10249),0,1/*exEditorVisible*/)
			oItems:SetProperty("CellEditorVisible",oItems:AddItem(10250),0,1/*exEditorVisible*/)
			h := oItems:AddItem("shows the drop-down editor when user clicks it")
			oItems:SetProperty("CellHAlignment",h,0,1/*CenterAlignment*/)
			oItems:SetProperty("ItemDivider",h,0)
			oItems:SetProperty("ItemDividerLineAlignment",h,1/*DividerCenter*/)
			oItems:SetProperty("SelectableItem",h,.F.)
			oItems:SetProperty("EnableItem",h,.F.)
			oItems:AddItem(10248)
			oItems:AddItem(10249)
			oItems:AddItem(10250)
		oGrid:EndUpdate()

	oForm:Show()
	DO WHILE nEvent != xbeP_Quit
		nEvent := AppEvent( @mp1, @mp2, @oXbp )
		oXbp:handleEvent( nEvent, mp1, mp2 )
	ENDDO 
RETURN
1107:
The ItemHeight property is not working (method 2)

#include "AppEvent.ch"
#include "ActiveX.ch"

PROCEDURE Main
 	LOCAL oForm
	LOCAL nEvent := 0, mp1 := NIL, mp2 := NIL, oXbp := NIL
	LOCAL oGrid
	LOCAL oItems
	LOCAL h

	oForm := XbpDialog():new( AppDesktop() )
	oForm:drawingArea:clipChildren := .T.
	oForm:create( ,,{100,100}, {640,480},, .F. )
	oForm:close  := {|| PostAppEvent( xbeP_Quit )}

	oGrid := XbpActiveXControl():new( oForm:drawingArea )
	oGrid:CLSID  := "Exontrol.Grid.1" /*{101EE60F-7B07-48B0-A13A-F32BAE7DA165}*/
	oGrid:create(,, {10,60},{610,370} )

		oGrid:BeginUpdate()
		oGrid:ColumnAutoResize := .F.
		oGrid:ScrollBySingleLine := .T.
		oGrid:Columns():Add("Column"):Width := 128
		oItems := oGrid:Items()
			oItems:SetProperty("CellSingleLine",oItems:AddItem("This is a bit of text that should break the line"),0,0/*exCaptionWordWrap*/)
			h := oItems:AddItem("")
			oItems:SetProperty("ItemDivider",h,0)
			oItems:SetProperty("SelectableItem",h,.F.)
			oItems:SetProperty("ItemDividerLineAlignment",h,1/*DividerCenter*/)
			oItems:SetProperty("ItemHeight",h,3)
			oItems:SetProperty("CellSingleLine",oItems:AddItem("This is a bit of text that should break the line"),0,0/*exCaptionWordWrap*/)
		oGrid:EndUpdate()

	oForm:Show()
	DO WHILE nEvent != xbeP_Quit
		nEvent := AppEvent( @mp1, @mp2, @oXbp )
		oXbp:handleEvent( nEvent, mp1, mp2 )
	ENDDO 
RETURN
1106:
The ItemHeight property is not working (method 1)

#include "AppEvent.ch"
#include "ActiveX.ch"

PROCEDURE Main
 	LOCAL oForm
	LOCAL nEvent := 0, mp1 := NIL, mp2 := NIL, oXbp := NIL
	LOCAL oGrid
	LOCAL oColumn
	LOCAL oItems
	LOCAL h

	oForm := XbpDialog():new( AppDesktop() )
	oForm:drawingArea:clipChildren := .T.
	oForm:create( ,,{100,100}, {640,480},, .F. )
	oForm:close  := {|| PostAppEvent( xbeP_Quit )}

	oGrid := XbpActiveXControl():new( oForm:drawingArea )
	oGrid:CLSID  := "Exontrol.Grid.1" /*{101EE60F-7B07-48B0-A13A-F32BAE7DA165}*/
	oGrid:create(,, {10,60},{610,370} )

		oGrid:BeginUpdate()
		oGrid:ColumnAutoResize := .F.
		oGrid:ScrollBySingleLine := .T.
		oColumn := oGrid:Columns():Add("Column")
			oColumn:Width := 128
			oColumn:SetProperty("Def",16/*exCellSingleLine*/,0)
		oItems := oGrid:Items()
			oItems:AddItem("This is a bit of text that should break the line")
			h := oItems:AddItem("")
			oItems:SetProperty("ItemDivider",h,0)
			oItems:SetProperty("SelectableItem",h,.F.)
			oItems:SetProperty("ItemDividerLineAlignment",h,1/*DividerCenter*/)
			oItems:SetProperty("ItemMinHeight",h,3)
			oItems:SetProperty("ItemMaxHeight",h,3)
			oItems:AddItem("This is a bit of text that should break the line")
		oGrid:EndUpdate()

	oForm:Show()
	DO WHILE nEvent != xbeP_Quit
		nEvent := AppEvent( @mp1, @mp2, @oXbp )
		oXbp:handleEvent( nEvent, mp1, mp2 )
	ENDDO 
RETURN
1105:
How do I add a total field locked at the bottom of the control

PROCEDURE OnAddGroupItem(oGrid,Item)
	LOCAL oItems
	oItems := oGrid:Items()
		oItems:SetProperty("ItemDividerLine",Item,0/*EmptyLine*/)
		oItems:SetProperty("FormatCell",Item,oItems:GroupItem(Item),"value + ` Min: <b>` + %13 + `</b> Max: <b>` + %14 + `</b> Sum: <b>` + %15 + `</b>, of Freight column`")
		oItems:SetProperty("CellValue",Item,"Min","min(current,all,dbl(%6))")
		oItems:SetProperty("CellValueFormat",Item,"Min",4/*exTotalField*/)
		oItems:SetProperty("CellValue",Item,"Max","max(current,all,dbl(%6))")
		oItems:SetProperty("CellValueFormat",Item,"Max",4/*exTotalField*/)
		oItems:SetProperty("CellValue",Item,"Sum","sum(current,all,dbl(%6))")
		oItems:SetProperty("CellValueFormat",Item,"Sum",4/*exTotalField*/)
		oItems:SetProperty("ItemBackColor",Item,AutomationTranslateColor( GraMakeRGBColor  ( { 240,240,240 } )  , .F. ))
RETURN

PROCEDURE OnChange(oGrid,Item,ColIndex,NewValue)
	oGrid:Refresh()
RETURN

#include "AppEvent.ch"
#include "ActiveX.ch"

PROCEDURE Main
 	LOCAL oForm
	LOCAL nEvent := 0, mp1 := NIL, mp2 := NIL, oXbp := NIL
	LOCAL oGrid
	LOCAL oColumn,oColumn1,var_Column,var_Column1
	LOCAL oColumns
	LOCAL oItems
	LOCAL hL
	LOCAL rs

	oForm := XbpDialog():new( AppDesktop() )
	oForm:drawingArea:clipChildren := .T.
	oForm:create( ,,{100,100}, {640,480},, .F. )
	oForm:close  := {|| PostAppEvent( xbeP_Quit )}

	oGrid := XbpActiveXControl():new( oForm:drawingArea )
	oGrid:CLSID  := "Exontrol.Grid.1" /*{101EE60F-7B07-48B0-A13A-F32BAE7DA165}*/
	oGrid:create(,, {10,60},{610,370} )

		oGrid:AddGroupItem := {|Item| OnAddGroupItem(oGrid,Item)} /*Occurs after a new Group Item has been inserted to Items collection.*/
		oGrid:Change := {|Item,ColIndex,NewValue| OnChange(oGrid,Item,ColIndex,NewValue)} /*Occurs when the user changes the cell's content.*/

		oGrid:BeginUpdate()
		oGrid:HasLines := 0/*exNoLine*/
		oGrid:SetProperty("Description",26/*exColumnsFloatBar*/,"Show/Hide")
		oGrid:ColumnsFloatBarSortOrder := 1/*SortAscending*/
		oGrid:ColumnsFloatBarVisible := 2/*exColumnsFloatBarVisibleIncludeCheckColumns*/
		oGrid:ColumnAutoResize := .F.
		oGrid:SetProperty("BackColorSortBar",AutomationTranslateColor( GraMakeRGBColor  ( { 240,240,240 } )  , .F. ))
		rs := CreateObject("ADOR.Recordset")
			rs:Open("Orders","Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\Program Files\Exontrol\ExGrid\Sample\SAMPLE.MDB",3/*adOpenStatic*/,3/*adLockOptimistic*/)
		oGrid:DataSource := rs
		oGrid:SingleSort := .F.
		oGrid:SortBarVisible := .T.
		oGrid:AllowGroupBy := .T.
		oGrid:SortBarCaption := "Drag a <b>column</b> header here to group by that column."
		oColumns := oGrid:Columns()
			oColumn := oColumns:Add("Min")
				oColumn:Visible := .F.
				oColumn:AllowDragging := .F.
			var_Column := oColumns:Add("Max")
				var_Column:Visible := .F.
				var_Column:Visible := .F.
				var_Column:AllowDragging := .F.
			var_Column1 := oColumns:Add("Sum")
				var_Column1:Visible := .F.
				var_Column1:Visible := .F.
				var_Column1:AllowDragging := .F.
		oColumn1 := oGrid:Columns:Item("Freight")
			oColumn1:FormatColumn := "currency(value)"
			oColumn1:SetProperty("Def",4/*exCellBackColor*/,12895487)
			oColumn1:SetProperty("Def",7/*exHeaderBackColor*/,oColumn1:Def(4/*exCellBackColor*/))
			oColumn1:HeaderBold := .T.
			oColumn1:AllowGroupBy := .F.
			oColumn1:Alignment := 2/*RightAlignment*/
		oGrid:ScrollBySingleLine := .F.
		oItems := oGrid:Items()
			oItems:SetProperty("LockedItemCount",2/*exBottom*/,2)
			hL := oItems:LockedItem(2/*exBottom*/,0)
			oItems:SetProperty("ItemDivider",hL,0)
			oItems:SetProperty("ItemHeight",hL,3)
			oItems:SetProperty("ItemDividerLineAlignment",hL,2/*DividerTop*/)
			oItems:SetProperty("ItemDividerLine",hL,2/*DoubleLine*/)
			hL := oItems:LockedItem(2/*exBottom*/,1)
			oItems:SetProperty("CellValue",hL,6,"sum(all,rec,dbl(%6))")
			oItems:SetProperty("CellValueFormat",hL,6,4/*exTotalField*/)
			oItems:SetProperty("ItemHeight",hL,24)
			oItems:SetProperty("ItemBold",hL,.T.)
		oGrid:Columns:Item("EmployeeID"):SortOrder := -1/*0xfffffffc+SortDescending+SortAscending*/
		oGrid:EndUpdate()

	oForm:Show()
	DO WHILE nEvent != xbeP_Quit
		nEvent := AppEvent( @mp1, @mp2, @oXbp )
		oXbp:handleEvent( nEvent, mp1, mp2 )
	ENDDO 
RETURN
1104:
How can I add a total field, when I use grouping

PROCEDURE OnAddGroupItem(oGrid,Item)
	LOCAL oItems
	oItems := oGrid:Items()
		oItems:SetProperty("ItemDividerLine",Item,0/*EmptyLine*/)
		oItems:SetProperty("FormatCell",Item,oItems:GroupItem(Item),"value + ` Min: <b>` + %13 + `</b> Max: <b>` + %14 + `</b> Sum: <b>` + %15 + `</b>, of Freight column`")
		oItems:SetProperty("CellValue",Item,"Min","min(current,all,dbl(%6))")
		oItems:SetProperty("CellValueFormat",Item,"Min",4/*exTotalField*/)
		oItems:SetProperty("CellValue",Item,"Max","max(current,all,dbl(%6))")
		oItems:SetProperty("CellValueFormat",Item,"Max",4/*exTotalField*/)
		oItems:SetProperty("CellValue",Item,"Sum","sum(current,all,dbl(%6))")
		oItems:SetProperty("CellValueFormat",Item,"Sum",4/*exTotalField*/)
		oItems:SetProperty("ItemBackColor",Item,AutomationTranslateColor( GraMakeRGBColor  ( { 240,240,240 } )  , .F. ))
RETURN

PROCEDURE OnChange(oGrid,Item,ColIndex,NewValue)
	oGrid:Refresh()
RETURN

#include "AppEvent.ch"
#include "ActiveX.ch"

PROCEDURE Main
 	LOCAL oForm
	LOCAL nEvent := 0, mp1 := NIL, mp2 := NIL, oXbp := NIL
	LOCAL oGrid
	LOCAL oColumn
	LOCAL oColumns
	LOCAL oItems
	LOCAL hL
	LOCAL rs

	oForm := XbpDialog():new( AppDesktop() )
	oForm:drawingArea:clipChildren := .T.
	oForm:create( ,,{100,100}, {640,480},, .F. )
	oForm:close  := {|| PostAppEvent( xbeP_Quit )}

	oGrid := XbpActiveXControl():new( oForm:drawingArea )
	oGrid:CLSID  := "Exontrol.Grid.1" /*{101EE60F-7B07-48B0-A13A-F32BAE7DA165}*/
	oGrid:create(,, {10,60},{610,370} )

		oGrid:AddGroupItem := {|Item| OnAddGroupItem(oGrid,Item)} /*Occurs after a new Group Item has been inserted to Items collection.*/
		oGrid:Change := {|Item,ColIndex,NewValue| OnChange(oGrid,Item,ColIndex,NewValue)} /*Occurs when the user changes the cell's content.*/

		oGrid:BeginUpdate()
		oGrid:HasLines := 0/*exNoLine*/
		oGrid:ColumnAutoResize := .F.
		oGrid:SetProperty("BackColorSortBar",AutomationTranslateColor( GraMakeRGBColor  ( { 240,240,240 } )  , .F. ))
		rs := CreateObject("ADOR.Recordset")
			rs:Open("Orders","Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\Program Files\Exontrol\ExGrid\Sample\SAMPLE.MDB",3/*adOpenStatic*/,3/*adLockOptimistic*/)
		oGrid:DataSource := rs
		oGrid:SingleSort := .F.
		oGrid:SortBarVisible := .T.
		oGrid:AllowGroupBy := .T.
		oGrid:Columns:Item(1):SortOrder := -1/*0xfffffffc+SortDescending+SortAscending*/
		oColumns := oGrid:Columns()
			oColumns:Add("Min"):Visible := .F.
			oColumns:Add("Max"):Visible := .F.
			oColumns:Add("Sum"):Visible := .F.
		oColumn := oGrid:Columns:Item("Freight")
			oColumn:SetProperty("Def",4/*exCellBackColor*/,12895487)
			oColumn:SetProperty("Def",7/*exHeaderBackColor*/,oColumn:Def(4/*exCellBackColor*/))
			oColumn:HeaderBold := .T.
			oColumn:AllowGroupBy := .F.
		oGrid:ScrollBySingleLine := .F.
		oItems := oGrid:Items()
			oItems:SetProperty("LockedItemCount",2/*exBottom*/,1)
			hL := oItems:LockedItem(2/*exBottom*/,0)
			oItems:SetProperty("ItemDivider",hL,0)
			oItems:SetProperty("ItemHeight",hL,24)
			oItems:SetProperty("ItemDividerLineAlignment",hL,2/*DividerTop*/)
			oItems:SetProperty("ItemDividerLine",hL,2/*DoubleLine*/)
			oItems:SetProperty("CellValue",hL,0,"sum(all,rec,dbl(%6))")
			oItems:SetProperty("CellValueFormat",hL,0,5/*exTotalField+exHTML*/)
			oItems:SetProperty("CellHAlignment",hL,0,2/*RightAlignment*/)
			oItems:SetProperty("FormatCell",hL,0,"'Freight: <bgcolor=FFC4C4> '+(value format ``) + ` `")
		oGrid:EndUpdate()

	oForm:Show()
	DO WHILE nEvent != xbeP_Quit
		nEvent := AppEvent( @mp1, @mp2, @oXbp )
		oXbp:handleEvent( nEvent, mp1, mp2 )
	ENDDO 
RETURN
1103:
How do I use the ColumnsFloatBarVisible on exColumnsFloatBarVisibleIncludeCheckColumns

#include "AppEvent.ch"
#include "ActiveX.ch"

PROCEDURE Main
 	LOCAL oForm
	LOCAL nEvent := 0, mp1 := NIL, mp2 := NIL, oXbp := NIL
	LOCAL oGrid
	LOCAL oColumns

	oForm := XbpDialog():new( AppDesktop() )
	oForm:drawingArea:clipChildren := .T.
	oForm:create( ,,{100,100}, {640,480},, .F. )
	oForm:close  := {|| PostAppEvent( xbeP_Quit )}

	oGrid := XbpActiveXControl():new( oForm:drawingArea )
	oGrid:CLSID  := "Exontrol.Grid.1" /*{101EE60F-7B07-48B0-A13A-F32BAE7DA165}*/
	oGrid:create(,, {10,60},{610,370} )

		oGrid:BeginUpdate()
		oGrid:ColumnAutoResize := .F.
		oGrid:HeaderAppearance := 4/*Etched*/
		oColumns := oGrid:Columns()
			oColumns:Add("City")
			oColumns:Add("Start"):Visible := .F.
			oColumns:Add("End"):Visible := .F.
		oGrid:SetProperty("Description",26/*exColumnsFloatBar*/,"Show/Hide")
		oGrid:ColumnsFloatBarSortOrder := 1/*SortAscending*/
		oGrid:ColumnsFloatBarVisible := 2/*exColumnsFloatBarVisibleIncludeCheckColumns*/
		oGrid:EndUpdate()

	oForm:Show()
	DO WHILE nEvent != xbeP_Quit
		nEvent := AppEvent( @mp1, @mp2, @oXbp )
		oXbp:handleEvent( nEvent, mp1, mp2 )
	ENDDO 
RETURN
1102:
How do I use the ColumnsFloatBarVisible on exColumnsFloatBarVisibleIncludeHiddenColumn

#include "AppEvent.ch"
#include "ActiveX.ch"

PROCEDURE Main
 	LOCAL oForm
	LOCAL nEvent := 0, mp1 := NIL, mp2 := NIL, oXbp := NIL
	LOCAL oGrid
	LOCAL oColumns

	oForm := XbpDialog():new( AppDesktop() )
	oForm:drawingArea:clipChildren := .T.
	oForm:create( ,,{100,100}, {640,480},, .F. )
	oForm:close  := {|| PostAppEvent( xbeP_Quit )}

	oGrid := XbpActiveXControl():new( oForm:drawingArea )
	oGrid:CLSID  := "Exontrol.Grid.1" /*{101EE60F-7B07-48B0-A13A-F32BAE7DA165}*/
	oGrid:create(,, {10,60},{610,370} )

		oGrid:BeginUpdate()
		oGrid:ColumnAutoResize := .F.
		oGrid:HeaderAppearance := 4/*Etched*/
		oColumns := oGrid:Columns()
			oColumns:Add("City")
			oColumns:Add("Start"):Visible := .F.
			oColumns:Add("End"):Visible := .F.
		oGrid:SetProperty("Description",26/*exColumnsFloatBar*/,"Show")
		oGrid:ColumnsFloatBarVisible := -1/*exColumnsFloatBarVisibleIncludeHiddenColumns*/
		oGrid:ColumnsFloatBarSortOrder := 1/*SortAscending*/
		oGrid:EndUpdate()

	oForm:Show()
	DO WHILE nEvent != xbeP_Quit
		nEvent := AppEvent( @mp1, @mp2, @oXbp )
		oXbp:handleEvent( nEvent, mp1, mp2 )
	ENDDO 
RETURN
1101:
How do I use the ColumnsFloatBarVisible on exColumnsFloatBarVisibleIncludeGroupByColumns

#include "AppEvent.ch"
#include "ActiveX.ch"

PROCEDURE Main
 	LOCAL oForm
	LOCAL nEvent := 0, mp1 := NIL, mp2 := NIL, oXbp := NIL
	LOCAL oGrid
	LOCAL oColumns

	oForm := XbpDialog():new( AppDesktop() )
	oForm:drawingArea:clipChildren := .T.
	oForm:create( ,,{100,100}, {640,480},, .F. )
	oForm:close  := {|| PostAppEvent( xbeP_Quit )}

	oGrid := XbpActiveXControl():new( oForm:drawingArea )
	oGrid:CLSID  := "Exontrol.Grid.1" /*{101EE60F-7B07-48B0-A13A-F32BAE7DA165}*/
	oGrid:create(,, {10,60},{610,370} )

		oGrid:BeginUpdate()
		oGrid:ColumnAutoResize := .F.
		oGrid:HeaderAppearance := 4/*Etched*/
		oColumns := oGrid:Columns()
			oColumns:Add("City")
			oColumns:Add("Start")
			oColumns:Add("End")
		oGrid:AllowGroupBy := .T.
		oGrid:SortBarVisible := .T.
		oGrid:SortBarCaption := "Drag a <b>column</b> header here to group by that column."
		oGrid:SetProperty("BackColorSortBar",AutomationTranslateColor( GraMakeRGBColor  ( { 250,250,250 } )  , .F. ))
		oGrid:SetProperty("Description",26/*exColumnsFloatBar*/,"Group-By")
		oGrid:ColumnsFloatBarVisible := 1/*exColumnsFloatBarVisibleIncludeGroupByColumns*/
		oGrid:ColumnsFloatBarSortOrder := 1/*SortAscending*/
		oGrid:Columns:Item("City"):SortOrder := 1/*SortAscending*/
		oGrid:EndUpdate()

	oForm:Show()
	DO WHILE nEvent != xbeP_Quit
		nEvent := AppEvent( @mp1, @mp2, @oXbp )
		oXbp:handleEvent( nEvent, mp1, mp2 )
	ENDDO 
RETURN
1100:
How can I advance to the next line, once the user presses the ENTER key

PROCEDURE OnKeyDown(oGrid,KeyCode,Shift)
	DevOut( "KeyCode Before:" )
	DevOut( Transform(KeyCode,"") )
	KeyCode := oGrid:FormatABC("value = 13 ? 40 : value",KeyCode)
	DevOut( "KeyCode After:" )
	DevOut( Transform(KeyCode,"") )
RETURN

#include "AppEvent.ch"
#include "ActiveX.ch"

PROCEDURE Main
 	LOCAL oForm
	LOCAL nEvent := 0, mp1 := NIL, mp2 := NIL, oXbp := NIL
	LOCAL oGrid
	LOCAL oColumns
	LOCAL oEditor,oEditor1
	LOCAL oItems
	LOCAL h0

	oForm := XbpDialog():new( AppDesktop() )
	oForm:drawingArea:clipChildren := .T.
	oForm:create( ,,{100,100}, {640,480},, .F. )
	oForm:close  := {|| PostAppEvent( xbeP_Quit )}

	oGrid := XbpActiveXControl():new( oForm:drawingArea )
	oGrid:CLSID  := "Exontrol.Grid.1" /*{101EE60F-7B07-48B0-A13A-F32BAE7DA165}*/
	oGrid:create(,, {10,60},{610,370} )

		oGrid:KeyDown := {|KeyCode,Shift| OnKeyDown(oGrid,KeyCode,Shift)} /*Occurs when the user presses a key while an object has the focus.*/

		oGrid:BeginUpdate()
		oColumns := oGrid:Columns()
			oEditor := oColumns:Add("A"):Editor()
				oEditor:Appearance := 4/*EtchedApp*/
				oEditor:EditType := 1/*EditType*/
			oEditor1 := oColumns:Add("B"):Editor()
				oEditor1:Appearance := 4/*EtchedApp*/
				oEditor1:EditType := 1/*EditType*/
		oItems := oGrid:Items()
			h0 := oItems:AddItem("Item A.1")
			oItems:SetProperty("CellValue",h0,1,"Item B.1")
			h0 := oItems:AddItem("Item A.2")
			oItems:SetProperty("CellValue",h0,1,"Item B.2")
		oGrid:EndUpdate()

	oForm:Show()
	DO WHILE nEvent != xbeP_Quit
		nEvent := AppEvent( @mp1, @mp2, @oXbp )
		oXbp:handleEvent( nEvent, mp1, mp2 )
	ENDDO 
RETURN
1099:
I am using AddNew to add new records, but I can not see them into the control

PROCEDURE OnButtonClick(oGrid,Item,ColIndex,Key)
	LOCAL oRecordset
	oRecordset := oGrid:DataSource()
		oRecordset:AddNew()
		oRecordset:Fields:Item("A"):Value := "new A"
		oRecordset:Fields:Item("B"):Value := "new B"
		oRecordset:Update()
RETURN

#include "AppEvent.ch"
#include "ActiveX.ch"

PROCEDURE Main
 	LOCAL oForm
	LOCAL nEvent := 0, mp1 := NIL, mp2 := NIL, oXbp := NIL
	LOCAL oGrid
	LOCAL oItems
	LOCAL h
	LOCAL rs

	oForm := XbpDialog():new( AppDesktop() )
	oForm:drawingArea:clipChildren := .T.
	oForm:create( ,,{100,100}, {640,480},, .F. )
	oForm:close  := {|| PostAppEvent( xbeP_Quit )}

	oGrid := XbpActiveXControl():new( oForm:drawingArea )
	oGrid:CLSID  := "Exontrol.Grid.1" /*{101EE60F-7B07-48B0-A13A-F32BAE7DA165}*/
	oGrid:create(,, {10,60},{610,370} )

		oGrid:ButtonClick := {|Item,ColIndex,Key| OnButtonClick(oGrid,Item,ColIndex,Key)} /*Occurs when user clicks on the cell's button.*/

		oGrid:BeginUpdate()
		oGrid:HeaderAppearance := 4/*Etched*/
		rs := CreateObject("ADODB.Recordset")
			rs:Fields():Append("A",8/*adBSTR*/)
			rs:Fields():Append("B",8/*adBSTR*/)
			rs:Open()
			rs:AddNew()
			rs:Fields:Item("A"):Value := "Item A.1"
			rs:Fields:Item("B"):Value := "Item B.1"
			rs:Update()
			rs:AddNew()
			rs:Fields:Item("A"):Value := "Item A.2"
			rs:Fields:Item("B"):Value := "Item B.2"
			rs:Update()
		oGrid:DataSource := rs
		oItems := oGrid:Items()
			oItems:SetProperty("LockedItemCount",0/*exTop*/,1)
			h := oItems:LockedItem(0/*exTop*/,0)
			oItems:SetProperty("ItemDivider",h,0)
			oItems:SetProperty("CellHasButton",h,0,.T.)
			oItems:SetProperty("CellValue",h,0,"AddNew")
			oItems:SetProperty("CellHAlignment",h,0,1/*CenterAlignment*/)
		oGrid:DetectAddNew := .T.
		oGrid:DetectDelete := .T.
		oGrid:EndUpdate()

	oForm:Show()
	DO WHILE nEvent != xbeP_Quit
		nEvent := AppEvent( @mp1, @mp2, @oXbp )
		oXbp:handleEvent( nEvent, mp1, mp2 )
	ENDDO 
RETURN
1098:
How can I create a new ADO recordset

#include "AppEvent.ch"
#include "ActiveX.ch"

PROCEDURE Main
 	LOCAL oForm
	LOCAL nEvent := 0, mp1 := NIL, mp2 := NIL, oXbp := NIL
	LOCAL oGrid
	LOCAL rs

	oForm := XbpDialog():new( AppDesktop() )
	oForm:drawingArea:clipChildren := .T.
	oForm:create( ,,{100,100}, {640,480},, .F. )
	oForm:close  := {|| PostAppEvent( xbeP_Quit )}

	oGrid := XbpActiveXControl():new( oForm:drawingArea )
	oGrid:CLSID  := "Exontrol.Grid.1" /*{101EE60F-7B07-48B0-A13A-F32BAE7DA165}*/
	oGrid:create(,, {10,60},{610,370} )

		oGrid:BeginUpdate()
		rs := CreateObject("ADODB.Recordset")
			rs:Fields():Append("A",8/*adBSTR*/)
			rs:Fields():Append("B",8/*adBSTR*/)
			rs:Open()
			rs:AddNew()
			rs:Fields:Item("A"):Value := "Item A.1"
			rs:Fields:Item("B"):Value := "Item B.1"
			rs:Update()
			rs:AddNew()
			rs:Fields:Item("A"):Value := "Item A.2"
			rs:Fields:Item("B"):Value := "Item B.2"
			rs:Update()
		oGrid:DataSource := rs
		oGrid:EndUpdate()

	oForm:Show()
	DO WHILE nEvent != xbeP_Quit
		nEvent := AppEvent( @mp1, @mp2, @oXbp )
		oXbp:handleEvent( nEvent, mp1, mp2 )
	ENDDO 
RETURN
1097:
Do do I get the DAO version I have installed

#include "AppEvent.ch"
#include "ActiveX.ch"

PROCEDURE Main
 	LOCAL oForm
	LOCAL nEvent := 0, mp1 := NIL, mp2 := NIL, oXbp := NIL
	LOCAL oGrid

	oForm := XbpDialog():new( AppDesktop() )
	oForm:drawingArea:clipChildren := .T.
	oForm:create( ,,{100,100}, {640,480},, .F. )
	oForm:close  := {|| PostAppEvent( xbeP_Quit )}

	oGrid := XbpActiveXControl():new( oForm:drawingArea )
	oGrid:CLSID  := "Exontrol.Grid.1" /*{101EE60F-7B07-48B0-A13A-F32BAE7DA165}*/
	oGrid:create(,, {10,60},{610,370} )

		DevOut( CreateObject("DAO.DBEngine.35"):Version():Version() )
		DevOut( CreateObject("DAO.DBEngine.36"):Version():Version() )
		DevOut( CreateObject("DAO.DBEngine.120"):Version():Version() )

	oForm:Show()
	DO WHILE nEvent != xbeP_Quit
		nEvent := AppEvent( @mp1, @mp2, @oXbp )
		oXbp:handleEvent( nEvent, mp1, mp2 )
	ENDDO 
RETURN
1096:
How do I get a list of interfaces the object implemenets

#include "AppEvent.ch"
#include "ActiveX.ch"

PROCEDURE Main
 	LOCAL oForm
	LOCAL nEvent := 0, mp1 := NIL, mp2 := NIL, oXbp := NIL
	LOCAL oGrid
	LOCAL rs
	LOCAL oPrivDBEngine

	oForm := XbpDialog():new( AppDesktop() )
	oForm:drawingArea:clipChildren := .T.
	oForm:create( ,,{100,100}, {640,480},, .F. )
	oForm:close  := {|| PostAppEvent( xbeP_Quit )}

	oGrid := XbpActiveXControl():new( oForm:drawingArea )
	oGrid:CLSID  := "Exontrol.Grid.1" /*{101EE60F-7B07-48B0-A13A-F32BAE7DA165}*/
	oGrid:create(,, {10,60},{610,370} )

		oGrid:BeginUpdate()
		oGrid:ColumnAutoResize := .F.
		oPrivDBEngine := CreateObject("DAO.DBEngine.120")
			rs := oPrivDBEngine:OpenDatabase("C:\Program Files\Exontrol\ExGrid\Sample\Access2007\sample.accdb"):OpenRecordset("Orders")
		DevOut( CreateObject("Exontrol.PropertiesList"):Interfaces(rs):Interfaces(rs) )
		oGrid:DataSource := rs
		oGrid:EndUpdate()

	oForm:Show()
	DO WHILE nEvent != xbeP_Quit
		nEvent := AppEvent( @mp1, @mp2, @oXbp )
		oXbp:handleEvent( nEvent, mp1, mp2 )
	ENDDO 
RETURN
1095:
Do do I get the ADO version I have installed

#include "AppEvent.ch"
#include "ActiveX.ch"

PROCEDURE Main
 	LOCAL oForm
	LOCAL nEvent := 0, mp1 := NIL, mp2 := NIL, oXbp := NIL
	LOCAL oGrid

	oForm := XbpDialog():new( AppDesktop() )
	oForm:drawingArea:clipChildren := .T.
	oForm:create( ,,{100,100}, {640,480},, .F. )
	oForm:close  := {|| PostAppEvent( xbeP_Quit )}

	oGrid := XbpActiveXControl():new( oForm:drawingArea )
	oGrid:CLSID  := "Exontrol.Grid.1" /*{101EE60F-7B07-48B0-A13A-F32BAE7DA165}*/
	oGrid:create(,, {10,60},{610,370} )

		DevOut( "ADO Version:" )
		DevOut( CreateObject("ADODB.Connection"):Version():Version() )

	oForm:Show()
	DO WHILE nEvent != xbeP_Quit
		nEvent := AppEvent( @mp1, @mp2, @oXbp )
		oXbp:handleEvent( nEvent, mp1, mp2 )
	ENDDO 
RETURN
1094:
DAO, ACCDB, 120

#include "AppEvent.ch"
#include "ActiveX.ch"

PROCEDURE Main
 	LOCAL oForm
	LOCAL nEvent := 0, mp1 := NIL, mp2 := NIL, oXbp := NIL
	LOCAL oGrid
	LOCAL rs
	LOCAL oPrivDBEngine

	oForm := XbpDialog():new( AppDesktop() )
	oForm:drawingArea:clipChildren := .T.
	oForm:create( ,,{100,100}, {640,480},, .F. )
	oForm:close  := {|| PostAppEvent( xbeP_Quit )}

	oGrid := XbpActiveXControl():new( oForm:drawingArea )
	oGrid:CLSID  := "Exontrol.Grid.1" /*{101EE60F-7B07-48B0-A13A-F32BAE7DA165}*/
	oGrid:create(,, {10,60},{610,370} )

		oGrid:BeginUpdate()
		oGrid:ColumnAutoResize := .F.
		oPrivDBEngine := CreateObject("DAO.DBEngine.120")
			rs := oPrivDBEngine:OpenDatabase("C:\Program Files\Exontrol\ExGrid\Sample\Access2007\sample.accdb"):OpenRecordset("Orders")
		oGrid:DataSource := rs
		oGrid:EndUpdate()

	oForm:Show()
	DO WHILE nEvent != xbeP_Quit
		nEvent := AppEvent( @mp1, @mp2, @oXbp )
		oXbp:handleEvent( nEvent, mp1, mp2 )
	ENDDO 
RETURN
1093:
DAO, MDB, 120

#include "AppEvent.ch"
#include "ActiveX.ch"

PROCEDURE Main
 	LOCAL oForm
	LOCAL nEvent := 0, mp1 := NIL, mp2 := NIL, oXbp := NIL
	LOCAL oGrid
	LOCAL rs
	LOCAL oPrivDBEngine

	oForm := XbpDialog():new( AppDesktop() )
	oForm:drawingArea:clipChildren := .T.
	oForm:create( ,,{100,100}, {640,480},, .F. )
	oForm:close  := {|| PostAppEvent( xbeP_Quit )}

	oGrid := XbpActiveXControl():new( oForm:drawingArea )
	oGrid:CLSID  := "Exontrol.Grid.1" /*{101EE60F-7B07-48B0-A13A-F32BAE7DA165}*/
	oGrid:create(,, {10,60},{610,370} )

		oGrid:BeginUpdate()
		oGrid:ColumnAutoResize := .F.
		oPrivDBEngine := CreateObject("DAO.DBEngine.120")
			rs := oPrivDBEngine:OpenDatabase("C:\Program Files\Exontrol\ExGrid\Sample\SAMPLE.MDB"):OpenRecordset("Orders")
		oGrid:DataSource := rs
		oGrid:EndUpdate()

	oForm:Show()
	DO WHILE nEvent != xbeP_Quit
		nEvent := AppEvent( @mp1, @mp2, @oXbp )
		oXbp:handleEvent( nEvent, mp1, mp2 )
	ENDDO 
RETURN
1092:
DAO, MDB

#include "AppEvent.ch"
#include "ActiveX.ch"

PROCEDURE Main
 	LOCAL oForm
	LOCAL nEvent := 0, mp1 := NIL, mp2 := NIL, oXbp := NIL
	LOCAL oGrid
	LOCAL rs
	LOCAL oPrivDBEngine

	oForm := XbpDialog():new( AppDesktop() )
	oForm:drawingArea:clipChildren := .T.
	oForm:create( ,,{100,100}, {640,480},, .F. )
	oForm:close  := {|| PostAppEvent( xbeP_Quit )}

	oGrid := XbpActiveXControl():new( oForm:drawingArea )
	oGrid:CLSID  := "Exontrol.Grid.1" /*{101EE60F-7B07-48B0-A13A-F32BAE7DA165}*/
	oGrid:create(,, {10,60},{610,370} )

		oGrid:BeginUpdate()
		oGrid:ColumnAutoResize := .F.
		oPrivDBEngine := CreateObject("DAO.DBEngine.36")
			rs := oPrivDBEngine:OpenDatabase("C:\Program Files\Exontrol\ExGrid\Sample\SAMPLE.MDB"):OpenRecordset("Orders")
		oGrid:DataSource := rs
		oGrid:EndUpdate()

	oForm:Show()
	DO WHILE nEvent != xbeP_Quit
		nEvent := AppEvent( @mp1, @mp2, @oXbp )
		oXbp:handleEvent( nEvent, mp1, mp2 )
	ENDDO 
RETURN
1091:
ADODB, ACCDB, x64

#include "AppEvent.ch"
#include "ActiveX.ch"

PROCEDURE Main
 	LOCAL oForm
	LOCAL nEvent := 0, mp1 := NIL, mp2 := NIL, oXbp := NIL
	LOCAL oGrid
	LOCAL rs

	oForm := XbpDialog():new( AppDesktop() )
	oForm:drawingArea:clipChildren := .T.
	oForm:create( ,,{100,100}, {640,480},, .F. )
	oForm:close  := {|| PostAppEvent( xbeP_Quit )}

	oGrid := XbpActiveXControl():new( oForm:drawingArea )
	oGrid:CLSID  := "Exontrol.Grid.1" /*{101EE60F-7B07-48B0-A13A-F32BAE7DA165}*/
	oGrid:create(,, {10,60},{610,370} )

		oGrid:BeginUpdate()
		oGrid:ColumnAutoResize := .F.
		rs := CreateObject("ADODB.Recordset")
			rs:Open("Orders","Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\Program Files\Exontrol\ExGrid\Sample\Access2007\sample.accdb",1/*adOpenKeyset*/,1/*adLockReadOnly*/)
		oGrid:DataSource := rs
		oGrid:EndUpdate()

	oForm:Show()
	DO WHILE nEvent != xbeP_Quit
		nEvent := AppEvent( @mp1, @mp2, @oXbp )
		oXbp:handleEvent( nEvent, mp1, mp2 )
	ENDDO 
RETURN
1090:
ADOR, ACCDB

#include "AppEvent.ch"
#include "ActiveX.ch"

PROCEDURE Main
 	LOCAL oForm
	LOCAL nEvent := 0, mp1 := NIL, mp2 := NIL, oXbp := NIL
	LOCAL oGrid
	LOCAL rs

	oForm := XbpDialog():new( AppDesktop() )
	oForm:drawingArea:clipChildren := .T.
	oForm:create( ,,{100,100}, {640,480},, .F. )
	oForm:close  := {|| PostAppEvent( xbeP_Quit )}

	oGrid := XbpActiveXControl():new( oForm:drawingArea )
	oGrid:CLSID  := "Exontrol.Grid.1" /*{101EE60F-7B07-48B0-A13A-F32BAE7DA165}*/
	oGrid:create(,, {10,60},{610,370} )

		oGrid:BeginUpdate()
		oGrid:ColumnAutoResize := .F.
		rs := CreateObject("ADOR.Recordset")
			rs:Open("Orders","Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\Program Files\Exontrol\ExGrid\Sample\Access2007\sample.accdb",3/*adOpenStatic*/,3/*adLockOptimistic*/)
		oGrid:DataSource := rs
		oGrid:EndUpdate()

	oForm:Show()
	DO WHILE nEvent != xbeP_Quit
		nEvent := AppEvent( @mp1, @mp2, @oXbp )
		oXbp:handleEvent( nEvent, mp1, mp2 )
	ENDDO 
RETURN
1089:
ADODB, MDB

#include "AppEvent.ch"
#include "ActiveX.ch"

PROCEDURE Main
 	LOCAL oForm
	LOCAL nEvent := 0, mp1 := NIL, mp2 := NIL, oXbp := NIL
	LOCAL oGrid
	LOCAL rs

	oForm := XbpDialog():new( AppDesktop() )
	oForm:drawingArea:clipChildren := .T.
	oForm:create( ,,{100,100}, {640,480},, .F. )
	oForm:close  := {|| PostAppEvent( xbeP_Quit )}

	oGrid := XbpActiveXControl():new( oForm:drawingArea )
	oGrid:CLSID  := "Exontrol.Grid.1" /*{101EE60F-7B07-48B0-A13A-F32BAE7DA165}*/
	oGrid:create(,, {10,60},{610,370} )

		oGrid:BeginUpdate()
		oGrid:ColumnAutoResize := .F.
		rs := CreateObject("ADODB.Recordset")
			rs:Open("Orders","Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\Program Files\Exontrol\ExGrid\Sample\SAMPLE.MDB",3/*adOpenStatic*/,3/*adLockOptimistic*/)
		oGrid:DataSource := rs
		oGrid:EndUpdate()

	oForm:Show()
	DO WHILE nEvent != xbeP_Quit
		nEvent := AppEvent( @mp1, @mp2, @oXbp )
		oXbp:handleEvent( nEvent, mp1, mp2 )
	ENDDO 
RETURN
1088:
ADOR, MDB

#include "AppEvent.ch"
#include "ActiveX.ch"

PROCEDURE Main
 	LOCAL oForm
	LOCAL nEvent := 0, mp1 := NIL, mp2 := NIL, oXbp := NIL
	LOCAL oGrid
	LOCAL rs

	oForm := XbpDialog():new( AppDesktop() )
	oForm:drawingArea:clipChildren := .T.
	oForm:create( ,,{100,100}, {640,480},, .F. )
	oForm:close  := {|| PostAppEvent( xbeP_Quit )}

	oGrid := XbpActiveXControl():new( oForm:drawingArea )
	oGrid:CLSID  := "Exontrol.Grid.1" /*{101EE60F-7B07-48B0-A13A-F32BAE7DA165}*/
	oGrid:create(,, {10,60},{610,370} )

		oGrid:BeginUpdate()
		oGrid:ColumnAutoResize := .F.
		rs := CreateObject("ADOR.Recordset")
			rs:Open("Orders","Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\Program Files\Exontrol\ExGrid\Sample\SAMPLE.MDB",3/*adOpenStatic*/,3/*adLockOptimistic*/)
		oGrid:DataSource := rs
		oGrid:EndUpdate()

	oForm:Show()
	DO WHILE nEvent != xbeP_Quit
		nEvent := AppEvent( @mp1, @mp2, @oXbp )
		oXbp:handleEvent( nEvent, mp1, mp2 )
	ENDDO 
RETURN
1087:
How can I display the row on multiple lines (excrd)

#include "AppEvent.ch"
#include "ActiveX.ch"

PROCEDURE Main
 	LOCAL oForm
	LOCAL nEvent := 0, mp1 := NIL, mp2 := NIL, oXbp := NIL
	LOCAL oGrid
	LOCAL oColumn,oColumn1,oColumn2,oColumn3
	LOCAL oItems

	oForm := XbpDialog():new( AppDesktop() )
	oForm:drawingArea:clipChildren := .T.
	oForm:create( ,,{100,100}, {640,480},, .F. )
	oForm:close  := {|| PostAppEvent( xbeP_Quit )}

	oGrid := XbpActiveXControl():new( oForm:drawingArea )
	oGrid:CLSID  := "Exontrol.Grid.1" /*{101EE60F-7B07-48B0-A13A-F32BAE7DA165}*/
	oGrid:create(,, {10,60},{610,370} )

		oGrid:BeginUpdate()
		oGrid:HeaderAppearance := 4/*Etched*/
		oGrid:SelBackMode := 1/*exTransparent*/
		oColumn := oGrid:Columns():Add("Default")
			oColumn:SetProperty("Def",32/*exCellFormatLevel*/,"[b=0]60;1[b=15]:60,((20;" + CHR(34) + "<fgcolor=808080>Dateigröße" + CHR(34) + "[b=1][a=2]:120,2[b=15])/(20;" + CHR(34) + "<fgcolor=808080>Erstellt am" + CHR(34) + "[a=2]:120,3[b=15])/(20;" + CHR(34) + "<fgcolor=808080>Zuletzt bearbeitet" + CHR(34) + "[b=4][a=2]:120,4[b=15]))")
			oColumn:AllowSort := .F.
		oGrid:Columns():Add(Transform(1,"")):Visible := .F.
		oColumn1 := oGrid:Columns():Add(Transform(2,""))
			oColumn1:Visible := .F.
			oColumn1:Editor():EditType := 1/*EditType*/
			oColumn1:FormatColumn := "1 index `A-Z`"
		oColumn2 := oGrid:Columns():Add(Transform(3,""))
			oColumn2:Visible := .F.
			oColumn2:Editor():EditType := 1/*EditType*/
			oColumn2:FormatColumn := "1 index ``"
		oColumn3 := oGrid:Columns():Add(Transform(4,""))
			oColumn3:Visible := .F.
			oColumn3:Editor():EditType := 1/*EditType*/
			oColumn3:FormatColumn := "date(``)"
		oGrid:DefaultItemHeight := 48
		oGrid:DrawGridLines := -2/*exRowLines*/
		oGrid:GridLineStyle := 48/*exGridLinesSolid*/
		oGrid:SetProperty("ViewModeOption",0/*exTableView*/,0/*exBorderWidth*/,1)
		oGrid:SetProperty("ViewModeOption",0/*exTableView*/,1/*exBorderHeight*/,1)
		oItems := oGrid:Items()
			oItems:SetProperty("CellValue",oItems:AddItem(""),1,"One")
			oItems:SetProperty("CellValue",oItems:AddItem(""),1,"Two")
			oItems:SetProperty("CellValue",oItems:AddItem(""),1,"Three")
		oGrid:EndUpdate()

	oForm:Show()
	DO WHILE nEvent != xbeP_Quit
		nEvent := AppEvent( @mp1, @mp2, @oXbp )
		oXbp:handleEvent( nEvent, mp1, mp2 )
	ENDDO 
RETURN
1086:
Type of wraps the cell's caption support (Sample 2)

#include "AppEvent.ch"
#include "ActiveX.ch"

PROCEDURE Main
 	LOCAL oForm
	LOCAL nEvent := 0, mp1 := NIL, mp2 := NIL, oXbp := NIL
	LOCAL oGrid
	LOCAL oColumn,oColumn1,oColumn2
	LOCAL oColumns
	LOCAL oItems

	oForm := XbpDialog():new( AppDesktop() )
	oForm:drawingArea:clipChildren := .T.
	oForm:create( ,,{100,100}, {640,480},, .F. )
	oForm:close  := {|| PostAppEvent( xbeP_Quit )}

	oGrid := XbpActiveXControl():new( oForm:drawingArea )
	oGrid:CLSID  := "Exontrol.Grid.1" /*{101EE60F-7B07-48B0-A13A-F32BAE7DA165}*/
	oGrid:create(,, {10,60},{610,370} )

		oGrid:BeginUpdate()
		oGrid:HeaderSingleLine := .F.
		oGrid:HeaderHeight := 36
		oGrid:DrawGridLines := -2/*exRowLines*/
		oGrid:ColumnAutoResize := .F.
		oGrid:ScrollBySingleLine := .T.
		oColumns := oGrid:Columns()
			oColumn := oColumns:Add("Single-Line (exCaptionSingleLine)")
				oColumn:Width := 96
				oColumn:SetProperty("Def",17/*exCellValueFormat*/,1)
				oColumn:SetProperty("Def",16/*exCellSingleLine*/,-1)
			oColumn1 := oColumns:Add("Word-Wrap (exCaptionWordWrap)")
				oColumn1:Width := 96
				oColumn1:SetProperty("Def",17/*exCellValueFormat*/,1)
				oColumn1:SetProperty("Def",16/*exCellSingleLine*/,0)
				oColumn1:FormatColumn := "%0"
			oColumn2 := oColumns:Add("Break-Wrap (exCaptionBreakWrap)")
				oColumn2:Width := 96
				oColumn2:SetProperty("Def",17/*exCellValueFormat*/,1)
				oColumn2:SetProperty("Def",16/*exCellSingleLine*/,1)
				oColumn2:FormatColumn := "%0"
		oItems := oGrid:Items()
			oItems:AddItem("This is the <b>first</b> line.<br>This is the <b>second</b> line.<br>This is the <b>third</b> line.")
			oItems:AddItem("This is the <b>first</b> line.\r\nThis is the <b>second</b> line.\r\nThis is the <b>third</b> line.")
		oGrid:EndUpdate()

	oForm:Show()
	DO WHILE nEvent != xbeP_Quit
		nEvent := AppEvent( @mp1, @mp2, @oXbp )
		oXbp:handleEvent( nEvent, mp1, mp2 )
	ENDDO 
RETURN
1085:
Type of wraps the cell's caption support (Sample 1)

#include "AppEvent.ch"
#include "ActiveX.ch"

PROCEDURE Main
 	LOCAL oForm
	LOCAL nEvent := 0, mp1 := NIL, mp2 := NIL, oXbp := NIL
	LOCAL oGrid
	LOCAL oItems
	LOCAL h

	oForm := XbpDialog():new( AppDesktop() )
	oForm:drawingArea:clipChildren := .T.
	oForm:create( ,,{100,100}, {640,480},, .F. )
	oForm:close  := {|| PostAppEvent( xbeP_Quit )}

	oGrid := XbpActiveXControl():new( oForm:drawingArea )
	oGrid:CLSID  := "Exontrol.Grid.1" /*{101EE60F-7B07-48B0-A13A-F32BAE7DA165}*/
	oGrid:create(,, {10,60},{610,370} )

		oGrid:BeginUpdate()
		oGrid:HeaderSingleLine := .F.
		oGrid:HeaderHeight := 36
		oGrid:DrawGridLines := -2/*exRowLines*/
		oGrid:ColumnAutoResize := .F.
		oGrid:ScrollBySingleLine := .T.
		oGrid:Columns():Add("Default"):Width := 128
		oItems := oGrid:Items()
			h := oItems:AddItem("This is the first line.\r\nThis is the second line.\r\nThis is the third line.")
			h := oItems:AddItem("This is the <b>first</b> line.<br>This is the <b>second</b> line.<br>This is the <b>third</b> line.")
			oItems:SetProperty("CellValueFormat",h,0,1/*exHTML*/)
			h := oItems:AddItem("This is the first line.\r\nThis is the second line.\r\nThis is the third line.")
			oItems:SetProperty("CellSingleLine",h,0,0/*exCaptionWordWrap*/)
			h := oItems:AddItem("This is the <b>first</b> line.<br>This is the <b>second</b> line.<br>This is the <b>third</b> line.")
			oItems:SetProperty("CellValueFormat",h,0,1/*exHTML*/)
			oItems:SetProperty("CellSingleLine",h,0,0/*exCaptionWordWrap*/)
			h := oItems:AddItem("This is the first line.\r\nThis is the second line.\r\nThis is the third line.")
			oItems:SetProperty("CellSingleLine",h,0,1/*exCaptionBreakWrap*/)
			h := oItems:AddItem("This is the <b>first</b> line.<br>This is the <b>second</b> line.<br>This is the <b>third</b> line.")
			oItems:SetProperty("CellValueFormat",h,0,1/*exHTML*/)
			oItems:SetProperty("CellSingleLine",h,0,1/*exCaptionBreakWrap*/)
		oGrid:EndUpdate()

	oForm:Show()
	DO WHILE nEvent != xbeP_Quit
		nEvent := AppEvent( @mp1, @mp2, @oXbp )
		oXbp:handleEvent( nEvent, mp1, mp2 )
	ENDDO 
RETURN
1084:
Can I break the cell's caption using the line break <br> or \r\n (Sample 2)

#include "AppEvent.ch"
#include "ActiveX.ch"

PROCEDURE Main
 	LOCAL oForm
	LOCAL nEvent := 0, mp1 := NIL, mp2 := NIL, oXbp := NIL
	LOCAL oGrid
	LOCAL oItems

	oForm := XbpDialog():new( AppDesktop() )
	oForm:drawingArea:clipChildren := .T.
	oForm:create( ,,{100,100}, {640,480},, .F. )
	oForm:close  := {|| PostAppEvent( xbeP_Quit )}

	oGrid := XbpActiveXControl():new( oForm:drawingArea )
	oGrid:CLSID  := "Exontrol.Grid.1" /*{101EE60F-7B07-48B0-A13A-F32BAE7DA165}*/
	oGrid:create(,, {10,60},{610,370} )

		oGrid:BeginUpdate()
		oGrid:DrawGridLines := -2/*exRowLines*/
		oGrid:ColumnAutoResize := .F.
		oGrid:ScrollBySingleLine := .T.
		oGrid:Columns():Add("Default"):Width := 128
		oItems := oGrid:Items()
			oItems:SetProperty("CellSingleLine",oItems:AddItem("This is the first line.\r\nThis is the second line.\r\nThis is the third line."),0,1/*exCaptionBreakWrap*/)
			oItems:AddItem("This is the first line.\r\nThis is the second line.\r\nThis is the third line.")
		oGrid:EndUpdate()

	oForm:Show()
	DO WHILE nEvent != xbeP_Quit
		nEvent := AppEvent( @mp1, @mp2, @oXbp )
		oXbp:handleEvent( nEvent, mp1, mp2 )
	ENDDO 
RETURN
1083:
Can I break the cell's caption using the line break <br> or \r\n (Sample 1)

#include "AppEvent.ch"
#include "ActiveX.ch"

PROCEDURE Main
 	LOCAL oForm
	LOCAL nEvent := 0, mp1 := NIL, mp2 := NIL, oXbp := NIL
	LOCAL oGrid
	LOCAL oColumn
	LOCAL oItems

	oForm := XbpDialog():new( AppDesktop() )
	oForm:drawingArea:clipChildren := .T.
	oForm:create( ,,{100,100}, {640,480},, .F. )
	oForm:close  := {|| PostAppEvent( xbeP_Quit )}

	oGrid := XbpActiveXControl():new( oForm:drawingArea )
	oGrid:CLSID  := "Exontrol.Grid.1" /*{101EE60F-7B07-48B0-A13A-F32BAE7DA165}*/
	oGrid:create(,, {10,60},{610,370} )

		oGrid:BeginUpdate()
		oGrid:DrawGridLines := -2/*exRowLines*/
		oGrid:ColumnAutoResize := .F.
		oGrid:ScrollBySingleLine := .T.
		oColumn := oGrid:Columns():Add("Default")
			oColumn:Width := 128
			oColumn:SetProperty("Def",16/*exCellSingleLine*/,1)
		oItems := oGrid:Items()
			oItems:AddItem("This is the first line.\r\nThis is the second line.\r\nThis is the third line.")
			oItems:AddItem("This is the first line.\r\nThis is the second line.\r\nThis is the third line.")
		oGrid:EndUpdate()

	oForm:Show()
	DO WHILE nEvent != xbeP_Quit
		nEvent := AppEvent( @mp1, @mp2, @oXbp )
		oXbp:handleEvent( nEvent, mp1, mp2 )
	ENDDO 
RETURN
1082:
How can I change the visual appearance/color of the Filter For ... field

#include "AppEvent.ch"
#include "ActiveX.ch"

PROCEDURE Main
 	LOCAL oForm
	LOCAL nEvent := 0, mp1 := NIL, mp2 := NIL, oXbp := NIL
	LOCAL oGrid
	LOCAL oColumn
	LOCAL oItems
	LOCAL h

	oForm := XbpDialog():new( AppDesktop() )
	oForm:drawingArea:clipChildren := .T.
	oForm:create( ,,{100,100}, {640,480},, .F. )
	oForm:close  := {|| PostAppEvent( xbeP_Quit )}

	oGrid := XbpActiveXControl():new( oForm:drawingArea )
	oGrid:CLSID  := "Exontrol.Grid.1" /*{101EE60F-7B07-48B0-A13A-F32BAE7DA165}*/
	oGrid:create(,, {10,60},{610,370} )

		oGrid:BeginUpdate()
		oGrid:LinesAtRoot := -1/*exLinesAtRoot*/
		oGrid:SetProperty("BackColorHeader",AutomationTranslateColor( GraMakeRGBColor  ( { 1,0,0 } )  , .F. ))
		oGrid:SetProperty("ForeColorHeader",AutomationTranslateColor( GraMakeRGBColor  ( { 255,255,255 } )  , .F. ))
		oGrid:SetProperty("Background",26/*exBackColorFilter*/,oGrid:BackColorHeader())
		oGrid:SetProperty("Background",27/*exForeColorFilter*/,oGrid:ForeColorHeader())
		oGrid:SetProperty("Background",0/*exHeaderFilterBarButton*/,AutomationTranslateColor( GraMakeRGBColor  ( { 240,240,240 } )  , .F. ))
		oGrid:SetProperty("Background",32/*exCursorHoverColumn*/,-1)
		oGrid:HeaderAppearance := 5/*Bump*/
		oColumn := oGrid:Columns():Add("Items")
			oColumn:FilterOnType := .T.
			oColumn:DisplayFilterButton := .T.
			oColumn:FilterList := 2/*exNoItems*/
		oItems := oGrid:Items()
			h := oItems:AddItem("Root 1")
			oItems:InsertItem(h,,"Child 1")
			oItems:InsertItem(h,,"Child 2")
			oItems:SetProperty("ExpandItem",h,.T.)
			h := oItems:AddItem("Root 2")
			oItems:InsertItem(h,,"Child 1")
			oItems:InsertItem(h,,"Child 2")
		oGrid:EndUpdate()

	oForm:Show()
	DO WHILE nEvent != xbeP_Quit
		nEvent := AppEvent( @mp1, @mp2, @oXbp )
		oXbp:handleEvent( nEvent, mp1, mp2 )
	ENDDO 
RETURN
1081:
How can I display the cell's caption without spaces on both sides

#include "AppEvent.ch"
#include "ActiveX.ch"

PROCEDURE Main
 	LOCAL oForm
	LOCAL nEvent := 0, mp1 := NIL, mp2 := NIL, oXbp := NIL
	LOCAL oGrid
	LOCAL oColumn
	LOCAL oItems

	oForm := XbpDialog():new( AppDesktop() )
	oForm:drawingArea:clipChildren := .T.
	oForm:create( ,,{100,100}, {640,480},, .F. )
	oForm:close  := {|| PostAppEvent( xbeP_Quit )}

	oGrid := XbpActiveXControl():new( oForm:drawingArea )
	oGrid:CLSID  := "Exontrol.Grid.1" /*{101EE60F-7B07-48B0-A13A-F32BAE7DA165}*/
	oGrid:create(,, {10,60},{610,370} )

		oGrid:BeginUpdate()
		oGrid:ColumnAutoResize := .T.
		oColumn := oGrid:Columns():Add("Default")
			oColumn:SetProperty("Def",17/*exCellValueFormat*/,1)
			oColumn:FormatColumn := "((trim(value) replace `   ` with ` `) replace `  ` with ` `) replace ` ` with `<bgcolor=FF0000> </bgcolor>`"
		oItems := oGrid:Items()
			oItems:AddItem("")
			oItems:AddItem("Item A")
			oItems:AddItem("    Item B")
			oItems:AddItem("        Item   C    ")
		oGrid:EndUpdate()

	oForm:Show()
	DO WHILE nEvent != xbeP_Quit
		nEvent := AppEvent( @mp1, @mp2, @oXbp )
		oXbp:handleEvent( nEvent, mp1, mp2 )
	ENDDO 
RETURN
1080:
How can I highlight the spaces within the column (sample 2)

#include "AppEvent.ch"
#include "ActiveX.ch"

PROCEDURE Main
 	LOCAL oForm
	LOCAL nEvent := 0, mp1 := NIL, mp2 := NIL, oXbp := NIL
	LOCAL oGrid
	LOCAL oColumn
	LOCAL oItems

	oForm := XbpDialog():new( AppDesktop() )
	oForm:drawingArea:clipChildren := .T.
	oForm:create( ,,{100,100}, {640,480},, .F. )
	oForm:close  := {|| PostAppEvent( xbeP_Quit )}

	oGrid := XbpActiveXControl():new( oForm:drawingArea )
	oGrid:CLSID  := "Exontrol.Grid.1" /*{101EE60F-7B07-48B0-A13A-F32BAE7DA165}*/
	oGrid:create(,, {10,60},{610,370} )

		oGrid:BeginUpdate()
		oGrid:ColumnAutoResize := .T.
		oColumn := oGrid:Columns():Add("Default")
			oColumn:SetProperty("Def",17/*exCellValueFormat*/,1)
			oColumn:FormatColumn := "`'` + ( value replace ` ` with `_` ) + `'`"
		oItems := oGrid:Items()
			oItems:AddItem("")
			oItems:AddItem("Item A")
			oItems:AddItem("    Item B")
			oItems:AddItem("        Item   C    ")
		oGrid:EndUpdate()

	oForm:Show()
	DO WHILE nEvent != xbeP_Quit
		nEvent := AppEvent( @mp1, @mp2, @oXbp )
		oXbp:handleEvent( nEvent, mp1, mp2 )
	ENDDO 
RETURN
1079:
How can I highlight the spaces within the column (sample 1)

#include "AppEvent.ch"
#include "ActiveX.ch"

PROCEDURE Main
 	LOCAL oForm
	LOCAL nEvent := 0, mp1 := NIL, mp2 := NIL, oXbp := NIL
	LOCAL oGrid
	LOCAL oColumn
	LOCAL oItems

	oForm := XbpDialog():new( AppDesktop() )
	oForm:drawingArea:clipChildren := .T.
	oForm:create( ,,{100,100}, {640,480},, .F. )
	oForm:close  := {|| PostAppEvent( xbeP_Quit )}

	oGrid := XbpActiveXControl():new( oForm:drawingArea )
	oGrid:CLSID  := "Exontrol.Grid.1" /*{101EE60F-7B07-48B0-A13A-F32BAE7DA165}*/
	oGrid:create(,, {10,60},{610,370} )

		oGrid:BeginUpdate()
		oGrid:ColumnAutoResize := .T.
		oColumn := oGrid:Columns():Add("Default")
			oColumn:SetProperty("Def",17/*exCellValueFormat*/,1)
			oColumn:FormatColumn := "len(value) = 0 ? `<bgcolor=FF0000> </bgcolor>` : ( value replace ` ` with `<bgcolor=FF0000> </bgcolor>` )"
		oItems := oGrid:Items()
			oItems:AddItem("")
			oItems:AddItem("Item A")
			oItems:AddItem("    Item B")
			oItems:AddItem("        Item   C    ")
		oGrid:EndUpdate()

	oForm:Show()
	DO WHILE nEvent != xbeP_Quit
		nEvent := AppEvent( @mp1, @mp2, @oXbp )
		oXbp:handleEvent( nEvent, mp1, mp2 )
	ENDDO 
RETURN
1078:
How can I change the visual aspect of the drop down filter-calendar

#include "AppEvent.ch"
#include "ActiveX.ch"

PROCEDURE Main
 	LOCAL oForm
	LOCAL nEvent := 0, mp1 := NIL, mp2 := NIL, oXbp := NIL
	LOCAL oGrid
	LOCAL oColumn

	oForm := XbpDialog():new( AppDesktop() )
	oForm:drawingArea:clipChildren := .T.
	oForm:create( ,,{100,100}, {640,480},, .F. )
	oForm:close  := {|| PostAppEvent( xbeP_Quit )}

	oGrid := XbpActiveXControl():new( oForm:drawingArea )
	oGrid:CLSID  := "Exontrol.Grid.1" /*{101EE60F-7B07-48B0-A13A-F32BAE7DA165}*/
	oGrid:create(,, {10,60},{610,370} )

		oGrid:BeginUpdate()
		oGrid:SetProperty("Background",26/*exBackColorFilter*/,AutomationTranslateColor( GraMakeRGBColor  ( { 0,0,1 } )  , .F. ))
		oGrid:SetProperty("Background",27/*exForeColorFilter*/,AutomationTranslateColor( GraMakeRGBColor  ( { 255,255,255 } )  , .F. ))
		oGrid:SetProperty("Background",12/*exDateScrollRange*/,AutomationTranslateColor( GraMakeRGBColor  ( { 255,255,255 } )  , .F. ))
		oGrid:SetProperty("Background",8/*exDateHeader*/,oGrid:Background(26/*exBackColorFilter*/))
		oGrid:SetProperty("Background",11/*exDateScrollThumb*/,AutomationTranslateColor( GraMakeRGBColor  ( { 128,128,128 } )  , .F. ))
		oColumn := oGrid:Columns():Add("Date")
			oColumn:FilterType := 4/*exDate*/
			oColumn:DisplayFilterButton := .T.
			oColumn:DisplayFilterDate := .T.
			oColumn:DisplayFilterPattern := .F.
		oGrid:EndUpdate()

	oForm:Show()
	DO WHILE nEvent != xbeP_Quit
		nEvent := AppEvent( @mp1, @mp2, @oXbp )
		oXbp:handleEvent( nEvent, mp1, mp2 )
	ENDDO 
RETURN
1077:
How can I hide the filter bar description

#include "AppEvent.ch"
#include "ActiveX.ch"

PROCEDURE Main
 	LOCAL oForm
	LOCAL nEvent := 0, mp1 := NIL, mp2 := NIL, oXbp := NIL
	LOCAL oGrid
	LOCAL oColumn
	LOCAL oItems

	oForm := XbpDialog():new( AppDesktop() )
	oForm:drawingArea:clipChildren := .T.
	oForm:create( ,,{100,100}, {640,480},, .F. )
	oForm:close  := {|| PostAppEvent( xbeP_Quit )}

	oGrid := XbpActiveXControl():new( oForm:drawingArea )
	oGrid:CLSID  := "Exontrol.Grid.1" /*{101EE60F-7B07-48B0-A13A-F32BAE7DA165}*/
	oGrid:create(,, {10,60},{610,370} )

		oGrid:BeginUpdate()
		oColumn := oGrid:Columns():Add("Filter")
			oColumn:DisplayFilterButton := .T.
			oColumn:FilterType := 240/*exFilter*/
			oColumn:Filter := "B"
		oItems := oGrid:Items()
			oItems:AddItem("A")
			oItems:AddItem("B")
			oItems:AddItem("C")
		oGrid:ApplyFilter()
		oGrid:FilterBarHeight := 0
		oGrid:EndUpdate()

	oForm:Show()
	DO WHILE nEvent != xbeP_Quit
		nEvent := AppEvent( @mp1, @mp2, @oXbp )
		oXbp:handleEvent( nEvent, mp1, mp2 )
	ENDDO 
RETURN
1076:
Export Data in HTML format

#include "AppEvent.ch"
#include "ActiveX.ch"

PROCEDURE Main
 	LOCAL oForm
	LOCAL nEvent := 0, mp1 := NIL, mp2 := NIL, oXbp := NIL
	LOCAL oGrid
	LOCAL oColumn,oColumn1,oColumn2,oColumn3,oColumn4,oColumn5,oColumn6
	LOCAL oColumns
	LOCAL oConditionalFormat,oConditionalFormat1
	LOCAL oConditionalFormats
	LOCAL oItems
	LOCAL oShellBrowserWindow
	LOCAL h,sFile

	oForm := XbpDialog():new( AppDesktop() )
	oForm:drawingArea:clipChildren := .T.
	oForm:create( ,,{100,100}, {640,480},, .F. )
	oForm:close  := {|| PostAppEvent( xbeP_Quit )}

	oGrid := XbpActiveXControl():new( oForm:drawingArea )
	oGrid:CLSID  := "Exontrol.Grid.1" /*{101EE60F-7B07-48B0-A13A-F32BAE7DA165}*/
	oGrid:create(,, {10,60},{610,370} )

		oGrid:BeginUpdate()
		oGrid:LinesAtRoot := -1/*exLinesAtRoot*/
		oGrid:SetProperty("BackColorAlternate",AutomationTranslateColor( GraMakeRGBColor  ( { 240,240,240 } )  , .F. ))
		oGrid:DrawGridLines := -1/*exAllLines*/
		oGrid:HeaderAppearance := 4/*Etched*/
		oGrid:SetProperty("Description",11/*exFilterBarAnd*/,Transform(oGrid:FormatABC("`<fgcolor=808080> ` + value + ` </fgcolor>`",oGrid:Description(11/*exFilterBarAnd*/)),""))
		oGrid:FilterBarCaption := "(( ( value replace `[<b>` with `<bgcolor=000000><fgcolor=FFFFFF><b> ` replace `</b>]` with ` </b></bgcolor></fgcolor>` replace `[<s>` with `<bgcolor=C0C0C0><fgcolor=FFFFFF> ` replace `</s>]` with ` </fgcolor></bgcolor>` )  + `<r><fgcolor=808080>` + ( matchitemcount < 0 ? ( ( len(value) ? `` : `` ) + `<r>` + abs(matchitemcount + 1) + ` result(s)` ) : (`<r><fgcolor=808080>`+ itemcount + ` item(s)`) )))"
		oGrid:FilterBarPromptVisible := 2579/*exFilterBarCompact+exFilterBarShowCloseIfRequired+exFilterBarSingleLine+exFilterBarVisible+exFilterBarPromptVisible*/
		oGrid:FilterBarPromptType := 2/*exFilterPromptContainsAny*/
		oConditionalFormats := oGrid:ConditionalFormats()
			oConditionalFormats:Add("%0 like `*parent*`","parent"):SetProperty("BackColor",AutomationTranslateColor( GraMakeRGBColor  ( { 192,192,192 } )  , .F. ))
			oConditionalFormat := oConditionalFormats:Add("%0 like `*child*`","child")
				oConditionalFormat:SetProperty("ForeColor",AutomationTranslateColor( GraMakeRGBColor  ( { 255,128,128 } )  , .F. ))
				oConditionalFormat:ApplyTo := 0/*exFormatToColumns*/
			oConditionalFormat1 := oConditionalFormats:Add("%0 like `*B*`","b")
				oConditionalFormat1:SetProperty("ForeColor",AutomationTranslateColor( GraMakeRGBColor  ( { 0,0,255 } )  , .F. ))
				oConditionalFormat1:Bold := .T.
				oConditionalFormat1:Italic := .T.
				oConditionalFormat1:ApplyTo := 0/*exFormatToColumns*/
		oColumns := oGrid:Columns()
			oColumn := oColumns:Add("Value")
				oColumn:Width := 128
				oColumn:HTMLCaption := "<b>VA</b><r>sko"
			oColumn1 := oColumns:Add("APos")
				oColumn1:FormatColumn := "0 apos ``"
				oColumn1:AllowSort := .F.
				oColumn1:SetProperty("Def",4/*exCellBackColor*/,15790320)
				oColumn1:SetProperty("Def",5/*exCellForeColor*/,8421504)
				oColumn1:SetProperty("Def",8/*exHeaderForeColor*/,oColumn1:Def(5/*exCellForeColor*/))
				oColumn1:Position := 0
			oColumn2 := oColumns:Add("RPos")
				oColumn2:FormatColumn := "0 rpos ``"
				oColumn2:AllowSort := .F.
				oColumn2:Position := 1
			oColumn3 := oColumns:Add("Index")
				oColumn3:FormatColumn := "0 index ``"
				oColumn3:DisplayFilterButton := .T.
				oColumn3:FilterList := 256/*exShowCheckBox*/
				oColumn3:Position := 2
			oColumn4 := oColumns:Add("Data 1")
				oColumn4:FormatColumn := "0 index `A-Z`"
				oColumn4:SetProperty("Def",0/*exCellHasCheckBox*/,.T.)
			oColumn5 := oColumns:Add("Data 2")
				oColumn5:FormatColumn := "0 index `AB` replace `A` with `<off -4>A</off>`"
				oColumn5:SetProperty("Def",16/*exCellSingleLine*/,.F.)
				oColumn5:SetProperty("Def",17/*exCellValueFormat*/,1)
				oColumn5:SetProperty("Def",1/*exCellHasRadioButton*/,.T.)
			oColumn6 := oColumns:Add("Data 3")
				oColumn6:FormatColumn := "0 index `CDC` replace `D` with `<b>D</b>`"
				oColumn6:SetProperty("Def",17/*exCellValueFormat*/,1)
		oItems := oGrid:Items()
			h := oItems:AddItem("ParentA")
			oItems:InsertItem(h,,"Child A")
			oItems:InsertItem(h,,"Child B")
			oItems:SetProperty("CellState",h,4,1)
			oItems:SetProperty("CellBackColor",oItems:InsertItem(h,,"Child C"),5,AutomationTranslateColor( GraMakeRGBColor  ( { 0,255,0 } )  , .F. ))
			oItems:SetProperty("ExpandItem",h,.T.)
			oItems:AddItem("Item A")
			h := oItems:AddItem("ParentB")
			oItems:InsertItem(h,,"Child 1")
			oItems:InsertItem(h,,"Child 2")
			oItems:SetProperty("CellBackColor",oItems:InsertItem(h,,"Child 3"),5,AutomationTranslateColor( GraMakeRGBColor  ( { 0,255,0 } )  , .F. ))
			oItems:SetProperty("CellState",h,5,1)
			oItems:AddItem("Item B")
			oItems:AddItem("Item C")
			oItems:AddItem("Item D")
			oItems:SetProperty("ExpandItem",h,.T.)
		oGrid:EndUpdate()
		sFile := "c:/temp/export.html"
		oGrid:Export(sFile,"vis")
		oShellBrowserWindow := CreateObject("InternetExplorer.Application")
			oShellBrowserWindow:Navigate2(sFile)

	oForm:Show()
	DO WHILE nEvent != xbeP_Quit
		nEvent := AppEvent( @mp1, @mp2, @oXbp )
		oXbp:handleEvent( nEvent, mp1, mp2 )
	ENDDO 
RETURN
1075:
Export Data in CSV format

#include "AppEvent.ch"
#include "ActiveX.ch"

PROCEDURE Main
 	LOCAL oForm
	LOCAL nEvent := 0, mp1 := NIL, mp2 := NIL, oXbp := NIL
	LOCAL oGrid
	LOCAL oColumn,oColumn1,oColumn2,oColumn3,oColumn4,oColumn5,oColumn6
	LOCAL oColumns
	LOCAL oConditionalFormat,oConditionalFormat1
	LOCAL oConditionalFormats
	LOCAL oItems
	LOCAL h

	oForm := XbpDialog():new( AppDesktop() )
	oForm:drawingArea:clipChildren := .T.
	oForm:create( ,,{100,100}, {640,480},, .F. )
	oForm:close  := {|| PostAppEvent( xbeP_Quit )}

	oGrid := XbpActiveXControl():new( oForm:drawingArea )
	oGrid:CLSID  := "Exontrol.Grid.1" /*{101EE60F-7B07-48B0-A13A-F32BAE7DA165}*/
	oGrid:create(,, {10,60},{610,370} )

		oGrid:BeginUpdate()
		oGrid:LinesAtRoot := -1/*exLinesAtRoot*/
		oGrid:SetProperty("BackColorAlternate",AutomationTranslateColor( GraMakeRGBColor  ( { 240,240,240 } )  , .F. ))
		oGrid:DrawGridLines := -1/*exAllLines*/
		oGrid:HeaderAppearance := 4/*Etched*/
		oGrid:SetProperty("Description",11/*exFilterBarAnd*/,Transform(oGrid:FormatABC("`<fgcolor=808080> ` + value + ` </fgcolor>`",oGrid:Description(11/*exFilterBarAnd*/)),""))
		oGrid:FilterBarCaption := "(( ( value replace `[<b>` with `<bgcolor=000000><fgcolor=FFFFFF><b> ` replace `</b>]` with ` </b></bgcolor></fgcolor>` replace `[<s>` with `<bgcolor=C0C0C0><fgcolor=FFFFFF> ` replace `</s>]` with ` </fgcolor></bgcolor>` )  + `<r><fgcolor=808080>` + ( matchitemcount < 0 ? ( ( len(value) ? `` : `` ) + `<r>` + abs(matchitemcount + 1) + ` result(s)` ) : (`<r><fgcolor=808080>`+ itemcount + ` item(s)`) )))"
		oGrid:FilterBarPromptVisible := 2579/*exFilterBarCompact+exFilterBarShowCloseIfRequired+exFilterBarSingleLine+exFilterBarVisible+exFilterBarPromptVisible*/
		oGrid:FilterBarPromptType := 2/*exFilterPromptContainsAny*/
		oConditionalFormats := oGrid:ConditionalFormats()
			oConditionalFormats:Add("%0 like `*parent*`","parent"):SetProperty("BackColor",AutomationTranslateColor( GraMakeRGBColor  ( { 192,192,192 } )  , .F. ))
			oConditionalFormat := oConditionalFormats:Add("%0 like `*child*`","child")
				oConditionalFormat:SetProperty("ForeColor",AutomationTranslateColor( GraMakeRGBColor  ( { 255,128,128 } )  , .F. ))
				oConditionalFormat:ApplyTo := 0/*exFormatToColumns*/
			oConditionalFormat1 := oConditionalFormats:Add("%0 like `*B*`","b")
				oConditionalFormat1:SetProperty("ForeColor",AutomationTranslateColor( GraMakeRGBColor  ( { 0,0,255 } )  , .F. ))
				oConditionalFormat1:Bold := .T.
				oConditionalFormat1:Italic := .T.
				oConditionalFormat1:ApplyTo := 0/*exFormatToColumns*/
		oColumns := oGrid:Columns()
			oColumn := oColumns:Add("Value")
				oColumn:Width := 128
				oColumn:HTMLCaption := "<b>VA</b><r>sko"
			oColumn1 := oColumns:Add("APos")
				oColumn1:FormatColumn := "0 apos ``"
				oColumn1:AllowSort := .F.
				oColumn1:SetProperty("Def",4/*exCellBackColor*/,15790320)
				oColumn1:SetProperty("Def",5/*exCellForeColor*/,8421504)
				oColumn1:SetProperty("Def",8/*exHeaderForeColor*/,oColumn1:Def(5/*exCellForeColor*/))
				oColumn1:Position := 0
			oColumn2 := oColumns:Add("RPos")
				oColumn2:FormatColumn := "0 rpos ``"
				oColumn2:AllowSort := .F.
				oColumn2:Position := 1
			oColumn3 := oColumns:Add("Index")
				oColumn3:FormatColumn := "0 index ``"
				oColumn3:DisplayFilterButton := .T.
				oColumn3:FilterList := 256/*exShowCheckBox*/
				oColumn3:Position := 2
			oColumn4 := oColumns:Add("Data 1")
				oColumn4:FormatColumn := "0 index `A-Z`"
				oColumn4:SetProperty("Def",0/*exCellHasCheckBox*/,.T.)
			oColumn5 := oColumns:Add("Data 2")
				oColumn5:FormatColumn := "0 index `AB` replace `A` with `<off -4>A</off>`"
				oColumn5:SetProperty("Def",16/*exCellSingleLine*/,.F.)
				oColumn5:SetProperty("Def",17/*exCellValueFormat*/,1)
				oColumn5:SetProperty("Def",1/*exCellHasRadioButton*/,.T.)
			oColumn6 := oColumns:Add("Data 3")
				oColumn6:FormatColumn := "0 index `CDC` replace `D` with `<b>D</b>`"
				oColumn6:SetProperty("Def",17/*exCellValueFormat*/,1)
		oItems := oGrid:Items()
			h := oItems:AddItem("ParentA")
			oItems:InsertItem(h,,"Child A")
			oItems:InsertItem(h,,"Child B")
			oItems:SetProperty("CellState",h,4,1)
			oItems:SetProperty("CellBackColor",oItems:InsertItem(h,,"Child C"),5,AutomationTranslateColor( GraMakeRGBColor  ( { 0,255,0 } )  , .F. ))
			oItems:SetProperty("ExpandItem",h,.T.)
			oItems:AddItem("Item A")
			h := oItems:AddItem("ParentB")
			oItems:InsertItem(h,,"Child 1")
			oItems:InsertItem(h,,"Child 2")
			oItems:SetProperty("CellBackColor",oItems:InsertItem(h,,"Child 3"),5,AutomationTranslateColor( GraMakeRGBColor  ( { 0,255,0 } )  , .F. ))
			oItems:SetProperty("CellState",h,5,1)
			oItems:AddItem("Item B")
			oItems:AddItem("Item C")
			oItems:AddItem("Item D")
			oItems:SetProperty("ExpandItem",h,.T.)
		oGrid:EndUpdate()
		DevOut( Transform(oGrid:Export("","vis"),"") )

	oForm:Show()
	DO WHILE nEvent != xbeP_Quit
		nEvent := AppEvent( @mp1, @mp2, @oXbp )
		oXbp:handleEvent( nEvent, mp1, mp2 )
	ENDDO 
RETURN
1074:
Is it possible to check multiple-items at once

PROCEDURE OnAddItem(oGrid,Item)
	LOCAL oItems
	LOCAL bHasParent
	bHasParent := oGrid:FormatABC("value != 0",oGrid:Items:ItemParent(Item))
	oItems := oGrid:Items()
		oItems:SetProperty("CellHasCheckBox",Item,0,.F.)
RETURN

#include "AppEvent.ch"
#include "ActiveX.ch"

PROCEDURE Main
 	LOCAL oForm
	LOCAL nEvent := 0, mp1 := NIL, mp2 := NIL, oXbp := NIL
	LOCAL oGrid
	LOCAL oColumn
	LOCAL oItems
	LOCAL h,hChild

	oForm := XbpDialog():new( AppDesktop() )
	oForm:drawingArea:clipChildren := .T.
	oForm:create( ,,{100,100}, {640,480},, .F. )
	oForm:close  := {|| PostAppEvent( xbeP_Quit )}

	oGrid := XbpActiveXControl():new( oForm:drawingArea )
	oGrid:CLSID  := "Exontrol.Grid.1" /*{101EE60F-7B07-48B0-A13A-F32BAE7DA165}*/
	oGrid:create(,, {10,60},{610,370} )

		oGrid:AddItem := {|Item| OnAddItem(oGrid,Item)} /*Occurs after a new Item has been inserted to Items collection.*/

		oGrid:BeginUpdate()
		oGrid:LinesAtRoot := -1/*exLinesAtRoot*/
		oColumn := oGrid:Columns():Add("Tasks")
			oColumn:SetProperty("Def",17/*exCellValueFormat*/,1)
			oColumn:FormatColumn := "value + (%CS0 = 1 ? `<r><fgcolor=808080>(checked)` : ``)"
		oGrid:HeaderVisible := .T.
		oGrid:SingleSel := .F.
		oItems := oGrid:Items()
			h := oItems:AddItem("Project")
			hChild := oItems:InsertItem(h,,"Task 1")
			hChild := oItems:InsertItem(h,,"Task 2")
			hChild := oItems:InsertItem(h,,"Task 3")
			oItems:SetProperty("ExpandItem",h,.T.)
			oItems:SetProperty("LockedItemCount",0/*exTop*/,1)
			oItems:SetProperty("CellValue",oItems:LockedItem(0/*exTop*/,0),0,"<c>Select multiple items and press the <b>SPACE</b> key")
		oGrid:EndUpdate()

	oForm:Show()
	DO WHILE nEvent != xbeP_Quit
		nEvent := AppEvent( @mp1, @mp2, @oXbp )
		oXbp:handleEvent( nEvent, mp1, mp2 )
	ENDDO 
RETURN
1073:
How can I get the icon from the cell when using the Items.CellImages property (icon index)

PROCEDURE OnMouseMove(oGrid,Button,Shift,X,Y)
	LOCAL i
	i := oGrid:ItemFromPoint(-1,-1,c,hit)
	DevOut( Transform(oGrid:FormatABC("( 0x44 = ( value bitand 0x44 ) ) ? ( ( (value bitand 0xFFFF0000) bitshift 16 ) array B split `,` )  : `no image`",hit,oGrid:Items:CellImages(i,c)),"") )
RETURN

#include "AppEvent.ch"
#include "ActiveX.ch"

PROCEDURE Main
 	LOCAL oForm
	LOCAL nEvent := 0, mp1 := NIL, mp2 := NIL, oXbp := NIL
	LOCAL oGrid
	LOCAL oItems

	oForm := XbpDialog():new( AppDesktop() )
	oForm:drawingArea:clipChildren := .T.
	oForm:create( ,,{100,100}, {640,480},, .F. )
	oForm:close  := {|| PostAppEvent( xbeP_Quit )}

	oGrid := XbpActiveXControl():new( oForm:drawingArea )
	oGrid:CLSID  := "Exontrol.Grid.1" /*{101EE60F-7B07-48B0-A13A-F32BAE7DA165}*/
	oGrid:create(,, {10,60},{610,370} )

		oGrid:MouseMove := {|Button,Shift,X,Y| OnMouseMove(oGrid,Button,Shift,X,Y)} /*Occurs when the user moves the mouse.*/

		oGrid:BeginUpdate()
		oGrid:Images("gBJJgBAIDAAGAAEAAQhYAf8Pf4hh0QihCJo2AEZjQAjEZFEaIEaEEaAIAkcbk0olUrlktl0vmExmUzmk1m03nE5nU7nk9n0/oFBoVDolFo1HpFJpVLplNp1PqFRqVTqlVq1XrFZrVbrldr1fsFhsVjslls1ntFptVrtltt1vuFxuVzul1u13vF5vV7vl9v1/wGBwWDwmFw2HxGJxWLxmNx0xiFdyOTh8Tf9ZymXx+QytcyNgz8r0OblWjyWds+m0ka1Vf1ta1+r1mos2xrG2xeZ0+a0W0qOx3GO4NV3WeyvD2XJ5XL5nN51aiw+lfSj0gkUkAEllHanHI5j/cHg8EZf7w8vl8j4f/qfEZeB09/vjLAB30+kZQAP/P5/H6/yNAOAEAwCjMBwFAEDwJBMDwLBYAP2/8Hv8/gAGAD8LQs9w/nhDY/oygIA=")
		oGrid:Columns():Add("Default")
		oItems := oGrid:Items()
			oItems:SetProperty("CellImages",oItems:AddItem("Item 1"),0,"3,2,1")
			oItems:SetProperty("CellImages",oItems:AddItem("Item 2"),0,"2,3")
			oItems:SetProperty("CellImages",oItems:AddItem("Item 3"),0,"2,")
		oGrid:EndUpdate()

	oForm:Show()
	DO WHILE nEvent != xbeP_Quit
		nEvent := AppEvent( @mp1, @mp2, @oXbp )
		oXbp:handleEvent( nEvent, mp1, mp2 )
	ENDDO 
RETURN
1072:
How can I get the icon from the cell when using the Items.CellImages property (icon position within the cell)

PROCEDURE OnMouseMove(oGrid,Button,Shift,X,Y)
	LOCAL i
	i := oGrid:ItemFromPoint(-1,-1,c,hit)
	DevOut( Transform(oGrid:FormatABC("( 0x44 = ( value bitand 0x44 ) ) ? 1 + ( (value bitand 0xFFFF0000) bitshift 16 ) : `no image`",hit),"") )
RETURN

#include "AppEvent.ch"
#include "ActiveX.ch"

PROCEDURE Main
 	LOCAL oForm
	LOCAL nEvent := 0, mp1 := NIL, mp2 := NIL, oXbp := NIL
	LOCAL oGrid
	LOCAL oItems

	oForm := XbpDialog():new( AppDesktop() )
	oForm:drawingArea:clipChildren := .T.
	oForm:create( ,,{100,100}, {640,480},, .F. )
	oForm:close  := {|| PostAppEvent( xbeP_Quit )}

	oGrid := XbpActiveXControl():new( oForm:drawingArea )
	oGrid:CLSID  := "Exontrol.Grid.1" /*{101EE60F-7B07-48B0-A13A-F32BAE7DA165}*/
	oGrid:create(,, {10,60},{610,370} )

		oGrid:MouseMove := {|Button,Shift,X,Y| OnMouseMove(oGrid,Button,Shift,X,Y)} /*Occurs when the user moves the mouse.*/

		oGrid:BeginUpdate()
		oGrid:Images("gBJJgBAIDAAGAAEAAQhYAf8Pf4hh0QihCJo2AEZjQAjEZFEaIEaEEaAIAkcbk0olUrlktl0vmExmUzmk1m03nE5nU7nk9n0/oFBoVDolFo1HpFJpVLplNp1PqFRqVTqlVq1XrFZrVbrldr1fsFhsVjslls1ntFptVrtltt1vuFxuVzul1u13vF5vV7vl9v1/wGBwWDwmFw2HxGJxWLxmNx0xiFdyOTh8Tf9ZymXx+QytcyNgz8r0OblWjyWds+m0ka1Vf1ta1+r1mos2xrG2xeZ0+a0W0qOx3GO4NV3WeyvD2XJ5XL5nN51aiw+lfSj0gkUkAEllHanHI5j/cHg8EZf7w8vl8j4f/qfEZeB09/vjLAB30+kZQAP/P5/H6/yNAOAEAwCjMBwFAEDwJBMDwLBYAP2/8Hv8/gAGAD8LQs9w/nhDY/oygIA=")
		oGrid:Columns():Add("Default")
		oItems := oGrid:Items()
			oItems:SetProperty("CellImages",oItems:AddItem("Item 1"),0,"3,2,1")
			oItems:SetProperty("CellImages",oItems:AddItem("Item 2"),0,"2,3")
			oItems:SetProperty("CellImages",oItems:AddItem("Item 3"),0,"2")
		oGrid:EndUpdate()

	oForm:Show()
	DO WHILE nEvent != xbeP_Quit
		nEvent := AppEvent( @mp1, @mp2, @oXbp )
		oXbp:handleEvent( nEvent, mp1, mp2 )
	ENDDO 
RETURN
1071:
Is it possible to change the visual appearance of the position signs when user changes the column's position by drag and drop

#include "AppEvent.ch"
#include "ActiveX.ch"

PROCEDURE Main
 	LOCAL oForm
	LOCAL nEvent := 0, mp1 := NIL, mp2 := NIL, oXbp := NIL
	LOCAL oGrid
	LOCAL oAppearance
	LOCAL oColumns

	oForm := XbpDialog():new( AppDesktop() )
	oForm:drawingArea:clipChildren := .T.
	oForm:create( ,,{100,100}, {640,480},, .F. )
	oForm:close  := {|| PostAppEvent( xbeP_Quit )}

	oGrid := XbpActiveXControl():new( oForm:drawingArea )
	oGrid:CLSID  := "Exontrol.Grid.1" /*{101EE60F-7B07-48B0-A13A-F32BAE7DA165}*/
	oGrid:create(,, {10,60},{610,370} )

		oGrid:BeginUpdate()
		oGrid:HeaderAppearance := 4/*Etched*/
		oColumns := oGrid:Columns()
			oColumns:Add("Column 1")
			oColumns:Add("Column 2")
			oColumns:Add("Column 3")
		oAppearance := oGrid:VisualAppearance()
			oAppearance:Add(1,"gBFLBCJwBAEHhEJAAEhABZEGACAADACAxRDgMQBQKAAzAJBIYhiG4cYCgMYxXDOCYXABCEYRXBIZQ7BKNIxjSJwFgmEgADKMA4SOKIZhrE4bBhGaQRUgyI43RhHUBzVIUcQvE6TZRHCQYHgkNIhDJIM7TPLkeSVJaTIRoKhJUogApQThTMgVRDEThkGoSa6soSoYTDBKybLrSLKagOT5YUDKUqSdKEZRpEq1YztWbaQoCUoqVRRVIWfbNd4JJa4aDhWpYdpeeY5R7bWLgBYVVABL7LLRsSxpHxPF6RXxaeI3GKsaS8G6ic6nPQMHj7I4NS5pUa6Rh2VYNSa8AAtETRYznOw4bTMXAjNIea5bAYIIR5HIoDzVbQcCQAHL9DBeEMIQEEISgGhMGZQmocgymoYRRCIEQ0G2HYBnEIBig4V4zCQGINnmagCECY43medZ6H2Pw/g+X5fnueh/h+R5+AKABfkMWgGgGYA4AICoCGCE5WA4CphACMgSD2IRIDI" +;
		"BICmEd5YGCBpRjGBgegWIYIgWdgoGIRQsiKCZiAiJZ0gGQI4jUS4LECOAiBmDJflGfg2BSY4Al4OhGkOCJ2DgFJjGGfgqgiH5Ch4RhGkqOQmEOEpkFkHQYhJRYyESAokGKHhIhKIxJEmf4VGUeRGFmF5iBkchPhYJQ5GoYIZg6Ug6GoFYmkmNhuhulRGHKGoImefh0BUZ4JmYeoemeSZ2H6HQmgoBgXDqXwUAQgI=")
			oAppearance:Add(2,"CP:1 0 -36 0 0")
		oGrid:SetProperty("Background",182/*exColumnsPositionSign*/,0x2000000)
		oGrid:EndUpdate()

	oForm:Show()
	DO WHILE nEvent != xbeP_Quit
		nEvent := AppEvent( @mp1, @mp2, @oXbp )
		oXbp:handleEvent( nEvent, mp1, mp2 )
	ENDDO 
RETURN
1070:
How can I add a title column

#include "AppEvent.ch"
#include "ActiveX.ch"

PROCEDURE Main
 	LOCAL oForm
	LOCAL nEvent := 0, mp1 := NIL, mp2 := NIL, oXbp := NIL
	LOCAL oGrid
	LOCAL oColumn
	LOCAL oColumns
	LOCAL oItems

	oForm := XbpDialog():new( AppDesktop() )
	oForm:drawingArea:clipChildren := .T.
	oForm:create( ,,{100,100}, {640,480},, .F. )
	oForm:close  := {|| PostAppEvent( xbeP_Quit )}

	oGrid := XbpActiveXControl():new( oForm:drawingArea )
	oGrid:CLSID  := "Exontrol.Grid.1" /*{101EE60F-7B07-48B0-A13A-F32BAE7DA165}*/
	oGrid:create(,, {10,60},{610,370} )

		oGrid:BeginUpdate()
		oGrid:HeaderHeight := 22
		oGrid:HeaderAppearance := 4/*Etched*/
		oGrid:DrawGridLines := -1/*exAllLines*/
		oColumns := oGrid:Columns()
			oColumns:Add("Col 1")
			oColumns:Add("Col 2"):FormatColumn := "1 pos ``"
			oColumns:Add("Col 3"):FormatColumn := "1 pos `A-`"
			oColumns:Add("Col 4"):FormatColumn := "1 pos `A-Z`"
			oColumn := oColumns:Add("Title")
				oColumn:ExpandColumns := "0,1,2,3"
				oColumn:DisplayExpandButton := .F.
				oColumn:AllowSort := .F.
				oColumn:AllowDragging := .F.
				oColumn:Position := 0
				oColumn:HeaderAlignment := 1/*CenterAlignment*/
		oGrid:ColumnAutoResize := .F.
		oItems := oGrid:Items()
			oItems:AddItem("Item 1")
			oItems:AddItem("Item 2")
			oItems:AddItem("Item 3")
			oItems:AddItem("Item 4")
		oGrid:EndUpdate()
		DevOut( Transform(oGrid:Export(""),"") )

	oForm:Show()
	DO WHILE nEvent != xbeP_Quit
		nEvent := AppEvent( @mp1, @mp2, @oXbp )
		oXbp:handleEvent( nEvent, mp1, mp2 )
	ENDDO 
RETURN
1069:
FilterBarCaption ALLUI Keyword ( sample 3, result, leaf )

PROCEDURE OnAddGroupItem(oGrid,Item)
	LOCAL oItems
	LOCAL val
	oItems := oGrid:Items()
		oItems:SetProperty("ItemBackColor",Item,AutomationTranslateColor( GraMakeRGBColor  ( { 240,240,240 } )  , .F. ))
		val := oItems:CellValue(Item,oItems:GroupItem(Item))
		oItems:SetProperty("CellState",Item,oItems:GroupItem(Item),oGrid:FormatABC("A = `Checked` ? 1 : 0",val))
RETURN

PROCEDURE OnAddItem(oGrid,Item)
	LOCAL i
	i := oGrid:FormatABC("value + 1",oGrid:Items:ItemToIndex(Item))
	oGrid:Items():SetProperty("CellImage",Item,3,i)
RETURN

#include "AppEvent.ch"
#include "ActiveX.ch"

PROCEDURE Main
 	LOCAL oForm
	LOCAL nEvent := 0, mp1 := NIL, mp2 := NIL, oXbp := NIL
	LOCAL oGrid
	LOCAL oColumn,oColumn1,oColumn2,oColumn3,oColumn4,oColumn5
	LOCAL oItems
	LOCAL h

	oForm := XbpDialog():new( AppDesktop() )
	oForm:drawingArea:clipChildren := .T.
	oForm:create( ,,{100,100}, {640,480},, .F. )
	oForm:close  := {|| PostAppEvent( xbeP_Quit )}

	oGrid := XbpActiveXControl():new( oForm:drawingArea )
	oGrid:CLSID  := "Exontrol.Grid.1" /*{101EE60F-7B07-48B0-A13A-F32BAE7DA165}*/
	oGrid:create(,, {10,60},{610,370} )

		oGrid:AddGroupItem := {|Item| OnAddGroupItem(oGrid,Item)} /*Occurs after a new Group Item has been inserted to Items collection.*/
		oGrid:AddItem := {|Item| OnAddItem(oGrid,Item)} /*Occurs after a new Item has been inserted to Items collection.*/

		oGrid:BeginUpdate()
		oGrid:Images("gBJJgBAIDAAGAAEAAQhYAf8Pf4hh0QihCJo2AEZjQAjEZFEaIEaEEaAIAkcbk0olUrlktl0vmExmUzmk1m03nE5nU7nk9n0/oFBoVDolFo1HpFJpVLplNp1PqFRqVTqlVq1XrFZrVbrldr1fsFhsVjslls1ntFptVrtltt1vuFxuVzul1u13vF5vV7vl9v1/wGBwWDwmFw2HxGJxWLxmNx0xiFdyOTh8Tf9ZymXx+QytcyNgz8r0OblWjyWds+m0ka1Vf1ta1+r1mos2xrG2xeZ0+a0W0qOx3GO4NV3WeyvD2XJ5XL5nN51aiw+lfSj0gkUkAEllHanHI5j/cHg8EZf7w8vl8j4f/qfEZeB09/vjLAB30+kZQAP/P5/H6/yNAOAEAwCjMBwFAEDwJBMDwLBYAP2/8Hv8/gAGAD8LQs9w/nhDY/oygIA=")
		oColumn := oGrid:Columns():Add("Col-1")
			oColumn:DisplayFilterButton := .T.
			oColumn:FilterList := 9504/*exShowExclude+exShowFocusItem+exShowCheckBox+exSortItemsAsc*/
		oColumn1 := oGrid:Columns():Add("Col-2")
			oColumn1:DisplayFilterButton := .T.
			oColumn1:FilterList := 9504/*exShowExclude+exShowFocusItem+exShowCheckBox+exSortItemsAsc*/
		oColumn2 := oGrid:Columns():Add("Check")
			oColumn2:SetProperty("Def",0/*exCellHasCheckBox*/,.T.)
			oColumn2:DisplayFilterButton := .T.
			oColumn2:DisplayFilterPattern := .F.
			oColumn2:FilterType := 6/*exCheck*/
		oColumn3 := oGrid:Columns():Add("Image")
			oColumn3:DisplayFilterButton := .T.
			oColumn3:FilterType := 10/*exImage*/
			oColumn3:FilterList := 9472/*exShowExclude+exShowFocusItem+exShowCheckBox*/
		oColumn4 := oGrid:Columns():Add("Pos")
			oColumn4:AllowSizing := .F.
			oColumn4:AllowSort := .F.
			oColumn4:Width := 32
			oColumn4:FormatColumn := "1 rpos ``"
			oColumn4:Position := 0
		oItems := oGrid:Items()
			oItems:SetProperty("CellValue",oItems:AddItem("Item A"),1,"Sub-Item A")
			h := oItems:AddItem("Item B")
			oItems:SetProperty("CellValue",h,1,"Sub-Item B")
			oItems:SetProperty("CellState",h,2,1)
			oItems:SetProperty("CellValue",oItems:AddItem("Item C"),1,"Sub-Item C")
		oGrid:FilterBarFont := oGrid:Font()
		oGrid:SetProperty("Description",11/*exFilterBarAnd*/,Transform(oGrid:FormatABC("`<fgcolor=808080> ` + value + ` </fgcolor>`",oGrid:Description(11/*exFilterBarAnd*/)),""))
		oGrid:FilterBarCaption := "(( ( allui replace `[<b>` with `<bgcolor=000000><fgcolor=FFFFFF><b> ` replace `</b>]` with ` </b></bgcolor></fgcolor>` replace `[<s>` with `<bgcolor=C0C0C0><fgcolor=FFFFFF> ` replace `</s>]` with ` </fgcolor></bgcolor>` )  + `<r><fgcolor=808080>` + ( matchitemcount < 0 ? ( ( len(value) ? `` : `` ) + `<r>` + leafitemcount + ` result(s)` ) : (`<r><fgcolor=808080>`+ leafitemcount + ` item(s)`) )))"
		oGrid:FilterBarPromptVisible := 3/*exFilterBarVisible+exFilterBarPromptVisible*/
		oGrid:AllowGroupBy := .T.
		oGrid:SortBarVisible := .T.
		oColumn5 := oGrid:Columns:Item(2)
			oColumn5:FormatColumn := "%CS2 ? `Checked` : `Unchecked`"
			oColumn5:SortOrder := 1/*SortAscending*/
		oGrid:EndUpdate()

	oForm:Show()
	DO WHILE nEvent != xbeP_Quit
		nEvent := AppEvent( @mp1, @mp2, @oXbp )
		oXbp:handleEvent( nEvent, mp1, mp2 )
	ENDDO 
RETURN
1068:
A black portion is shown while I am using the BackColorAlternate with EBN colors. What can I do

#include "AppEvent.ch"
#include "ActiveX.ch"

PROCEDURE Main
 	LOCAL oForm
	LOCAL nEvent := 0, mp1 := NIL, mp2 := NIL, oXbp := NIL
	LOCAL oGrid
	LOCAL oColumn,oColumn1
	LOCAL oConditionalFormat
	LOCAL oItems

	oForm := XbpDialog():new( AppDesktop() )
	oForm:drawingArea:clipChildren := .T.
	oForm:create( ,,{100,100}, {640,480},, .F. )
	oForm:close  := {|| PostAppEvent( xbeP_Quit )}

	oGrid := XbpActiveXControl():new( oForm:drawingArea )
	oGrid:CLSID  := "Exontrol.Grid.1" /*{101EE60F-7B07-48B0-A13A-F32BAE7DA165}*/
	oGrid:create(,, {10,60},{610,370} )

		oGrid:BeginUpdate()
		oGrid:ColumnAutoResize := .T.
		oGrid:DefaultItemHeight := 20
		oGrid:VisualAppearance():Add(1,"gBFLBCJwBAEHhEJAAEhIDhAxHAxg0HG0Mg4xGI3HMOig3GcJiYAf8jAEhhUnAAyhEqg8hk0oAsIjgAiAwmYxGA4mYzGwwkI0i0ooUnB0IBMIl1Dg8zmYyGolptPkI1mY1GAll9KoUslNIrVCqNQldShFUstXAVfrVcrlZtVhuFnsUHq1zoczoQGhFBkNpg6zbDykUkhsPHE2h85nc9n8xtVDtlex9Msd2p1YstVq9ux8HyMtzuFz1PsNTzQlv2hhWfkuqpeVuN0q+nvEooN5veSAGpkb/ACcZrvhU3w83nM/poxGuchGpoVBvWgg+8knA4WimnFxI45Er5XOlHMg/Q3XU33W4ew9Wyu11mchDagcO7zus8VDoNBBEIKBpMY6DqOQyokhA/IQIQmwMk4bIQFDcoO6LWgwhQkNcABwEyAB5GwWbet6cRQg3DENQ5D8QxADZvEkAB8nabsURGeBpFM3pwE2AEZRpDx/neZpOR3Dz9oO/r/wCMoZNTBQAQR" +;
		"JSEwYg8HPGhEIoNCaEwq10gQ2WcRt7LcRxRFpuxUAEURQ3sczBEMgTTG8gN7HpOSEAEiQBAQZpmQ0DibPUFwbKcHwkhQoQtNQNzNEMbABOKDy/DMYQzHLeoPL0OTJSUd0pHcxTewk5zrIygIRPslz4lEngBKIAQivgASs/kLSBTlO00f8t0vGcgUbDlDRjXLCUNRERRvRgAHW2oAICA==")
		oColumn := oGrid:Columns():Add("Default")
			oColumn:SetProperty("Def",0/*exCellHasCheckBox*/,.T.)
			oColumn:PartialCheck := .T.
		oColumn1 := oGrid:Columns():Add("Position")
			oColumn1:FormatColumn := "1 rindex ``"
			oColumn1:Visible := .F.
		oConditionalFormat := oGrid:ConditionalFormats():Add("%C1 mod 2")
			oConditionalFormat:SetProperty("BackColor",0x1000000)
		oItems := oGrid:Items()
			oItems:AddItem("Item 1")
			oItems:AddItem("Item 2")
			oItems:AddItem("Item 3")
			oItems:AddItem("Item 4")
		oGrid:EndUpdate()

	oForm:Show()
	DO WHILE nEvent != xbeP_Quit
		nEvent := AppEvent( @mp1, @mp2, @oXbp )
		oXbp:handleEvent( nEvent, mp1, mp2 )
	ENDDO 
RETURN
1067:
How can I specify alternate background colors for each root item, similar with BackColorAlternate

#include "AppEvent.ch"
#include "ActiveX.ch"

PROCEDURE Main
 	LOCAL oForm
	LOCAL nEvent := 0, mp1 := NIL, mp2 := NIL, oXbp := NIL
	LOCAL oGrid
	LOCAL oColumn,oColumn1
	LOCAL oConditionalFormat
	LOCAL oItems
	LOCAL h

	oForm := XbpDialog():new( AppDesktop() )
	oForm:drawingArea:clipChildren := .T.
	oForm:create( ,,{100,100}, {640,480},, .F. )
	oForm:close  := {|| PostAppEvent( xbeP_Quit )}

	oGrid := XbpActiveXControl():new( oForm:drawingArea )
	oGrid:CLSID  := "Exontrol.Grid.1" /*{101EE60F-7B07-48B0-A13A-F32BAE7DA165}*/
	oGrid:create(,, {10,60},{610,370} )

		oGrid:BeginUpdate()
		oGrid:LinesAtRoot := -1/*exLinesAtRoot*/
		oColumn := oGrid:Columns():Add("Default")
			oColumn:SetProperty("Def",0/*exCellHasCheckBox*/,.T.)
			oColumn:PartialCheck := .T.
		oColumn1 := oGrid:Columns():Add("Position")
			oColumn1:FormatColumn := "( ( 1:=( ( 0:=(1 rpos '') ) lfind `.`) ) < 0 ? =:0 : (=:0 left =:1) )"
			oColumn1:Visible := .F.
		oConditionalFormat := oGrid:ConditionalFormats():Add("%C1 mod 2")
			oConditionalFormat:SetProperty("BackColor",AutomationTranslateColor( GraMakeRGBColor  ( { 240,240,240 } )  , .F. ))
		oItems := oGrid:Items()
			h := oItems:AddItem("Root 1")
			oItems:InsertItem(h,,"Child 1")
			oItems:InsertItem(h,,"Child 2")
			oItems:SetProperty("ExpandItem",h,.T.)
			h := oItems:AddItem("Root 2")
			oItems:InsertItem(h,,"Child 1")
			oItems:InsertItem(h,,"Child 2")
			h := oItems:AddItem("Root 3")
			oItems:InsertItem(h,,"Child 1")
			oItems:InsertItem(h,,"Child 2")
		oGrid:EndUpdate()

	oForm:Show()
	DO WHILE nEvent != xbeP_Quit
		nEvent := AppEvent( @mp1, @mp2, @oXbp )
		oXbp:handleEvent( nEvent, mp1, mp2 )
	ENDDO 
RETURN
1066:
Is it possible to change the caption from a column without to remove the column and add it with the new caption
#include "AppEvent.ch"
#include "ActiveX.ch"

PROCEDURE Main
 	LOCAL oForm
	LOCAL nEvent := 0, mp1 := NIL, mp2 := NIL, oXbp := NIL
	LOCAL oGrid

	oForm := XbpDialog():new( AppDesktop() )
	oForm:drawingArea:clipChildren := .T.
	oForm:create( ,,{100,100}, {640,480},, .F. )
	oForm:close  := {|| PostAppEvent( xbeP_Quit )}

	oGrid := XbpActiveXControl():new( oForm:drawingArea )
	oGrid:CLSID  := "Exontrol.Grid.1" /*{101EE60F-7B07-48B0-A13A-F32BAE7DA165}*/
	oGrid:create(,, {10,60},{610,370} )

		oGrid:Columns():Add("ColumnName"):Caption := "NewName"
		oGrid:Columns():Add("ColumnName"):HTMLCaption := "<b>New</b>Name"

	oForm:Show()
	DO WHILE nEvent != xbeP_Quit
		nEvent := AppEvent( @mp1, @mp2, @oXbp )
		oXbp:handleEvent( nEvent, mp1, mp2 )
	ENDDO 
RETURN
1065:
FilterBarCaption ALL Keyword ( sample 2, result )

PROCEDURE OnAddItem(oGrid,Item)
	LOCAL i
	i := oGrid:FormatABC("value + 1",oGrid:Items:ItemToIndex(Item))
	oGrid:Items():SetProperty("CellImage",Item,3,i)
RETURN

#include "AppEvent.ch"
#include "ActiveX.ch"

PROCEDURE Main
 	LOCAL oForm
	LOCAL nEvent := 0, mp1 := NIL, mp2 := NIL, oXbp := NIL
	LOCAL oGrid
	LOCAL oColumn,oColumn1,oColumn2,oColumn3,oColumn4,oColumn5
	LOCAL oEditor
	LOCAL oItems
	LOCAL h

	oForm := XbpDialog():new( AppDesktop() )
	oForm:drawingArea:clipChildren := .T.
	oForm:create( ,,{100,100}, {640,480},, .F. )
	oForm:close  := {|| PostAppEvent( xbeP_Quit )}

	oGrid := XbpActiveXControl():new( oForm:drawingArea )
	oGrid:CLSID  := "Exontrol.Grid.1" /*{101EE60F-7B07-48B0-A13A-F32BAE7DA165}*/
	oGrid:create(,, {10,60},{610,370} )

		oGrid:AddItem := {|Item| OnAddItem(oGrid,Item)} /*Occurs after a new Item has been inserted to Items collection.*/

		oGrid:BeginUpdate()
		oGrid:Images("gBJJgBAIDAAGAAEAAQhYAf8Pf4hh0QihCJo2AEZjQAjEZFEaIEaEEaAIAkcbk0olUrlktl0vmExmUzmk1m03nE5nU7nk9n0/oFBoVDolFo1HpFJpVLplNp1PqFRqVTqlVq1XrFZrVbrldr1fsFhsVjslls1ntFptVrtltt1vuFxuVzul1u13vF5vV7vl9v1/wGBwWDwmFw2HxGJxWLxmNx0xiFdyOTh8Tf9ZymXx+QytcyNgz8r0OblWjyWds+m0ka1Vf1ta1+r1mos2xrG2xeZ0+a0W0qOx3GO4NV3WeyvD2XJ5XL5nN51aiw+lfSj0gkUkAEllHanHI5j/cHg8EZf7w8vl8j4f/qfEZeB09/vjLAB30+kZQAP/P5/H6/yNAOAEAwCjMBwFAEDwJBMDwLBYAP2/8Hv8/gAGAD8LQs9w/nhDY/oygIA=")
		oColumn := oGrid:Columns():Add("Col-1")
			oColumn:DisplayFilterButton := .T.
			oColumn:FilterList := 9504/*exShowExclude+exShowFocusItem+exShowCheckBox+exSortItemsAsc*/
		oColumn1 := oGrid:Columns():Add("Col-2")
			oColumn1:DisplayFilterButton := .T.
			oColumn1:FilterList := 9504/*exShowExclude+exShowFocusItem+exShowCheckBox+exSortItemsAsc*/
		oColumn2 := oGrid:Columns():Add("Check")
			oEditor := oColumn2:Editor()
				oEditor:EditType := 19/*CheckValueType*/
				oEditor:SetProperty("Option",17/*exCheckValue2*/,1)
			oColumn2:DisplayFilterButton := .T.
			oColumn2:DisplayFilterPattern := .F.
			oColumn2:FilterType := 6/*exCheck*/
		oColumn3 := oGrid:Columns():Add("Image")
			oColumn3:DisplayFilterButton := .T.
			oColumn3:FilterType := 10/*exImage*/
			oColumn3:FilterList := 9472/*exShowExclude+exShowFocusItem+exShowCheckBox*/
		oColumn4 := oGrid:Columns():Add("Pos")
			oColumn4:AllowSizing := .F.
			oColumn4:AllowSort := .F.
			oColumn4:Width := 32
			oColumn4:FormatColumn := "1 apos ``"
			oColumn4:Position := 0
		oItems := oGrid:Items()
			oItems:SetProperty("CellValue",oItems:AddItem("Item A"),1,"Sub-Item A")
			h := oItems:AddItem("Item B")
			oItems:SetProperty("CellValue",h,1,"Sub-Item B")
			oItems:SetProperty("CellState",h,2,1)
			oItems:SetProperty("CellValue",oItems:AddItem("Item C"),1,"Sub-Item C")
		oGrid:FilterBarFont := oGrid:Font()
		oGrid:SetProperty("Description",11/*exFilterBarAnd*/,Transform(oGrid:FormatABC("`<fgcolor=808080> ` + value + ` </fgcolor>`",oGrid:Description(11/*exFilterBarAnd*/)),""))
		oGrid:FilterBarCaption := "(( ( all replace `[<b>` with `<bgcolor=000000><fgcolor=FFFFFF><b> ` replace `</b>]` with ` </b></bgcolor></fgcolor>` replace `[<s>` with `<bgcolor=C0C0C0><fgcolor=FFFFFF> ` replace `</s>]` with ` </fgcolor></bgcolor>` )  + `<r><fgcolor=808080>` + ( matchitemcount < 0 ? ( ( len(value) ? `` : `` ) + `<r>` + abs(matchitemcount + 1) + ` result(s)` ) : (`<r><fgcolor=808080>`+ itemcount + ` item(s)`) )))"
		oGrid:FilterBarPromptVisible := 3/*exFilterBarVisible+exFilterBarPromptVisible*/
		oColumn5 := oGrid:Columns:Item(0)
			oColumn5:FilterType := 240/*exFilter*/
			oColumn5:Filter := "Item A|Item B"
		oGrid:Columns:Item(2):Filter := Transform(1,"")
		oGrid:ApplyFilter()
		oGrid:EndUpdate()

	oForm:Show()
	DO WHILE nEvent != xbeP_Quit
		nEvent := AppEvent( @mp1, @mp2, @oXbp )
		oXbp:handleEvent( nEvent, mp1, mp2 )
	ENDDO 
RETURN
1064:
FilterBarCaption ALL Keyword ( sample 1 )

PROCEDURE OnAddItem(oGrid,Item)
	LOCAL i
	i := oGrid:FormatABC("value + 1",oGrid:Items:ItemToIndex(Item))
	oGrid:Items():SetProperty("CellImage",Item,3,i)
RETURN

#include "AppEvent.ch"
#include "ActiveX.ch"

PROCEDURE Main
 	LOCAL oForm
	LOCAL nEvent := 0, mp1 := NIL, mp2 := NIL, oXbp := NIL
	LOCAL oGrid
	LOCAL oColumn,oColumn1,oColumn2,oColumn3,oColumn4,oColumn5
	LOCAL oEditor
	LOCAL oItems
	LOCAL h

	oForm := XbpDialog():new( AppDesktop() )
	oForm:drawingArea:clipChildren := .T.
	oForm:create( ,,{100,100}, {640,480},, .F. )
	oForm:close  := {|| PostAppEvent( xbeP_Quit )}

	oGrid := XbpActiveXControl():new( oForm:drawingArea )
	oGrid:CLSID  := "Exontrol.Grid.1" /*{101EE60F-7B07-48B0-A13A-F32BAE7DA165}*/
	oGrid:create(,, {10,60},{610,370} )

		oGrid:AddItem := {|Item| OnAddItem(oGrid,Item)} /*Occurs after a new Item has been inserted to Items collection.*/

		oGrid:BeginUpdate()
		oGrid:Images("gBJJgBAIDAAGAAEAAQhYAf8Pf4hh0QihCJo2AEZjQAjEZFEaIEaEEaAIAkcbk0olUrlktl0vmExmUzmk1m03nE5nU7nk9n0/oFBoVDolFo1HpFJpVLplNp1PqFRqVTqlVq1XrFZrVbrldr1fsFhsVjslls1ntFptVrtltt1vuFxuVzul1u13vF5vV7vl9v1/wGBwWDwmFw2HxGJxWLxmNx0xiFdyOTh8Tf9ZymXx+QytcyNgz8r0OblWjyWds+m0ka1Vf1ta1+r1mos2xrG2xeZ0+a0W0qOx3GO4NV3WeyvD2XJ5XL5nN51aiw+lfSj0gkUkAEllHanHI5j/cHg8EZf7w8vl8j4f/qfEZeB09/vjLAB30+kZQAP/P5/H6/yNAOAEAwCjMBwFAEDwJBMDwLBYAP2/8Hv8/gAGAD8LQs9w/nhDY/oygIA=")
		oColumn := oGrid:Columns():Add("Col-1")
			oColumn:DisplayFilterButton := .T.
			oColumn:FilterList := 9504/*exShowExclude+exShowFocusItem+exShowCheckBox+exSortItemsAsc*/
		oColumn1 := oGrid:Columns():Add("Col-2")
			oColumn1:DisplayFilterButton := .T.
			oColumn1:FilterList := 9504/*exShowExclude+exShowFocusItem+exShowCheckBox+exSortItemsAsc*/
		oColumn2 := oGrid:Columns():Add("Check")
			oEditor := oColumn2:Editor()
				oEditor:EditType := 19/*CheckValueType*/
				oEditor:SetProperty("Option",17/*exCheckValue2*/,1)
			oColumn2:DisplayFilterButton := .T.
			oColumn2:DisplayFilterPattern := .F.
			oColumn2:FilterType := 6/*exCheck*/
		oColumn3 := oGrid:Columns():Add("Image")
			oColumn3:DisplayFilterButton := .T.
			oColumn3:FilterType := 10/*exImage*/
			oColumn3:FilterList := 9472/*exShowExclude+exShowFocusItem+exShowCheckBox*/
		oColumn4 := oGrid:Columns():Add("Pos")
			oColumn4:AllowSizing := .F.
			oColumn4:AllowSort := .F.
			oColumn4:Width := 32
			oColumn4:FormatColumn := "1 apos ``"
			oColumn4:Position := 0
		oItems := oGrid:Items()
			oItems:SetProperty("CellValue",oItems:AddItem("Item A"),1,"Sub-Item A")
			h := oItems:AddItem("Item B")
			oItems:SetProperty("CellValue",h,1,"Sub-Item B")
			oItems:SetProperty("CellState",h,2,1)
			oItems:SetProperty("CellValue",oItems:AddItem("Item C"),1,"Sub-Item C")
		oGrid:FilterBarFont := oGrid:Font()
		oGrid:SetProperty("Description",11/*exFilterBarAnd*/,Transform(oGrid:FormatABC("`<fgcolor=808080> ` + value + ` </fgcolor>`",oGrid:Description(11/*exFilterBarAnd*/)),""))
		oGrid:FilterBarCaption := "all"
		oGrid:FilterBarPromptVisible := 3/*exFilterBarVisible+exFilterBarPromptVisible*/
		oColumn5 := oGrid:Columns:Item(0)
			oColumn5:FilterType := 240/*exFilter*/
			oColumn5:Filter := "Item A|Item B"
		oGrid:Columns:Item(2):Filter := Transform(1,"")
		oGrid:ApplyFilter()
		oGrid:EndUpdate()

	oForm:Show()
	DO WHILE nEvent != xbeP_Quit
		nEvent := AppEvent( @mp1, @mp2, @oXbp )
		oXbp:handleEvent( nEvent, mp1, mp2 )
	ENDDO 
RETURN
1063:
FilterBarCaption ALLUI Keyword ( sample 2, result )

PROCEDURE OnAddItem(oGrid,Item)
	LOCAL i
	i := oGrid:FormatABC("value + 1",oGrid:Items:ItemToIndex(Item))
	oGrid:Items():SetProperty("CellImage",Item,3,i)
RETURN

#include "AppEvent.ch"
#include "ActiveX.ch"

PROCEDURE Main
 	LOCAL oForm
	LOCAL nEvent := 0, mp1 := NIL, mp2 := NIL, oXbp := NIL
	LOCAL oGrid
	LOCAL oColumn,oColumn1,oColumn2,oColumn3,oColumn4,oColumn5
	LOCAL oEditor
	LOCAL oItems
	LOCAL h

	oForm := XbpDialog():new( AppDesktop() )
	oForm:drawingArea:clipChildren := .T.
	oForm:create( ,,{100,100}, {640,480},, .F. )
	oForm:close  := {|| PostAppEvent( xbeP_Quit )}

	oGrid := XbpActiveXControl():new( oForm:drawingArea )
	oGrid:CLSID  := "Exontrol.Grid.1" /*{101EE60F-7B07-48B0-A13A-F32BAE7DA165}*/
	oGrid:create(,, {10,60},{610,370} )

		oGrid:AddItem := {|Item| OnAddItem(oGrid,Item)} /*Occurs after a new Item has been inserted to Items collection.*/

		oGrid:BeginUpdate()
		oGrid:Images("gBJJgBAIDAAGAAEAAQhYAf8Pf4hh0QihCJo2AEZjQAjEZFEaIEaEEaAIAkcbk0olUrlktl0vmExmUzmk1m03nE5nU7nk9n0/oFBoVDolFo1HpFJpVLplNp1PqFRqVTqlVq1XrFZrVbrldr1fsFhsVjslls1ntFptVrtltt1vuFxuVzul1u13vF5vV7vl9v1/wGBwWDwmFw2HxGJxWLxmNx0xiFdyOTh8Tf9ZymXx+QytcyNgz8r0OblWjyWds+m0ka1Vf1ta1+r1mos2xrG2xeZ0+a0W0qOx3GO4NV3WeyvD2XJ5XL5nN51aiw+lfSj0gkUkAEllHanHI5j/cHg8EZf7w8vl8j4f/qfEZeB09/vjLAB30+kZQAP/P5/H6/yNAOAEAwCjMBwFAEDwJBMDwLBYAP2/8Hv8/gAGAD8LQs9w/nhDY/oygIA=")
		oColumn := oGrid:Columns():Add("Col-1")
			oColumn:DisplayFilterButton := .T.
			oColumn:FilterList := 9504/*exShowExclude+exShowFocusItem+exShowCheckBox+exSortItemsAsc*/
		oColumn1 := oGrid:Columns():Add("Col-2")
			oColumn1:DisplayFilterButton := .T.
			oColumn1:FilterList := 9504/*exShowExclude+exShowFocusItem+exShowCheckBox+exSortItemsAsc*/
		oColumn2 := oGrid:Columns():Add("Check")
			oEditor := oColumn2:Editor()
				oEditor:EditType := 19/*CheckValueType*/
				oEditor:SetProperty("Option",17/*exCheckValue2*/,1)
			oColumn2:DisplayFilterButton := .T.
			oColumn2:DisplayFilterPattern := .F.
			oColumn2:FilterType := 6/*exCheck*/
		oColumn3 := oGrid:Columns():Add("Image")
			oColumn3:DisplayFilterButton := .T.
			oColumn3:FilterType := 10/*exImage*/
			oColumn3:FilterList := 9472/*exShowExclude+exShowFocusItem+exShowCheckBox*/
		oColumn4 := oGrid:Columns():Add("Pos")
			oColumn4:AllowSizing := .F.
			oColumn4:AllowSort := .F.
			oColumn4:Width := 32
			oColumn4:FormatColumn := "1 apos ``"
			oColumn4:Position := 0
		oItems := oGrid:Items()
			oItems:SetProperty("CellValue",oItems:AddItem("Item A"),1,"Sub-Item A")
			h := oItems:AddItem("Item B")
			oItems:SetProperty("CellValue",h,1,"Sub-Item B")
			oItems:SetProperty("CellState",h,2,1)
			oItems:SetProperty("CellValue",oItems:AddItem("Item C"),1,"Sub-Item C")
		oGrid:FilterBarFont := oGrid:Font()
		oGrid:SetProperty("Description",11/*exFilterBarAnd*/,Transform(oGrid:FormatABC("`<fgcolor=808080> ` + value + ` </fgcolor>`",oGrid:Description(11/*exFilterBarAnd*/)),""))
		oGrid:FilterBarCaption := "(( ( allui replace `[<b>` with `<bgcolor=000000><fgcolor=FFFFFF><b> ` replace `</b>]` with ` </b></bgcolor></fgcolor>` replace `[<s>` with `<bgcolor=C0C0C0><fgcolor=FFFFFF> ` replace `</s>]` with ` </fgcolor></bgcolor>` )  + `<r><fgcolor=808080>` + ( matchitemcount < 0 ? ( ( len(value) ? `` : `` ) + `<r>` + abs(matchitemcount + 1) + ` result(s)` ) : (`<r><fgcolor=808080>`+ itemcount + ` item(s)`) )))"
		oGrid:FilterBarPromptVisible := 3/*exFilterBarVisible+exFilterBarPromptVisible*/
		oColumn5 := oGrid:Columns:Item(0)
			oColumn5:FilterType := 240/*exFilter*/
			oColumn5:Filter := "Item A|Item B"
		oGrid:Columns:Item(2):Filter := Transform(1,"")
		oGrid:ApplyFilter()
		oGrid:EndUpdate()

	oForm:Show()
	DO WHILE nEvent != xbeP_Quit
		nEvent := AppEvent( @mp1, @mp2, @oXbp )
		oXbp:handleEvent( nEvent, mp1, mp2 )
	ENDDO 
RETURN
1062:
FilterBarCaption ALLUI Keyword ( sample 1 )

PROCEDURE OnAddItem(oGrid,Item)
	LOCAL i
	i := oGrid:FormatABC("value + 1",oGrid:Items:ItemToIndex(Item))
	oGrid:Items():SetProperty("CellImage",Item,3,i)
RETURN

#include "AppEvent.ch"
#include "ActiveX.ch"

PROCEDURE Main
 	LOCAL oForm
	LOCAL nEvent := 0, mp1 := NIL, mp2 := NIL, oXbp := NIL
	LOCAL oGrid
	LOCAL oColumn,oColumn1,oColumn2,oColumn3,oColumn4,oColumn5
	LOCAL oEditor
	LOCAL oItems
	LOCAL h

	oForm := XbpDialog():new( AppDesktop() )
	oForm:drawingArea:clipChildren := .T.
	oForm:create( ,,{100,100}, {640,480},, .F. )
	oForm:close  := {|| PostAppEvent( xbeP_Quit )}

	oGrid := XbpActiveXControl():new( oForm:drawingArea )
	oGrid:CLSID  := "Exontrol.Grid.1" /*{101EE60F-7B07-48B0-A13A-F32BAE7DA165}*/
	oGrid:create(,, {10,60},{610,370} )

		oGrid:AddItem := {|Item| OnAddItem(oGrid,Item)} /*Occurs after a new Item has been inserted to Items collection.*/

		oGrid:BeginUpdate()
		oGrid:Images("gBJJgBAIDAAGAAEAAQhYAf8Pf4hh0QihCJo2AEZjQAjEZFEaIEaEEaAIAkcbk0olUrlktl0vmExmUzmk1m03nE5nU7nk9n0/oFBoVDolFo1HpFJpVLplNp1PqFRqVTqlVq1XrFZrVbrldr1fsFhsVjslls1ntFptVrtltt1vuFxuVzul1u13vF5vV7vl9v1/wGBwWDwmFw2HxGJxWLxmNx0xiFdyOTh8Tf9ZymXx+QytcyNgz8r0OblWjyWds+m0ka1Vf1ta1+r1mos2xrG2xeZ0+a0W0qOx3GO4NV3WeyvD2XJ5XL5nN51aiw+lfSj0gkUkAEllHanHI5j/cHg8EZf7w8vl8j4f/qfEZeB09/vjLAB30+kZQAP/P5/H6/yNAOAEAwCjMBwFAEDwJBMDwLBYAP2/8Hv8/gAGAD8LQs9w/nhDY/oygIA=")
		oColumn := oGrid:Columns():Add("Col-1")
			oColumn:DisplayFilterButton := .T.
			oColumn:FilterList := 9504/*exShowExclude+exShowFocusItem+exShowCheckBox+exSortItemsAsc*/
		oColumn1 := oGrid:Columns():Add("Col-2")
			oColumn1:DisplayFilterButton := .T.
			oColumn1:FilterList := 9504/*exShowExclude+exShowFocusItem+exShowCheckBox+exSortItemsAsc*/
		oColumn2 := oGrid:Columns():Add("Check")
			oEditor := oColumn2:Editor()
				oEditor:EditType := 19/*CheckValueType*/
				oEditor:SetProperty("Option",17/*exCheckValue2*/,1)
			oColumn2:DisplayFilterButton := .T.
			oColumn2:DisplayFilterPattern := .F.
			oColumn2:FilterType := 6/*exCheck*/
		oColumn3 := oGrid:Columns():Add("Image")
			oColumn3:DisplayFilterButton := .T.
			oColumn3:FilterType := 10/*exImage*/
			oColumn3:FilterList := 9472/*exShowExclude+exShowFocusItem+exShowCheckBox*/
		oColumn4 := oGrid:Columns():Add("Pos")
			oColumn4:AllowSizing := .F.
			oColumn4:AllowSort := .F.
			oColumn4:Width := 32
			oColumn4:FormatColumn := "1 apos ``"
			oColumn4:Position := 0
		oItems := oGrid:Items()
			oItems:SetProperty("CellValue",oItems:AddItem("Item A"),1,"Sub-Item A")
			h := oItems:AddItem("Item B")
			oItems:SetProperty("CellValue",h,1,"Sub-Item B")
			oItems:SetProperty("CellState",h,2,1)
			oItems:SetProperty("CellValue",oItems:AddItem("Item C"),1,"Sub-Item C")
		oGrid:FilterBarFont := oGrid:Font()
		oGrid:SetProperty("Description",11/*exFilterBarAnd*/,Transform(oGrid:FormatABC("`<fgcolor=808080> ` + value + ` </fgcolor>`",oGrid:Description(11/*exFilterBarAnd*/)),""))
		oGrid:FilterBarCaption := "allui"
		oGrid:FilterBarPromptVisible := 3/*exFilterBarVisible+exFilterBarPromptVisible*/
		oColumn5 := oGrid:Columns:Item(0)
			oColumn5:FilterType := 240/*exFilter*/
			oColumn5:Filter := "Item A|Item B"
		oGrid:Columns:Item(2):Filter := Transform(1,"")
		oGrid:ApplyFilter()
		oGrid:EndUpdate()

	oForm:Show()
	DO WHILE nEvent != xbeP_Quit
		nEvent := AppEvent( @mp1, @mp2, @oXbp )
		oXbp:handleEvent( nEvent, mp1, mp2 )
	ENDDO 
RETURN
1061:
FilterBarCaption AVAILABLE Keyword ( sample 2, result )

PROCEDURE OnAddItem(oGrid,Item)
	LOCAL i
	i := oGrid:FormatABC("value + 1",oGrid:Items:ItemToIndex(Item))
	oGrid:Items():SetProperty("CellImage",Item,3,i)
RETURN

#include "AppEvent.ch"
#include "ActiveX.ch"

PROCEDURE Main
 	LOCAL oForm
	LOCAL nEvent := 0, mp1 := NIL, mp2 := NIL, oXbp := NIL
	LOCAL oGrid
	LOCAL oColumn,oColumn1,oColumn2,oColumn3,oColumn4,oColumn5
	LOCAL oEditor
	LOCAL oItems
	LOCAL h

	oForm := XbpDialog():new( AppDesktop() )
	oForm:drawingArea:clipChildren := .T.
	oForm:create( ,,{100,100}, {640,480},, .F. )
	oForm:close  := {|| PostAppEvent( xbeP_Quit )}

	oGrid := XbpActiveXControl():new( oForm:drawingArea )
	oGrid:CLSID  := "Exontrol.Grid.1" /*{101EE60F-7B07-48B0-A13A-F32BAE7DA165}*/
	oGrid:create(,, {10,60},{610,370} )

		oGrid:AddItem := {|Item| OnAddItem(oGrid,Item)} /*Occurs after a new Item has been inserted to Items collection.*/

		oGrid:BeginUpdate()
		oGrid:Images("gBJJgBAIDAAGAAEAAQhYAf8Pf4hh0QihCJo2AEZjQAjEZFEaIEaEEaAIAkcbk0olUrlktl0vmExmUzmk1m03nE5nU7nk9n0/oFBoVDolFo1HpFJpVLplNp1PqFRqVTqlVq1XrFZrVbrldr1fsFhsVjslls1ntFptVrtltt1vuFxuVzul1u13vF5vV7vl9v1/wGBwWDwmFw2HxGJxWLxmNx0xiFdyOTh8Tf9ZymXx+QytcyNgz8r0OblWjyWds+m0ka1Vf1ta1+r1mos2xrG2xeZ0+a0W0qOx3GO4NV3WeyvD2XJ5XL5nN51aiw+lfSj0gkUkAEllHanHI5j/cHg8EZf7w8vl8j4f/qfEZeB09/vjLAB30+kZQAP/P5/H6/yNAOAEAwCjMBwFAEDwJBMDwLBYAP2/8Hv8/gAGAD8LQs9w/nhDY/oygIA=")
		oColumn := oGrid:Columns():Add("Col-1")
			oColumn:DisplayFilterButton := .T.
			oColumn:FilterList := 9504/*exShowExclude+exShowFocusItem+exShowCheckBox+exSortItemsAsc*/
		oColumn1 := oGrid:Columns():Add("Col-2")
			oColumn1:DisplayFilterButton := .T.
			oColumn1:FilterList := 9504/*exShowExclude+exShowFocusItem+exShowCheckBox+exSortItemsAsc*/
		oColumn2 := oGrid:Columns():Add("Check")
			oEditor := oColumn2:Editor()
				oEditor:EditType := 19/*CheckValueType*/
				oEditor:SetProperty("Option",17/*exCheckValue2*/,1)
			oColumn2:DisplayFilterButton := .T.
			oColumn2:DisplayFilterPattern := .F.
			oColumn2:FilterType := 6/*exCheck*/
		oColumn3 := oGrid:Columns():Add("Image")
			oColumn3:DisplayFilterButton := .T.
			oColumn3:FilterType := 10/*exImage*/
			oColumn3:FilterList := 9472/*exShowExclude+exShowFocusItem+exShowCheckBox*/
		oColumn4 := oGrid:Columns():Add("Pos")
			oColumn4:AllowSizing := .F.
			oColumn4:AllowSort := .F.
			oColumn4:Width := 32
			oColumn4:FormatColumn := "1 apos ``"
			oColumn4:Position := 0
		oItems := oGrid:Items()
			oItems:SetProperty("CellValue",oItems:AddItem("Item A"),1,"Sub-Item A")
			h := oItems:AddItem("Item B")
			oItems:SetProperty("CellValue",h,1,"Sub-Item B")
			oItems:SetProperty("CellState",h,2,1)
			oItems:SetProperty("CellValue",oItems:AddItem("Item C"),1,"Sub-Item C")
		oGrid:FilterBarFont := oGrid:Font()
		oGrid:SetProperty("Description",11/*exFilterBarAnd*/,Transform(oGrid:FormatABC("`<fgcolor=808080> ` + value + ` </fgcolor>`",oGrid:Description(11/*exFilterBarAnd*/)),""))
		oGrid:FilterBarCaption := "(( ( value replace `[` with `<bgcolor=000000><fgcolor=FFFFFF><b> ` replace `]` with ` </b></bgcolor></fgcolor>` ) + ` ` + ( available replace `[` with `<bgcolor=C0C0C0><fgcolor=FFFFFF><b> ` replace `]` with ` </b></bgcolor></fgcolor>` replace `<s>` with `` replace `</s>` with `` ) + `<fgcolor=808080>` + ( matchitemcount < 0 ? ( ( len(value) ? `` : `` ) + `<r>` + abs(matchitemcount + 1) + ` result(s)` ) : (`<r><fgcolor=808080>`+ itemcount + ` item(s)`) )))"
		oGrid:FilterBarPromptVisible := 3/*exFilterBarVisible+exFilterBarPromptVisible*/
		oColumn5 := oGrid:Columns:Item(0)
			oColumn5:FilterType := 240/*exFilter*/
			oColumn5:Filter := "Item A|Item B"
		oGrid:Columns:Item(2):Filter := Transform(1,"")
		oGrid:ApplyFilter()
		oGrid:EndUpdate()

	oForm:Show()
	DO WHILE nEvent != xbeP_Quit
		nEvent := AppEvent( @mp1, @mp2, @oXbp )
		oXbp:handleEvent( nEvent, mp1, mp2 )
	ENDDO 
RETURN
1060:
FilterBarCaption AVAILABLE Keyword ( sample 1 )

PROCEDURE OnAddItem(oGrid,Item)
	LOCAL i
	i := oGrid:FormatABC("value + 1",oGrid:Items:ItemToIndex(Item))
	oGrid:Items():SetProperty("CellImage",Item,3,i)
RETURN

#include "AppEvent.ch"
#include "ActiveX.ch"

PROCEDURE Main
 	LOCAL oForm
	LOCAL nEvent := 0, mp1 := NIL, mp2 := NIL, oXbp := NIL
	LOCAL oGrid
	LOCAL oColumn,oColumn1,oColumn2,oColumn3,oColumn4,oColumn5
	LOCAL oEditor
	LOCAL oItems
	LOCAL h

	oForm := XbpDialog():new( AppDesktop() )
	oForm:drawingArea:clipChildren := .T.
	oForm:create( ,,{100,100}, {640,480},, .F. )
	oForm:close  := {|| PostAppEvent( xbeP_Quit )}

	oGrid := XbpActiveXControl():new( oForm:drawingArea )
	oGrid:CLSID  := "Exontrol.Grid.1" /*{101EE60F-7B07-48B0-A13A-F32BAE7DA165}*/
	oGrid:create(,, {10,60},{610,370} )

		oGrid:AddItem := {|Item| OnAddItem(oGrid,Item)} /*Occurs after a new Item has been inserted to Items collection.*/

		oGrid:BeginUpdate()
		oGrid:Images("gBJJgBAIDAAGAAEAAQhYAf8Pf4hh0QihCJo2AEZjQAjEZFEaIEaEEaAIAkcbk0olUrlktl0vmExmUzmk1m03nE5nU7nk9n0/oFBoVDolFo1HpFJpVLplNp1PqFRqVTqlVq1XrFZrVbrldr1fsFhsVjslls1ntFptVrtltt1vuFxuVzul1u13vF5vV7vl9v1/wGBwWDwmFw2HxGJxWLxmNx0xiFdyOTh8Tf9ZymXx+QytcyNgz8r0OblWjyWds+m0ka1Vf1ta1+r1mos2xrG2xeZ0+a0W0qOx3GO4NV3WeyvD2XJ5XL5nN51aiw+lfSj0gkUkAEllHanHI5j/cHg8EZf7w8vl8j4f/qfEZeB09/vjLAB30+kZQAP/P5/H6/yNAOAEAwCjMBwFAEDwJBMDwLBYAP2/8Hv8/gAGAD8LQs9w/nhDY/oygIA=")
		oColumn := oGrid:Columns():Add("Col-1")
			oColumn:DisplayFilterButton := .T.
			oColumn:FilterList := 9504/*exShowExclude+exShowFocusItem+exShowCheckBox+exSortItemsAsc*/
		oColumn1 := oGrid:Columns():Add("Col-2")
			oColumn1:DisplayFilterButton := .T.
			oColumn1:FilterList := 9504/*exShowExclude+exShowFocusItem+exShowCheckBox+exSortItemsAsc*/
		oColumn2 := oGrid:Columns():Add("Check")
			oEditor := oColumn2:Editor()
				oEditor:EditType := 19/*CheckValueType*/
				oEditor:SetProperty("Option",17/*exCheckValue2*/,1)
			oColumn2:DisplayFilterButton := .T.
			oColumn2:DisplayFilterPattern := .F.
			oColumn2:FilterType := 6/*exCheck*/
		oColumn3 := oGrid:Columns():Add("Image")
			oColumn3:DisplayFilterButton := .T.
			oColumn3:FilterType := 10/*exImage*/
			oColumn3:FilterList := 9472/*exShowExclude+exShowFocusItem+exShowCheckBox*/
		oColumn4 := oGrid:Columns():Add("Pos")
			oColumn4:AllowSizing := .F.
			oColumn4:AllowSort := .F.
			oColumn4:Width := 32
			oColumn4:FormatColumn := "1 apos ``"
			oColumn4:Position := 0
		oItems := oGrid:Items()
			oItems:SetProperty("CellValue",oItems:AddItem("Item A"),1,"Sub-Item A")
			h := oItems:AddItem("Item B")
			oItems:SetProperty("CellValue",h,1,"Sub-Item B")
			oItems:SetProperty("CellState",h,2,1)
			oItems:SetProperty("CellValue",oItems:AddItem("Item C"),1,"Sub-Item C")
		oGrid:FilterBarFont := oGrid:Font()
		oGrid:SetProperty("Description",11/*exFilterBarAnd*/,Transform(oGrid:FormatABC("`<fgcolor=808080> ` + value + ` </fgcolor>`",oGrid:Description(11/*exFilterBarAnd*/)),""))
		oGrid:FilterBarCaption := "value + ` ` + available"
		oGrid:FilterBarPromptVisible := 3/*exFilterBarVisible+exFilterBarPromptVisible*/
		oColumn5 := oGrid:Columns:Item(0)
			oColumn5:FilterType := 240/*exFilter*/
			oColumn5:Filter := "Item A|Item B"
		oGrid:Columns:Item(2):Filter := Transform(1,"")
		oGrid:ApplyFilter()
		oGrid:EndUpdate()

	oForm:Show()
	DO WHILE nEvent != xbeP_Quit
		nEvent := AppEvent( @mp1, @mp2, @oXbp )
		oXbp:handleEvent( nEvent, mp1, mp2 )
	ENDDO 
RETURN
1059:
Is it possible to somehow highlight the column's name different than its filter value in the control's filter bar ( sample 3, results )

#include "AppEvent.ch"
#include "ActiveX.ch"

PROCEDURE Main
 	LOCAL oForm
	LOCAL nEvent := 0, mp1 := NIL, mp2 := NIL, oXbp := NIL
	LOCAL oGrid
	LOCAL oColumn,oColumn1,oColumn2,oColumn3,oColumn4
	LOCAL oItems

	oForm := XbpDialog():new( AppDesktop() )
	oForm:drawingArea:clipChildren := .T.
	oForm:create( ,,{100,100}, {640,480},, .F. )
	oForm:close  := {|| PostAppEvent( xbeP_Quit )}

	oGrid := XbpActiveXControl():new( oForm:drawingArea )
	oGrid:CLSID  := "Exontrol.Grid.1" /*{101EE60F-7B07-48B0-A13A-F32BAE7DA165}*/
	oGrid:create(,, {10,60},{610,370} )

		oGrid:BeginUpdate()
		oColumn := oGrid:Columns():Add("Col-1")
			oColumn:DisplayFilterButton := .T.
			oColumn:FilterList := 9504/*exShowExclude+exShowFocusItem+exShowCheckBox+exSortItemsAsc*/
		oColumn1 := oGrid:Columns():Add("Col-2")
			oColumn1:DisplayFilterButton := .T.
			oColumn1:FilterList := 9504/*exShowExclude+exShowFocusItem+exShowCheckBox+exSortItemsAsc*/
		oColumn2 := oGrid:Columns():Add("Pos")
			oColumn2:AllowSizing := .F.
			oColumn2:AllowSort := .F.
			oColumn2:Width := 32
			oColumn2:FormatColumn := "1 apos ``"
			oColumn2:Position := 0
		oItems := oGrid:Items()
			oItems:SetProperty("CellValue",oItems:AddItem("Item A"),1,"Sub-Item A")
			oItems:SetProperty("CellValue",oItems:AddItem("Item B"),1,"Sub-Item B")
			oItems:SetProperty("CellValue",oItems:AddItem("Item C"),1,"Sub-Item C")
		oGrid:FilterBarFont := oGrid:Font()
		oGrid:SetProperty("Description",11/*exFilterBarAnd*/,Transform(oGrid:FormatABC("`<fgcolor=808080>` + value + `</fgcolor>`",oGrid:Description(11/*exFilterBarAnd*/)),""))
		oGrid:FilterBarCaption := "(`<b>` + value + `</b><fgcolor=808080>` + ( matchitemcount < 0 ? ( ( len(value) ? `` : `` ) + `<r>` + abs(matchitemcount + 1) + ` result(s)` ) : (`<fgcolor=808080>`+ itemcount + ` item(s)`) )) replace `[` with `<bgcolor=000000><fgcolor=FFFFFF><b> ` replace `]` with ` </b></bgcolor></fgcolor>`"
		oGrid:FilterBarPromptVisible := 256/*exFilterBarToggle*/
		oColumn3 := oGrid:Columns:Item(0)
			oColumn3:FilterType := 240/*exFilter*/
			oColumn3:Filter := "Item A|Item B"
		oColumn4 := oGrid:Columns:Item(1)
			oColumn4:FilterType := 3/*exPattern*/
			oColumn4:Filter := "*B"
		oGrid:ApplyFilter()
		oGrid:EndUpdate()

	oForm:Show()
	DO WHILE nEvent != xbeP_Quit
		nEvent := AppEvent( @mp1, @mp2, @oXbp )
		oXbp:handleEvent( nEvent, mp1, mp2 )
	ENDDO 
RETURN
1058:
Is it possible to somehow highlight the column's name different than its filter value in the control's filter bar ( sample 2 )

#include "AppEvent.ch"
#include "ActiveX.ch"

PROCEDURE Main
 	LOCAL oForm
	LOCAL nEvent := 0, mp1 := NIL, mp2 := NIL, oXbp := NIL
	LOCAL oGrid
	LOCAL oColumn,oColumn1,oColumn2,oColumn3,oColumn4
	LOCAL oItems

	oForm := XbpDialog():new( AppDesktop() )
	oForm:drawingArea:clipChildren := .T.
	oForm:create( ,,{100,100}, {640,480},, .F. )
	oForm:close  := {|| PostAppEvent( xbeP_Quit )}

	oGrid := XbpActiveXControl():new( oForm:drawingArea )
	oGrid:CLSID  := "Exontrol.Grid.1" /*{101EE60F-7B07-48B0-A13A-F32BAE7DA165}*/
	oGrid:create(,, {10,60},{610,370} )

		oGrid:BeginUpdate()
		oColumn := oGrid:Columns():Add("Col-1")
			oColumn:DisplayFilterButton := .T.
			oColumn:FilterList := 9504/*exShowExclude+exShowFocusItem+exShowCheckBox+exSortItemsAsc*/
		oColumn1 := oGrid:Columns():Add("Col-2")
			oColumn1:DisplayFilterButton := .T.
			oColumn1:FilterList := 9504/*exShowExclude+exShowFocusItem+exShowCheckBox+exSortItemsAsc*/
		oColumn2 := oGrid:Columns():Add("Pos")
			oColumn2:AllowSizing := .F.
			oColumn2:AllowSort := .F.
			oColumn2:Width := 32
			oColumn2:FormatColumn := "1 apos ``"
			oColumn2:Position := 0
		oItems := oGrid:Items()
			oItems:SetProperty("CellValue",oItems:AddItem("Item A"),1,"Sub-Item A")
			oItems:SetProperty("CellValue",oItems:AddItem("Item B"),1,"Sub-Item B")
			oItems:SetProperty("CellValue",oItems:AddItem("Item C"),1,"Sub-Item C")
		oGrid:FilterBarFont := oGrid:Font()
		oGrid:SetProperty("Description",11/*exFilterBarAnd*/,Transform(oGrid:FormatABC("`<fgcolor=808080>` + value + `</fgcolor>`",oGrid:Description(11/*exFilterBarAnd*/)),""))
		oGrid:FilterBarCaption := "value replace `[` with `<bgcolor=000000><fgcolor=FFFFFF><b> ` replace `]` with ` </b></bgcolor></fgcolor>`"
		oGrid:FilterBarPromptVisible := 256/*exFilterBarToggle*/
		oColumn3 := oGrid:Columns:Item(0)
			oColumn3:FilterType := 240/*exFilter*/
			oColumn3:Filter := "Item A|Item B"
		oColumn4 := oGrid:Columns:Item(1)
			oColumn4:FilterType := 3/*exPattern*/
			oColumn4:Filter := "*B"
		oGrid:ApplyFilter()
		oGrid:EndUpdate()

	oForm:Show()
	DO WHILE nEvent != xbeP_Quit
		nEvent := AppEvent( @mp1, @mp2, @oXbp )
		oXbp:handleEvent( nEvent, mp1, mp2 )
	ENDDO 
RETURN
1057:
Is it possible to somehow highlight the column's name different than its filter value in the control's filter bar ( sample 1 )

#include "AppEvent.ch"
#include "ActiveX.ch"

PROCEDURE Main
 	LOCAL oForm
	LOCAL nEvent := 0, mp1 := NIL, mp2 := NIL, oXbp := NIL
	LOCAL oGrid
	LOCAL oColumn,oColumn1,oColumn2,oColumn3,oColumn4
	LOCAL oItems

	oForm := XbpDialog():new( AppDesktop() )
	oForm:drawingArea:clipChildren := .T.
	oForm:create( ,,{100,100}, {640,480},, .F. )
	oForm:close  := {|| PostAppEvent( xbeP_Quit )}

	oGrid := XbpActiveXControl():new( oForm:drawingArea )
	oGrid:CLSID  := "Exontrol.Grid.1" /*{101EE60F-7B07-48B0-A13A-F32BAE7DA165}*/
	oGrid:create(,, {10,60},{610,370} )

		oGrid:BeginUpdate()
		oColumn := oGrid:Columns():Add("Col-1")
			oColumn:DisplayFilterButton := .T.
			oColumn:FilterList := 9504/*exShowExclude+exShowFocusItem+exShowCheckBox+exSortItemsAsc*/
		oColumn1 := oGrid:Columns():Add("Col-2")
			oColumn1:DisplayFilterButton := .T.
			oColumn1:FilterList := 9504/*exShowExclude+exShowFocusItem+exShowCheckBox+exSortItemsAsc*/
		oColumn2 := oGrid:Columns():Add("Pos")
			oColumn2:AllowSizing := .F.
			oColumn2:AllowSort := .F.
			oColumn2:Width := 32
			oColumn2:FormatColumn := "1 apos ``"
			oColumn2:Position := 0
		oItems := oGrid:Items()
			oItems:SetProperty("CellValue",oItems:AddItem("Item A"),1,"Sub-Item A")
			oItems:SetProperty("CellValue",oItems:AddItem("Item B"),1,"Sub-Item B")
			oItems:SetProperty("CellValue",oItems:AddItem("Item C"),1,"Sub-Item C")
		oGrid:SetProperty("Description",11/*exFilterBarAnd*/,Transform(oGrid:FormatABC("`<fgcolor=808080>` + value + `</fgcolor>`",oGrid:Description(11/*exFilterBarAnd*/)),""))
		oGrid:FilterBarCaption := "value replace `[` with `<fgcolor=808080>[` replace `]` with `]</fgcolor>`"
		oGrid:FilterBarPromptVisible := 256/*exFilterBarToggle*/
		oColumn3 := oGrid:Columns:Item(0)
			oColumn3:FilterType := 240/*exFilter*/
			oColumn3:Filter := "Item A|Item B"
		oColumn4 := oGrid:Columns:Item(1)
			oColumn4:FilterType := 3/*exPattern*/
			oColumn4:Filter := "*B"
		oGrid:ApplyFilter()
		oGrid:EndUpdate()

	oForm:Show()
	DO WHILE nEvent != xbeP_Quit
		nEvent := AppEvent( @mp1, @mp2, @oXbp )
		oXbp:handleEvent( nEvent, mp1, mp2 )
	ENDDO 
RETURN
1056:
Is it possible to automatically displays the control's filter label to the right

#include "AppEvent.ch"
#include "ActiveX.ch"

PROCEDURE Main
 	LOCAL oForm
	LOCAL nEvent := 0, mp1 := NIL, mp2 := NIL, oXbp := NIL
	LOCAL oGrid
	LOCAL oColumn,oColumn1,oColumn2
	LOCAL oItems

	oForm := XbpDialog():new( AppDesktop() )
	oForm:drawingArea:clipChildren := .T.
	oForm:create( ,,{100,100}, {640,480},, .F. )
	oForm:close  := {|| PostAppEvent( xbeP_Quit )}

	oGrid := XbpActiveXControl():new( oForm:drawingArea )
	oGrid:CLSID  := "Exontrol.Grid.1" /*{101EE60F-7B07-48B0-A13A-F32BAE7DA165}*/
	oGrid:create(,, {10,60},{610,370} )

		oGrid:BeginUpdate()
		oColumn := oGrid:Columns():Add("Item")
			oColumn:DisplayFilterButton := .T.
			oColumn:FilterList := 9504/*exShowExclude+exShowFocusItem+exShowCheckBox+exSortItemsAsc*/
		oColumn1 := oGrid:Columns():Add("Pos")
			oColumn1:AllowSizing := .F.
			oColumn1:AllowSort := .F.
			oColumn1:Width := 32
			oColumn1:FormatColumn := "1 apos ``"
			oColumn1:Position := 0
		oItems := oGrid:Items()
			oItems:AddItem("Item A")
			oItems:AddItem("Item B")
			oItems:AddItem("Item C")
		oGrid:FilterBarCaption := "`<r>` + value"
		oGrid:FilterBarPromptVisible := 1280/*exFilterBarShowCloseOnRight+exFilterBarToggle*/
		oColumn2 := oGrid:Columns:Item(0)
			oColumn2:FilterType := 240/*exFilter*/
			oColumn2:Filter := "Item B"
		oGrid:ApplyFilter()
		oGrid:EndUpdate()

	oForm:Show()
	DO WHILE nEvent != xbeP_Quit
		nEvent := AppEvent( @mp1, @mp2, @oXbp )
		oXbp:handleEvent( nEvent, mp1, mp2 )
	ENDDO 
RETURN
1055:
How can I get the number of results/items being shown in the control's filter bar (sample 4)

#include "AppEvent.ch"
#include "ActiveX.ch"

PROCEDURE Main
 	LOCAL oForm
	LOCAL nEvent := 0, mp1 := NIL, mp2 := NIL, oXbp := NIL
	LOCAL oGrid
	LOCAL oColumn,oColumn1
	LOCAL oItems

	oForm := XbpDialog():new( AppDesktop() )
	oForm:drawingArea:clipChildren := .T.
	oForm:create( ,,{100,100}, {640,480},, .F. )
	oForm:close  := {|| PostAppEvent( xbeP_Quit )}

	oGrid := XbpActiveXControl():new( oForm:drawingArea )
	oGrid:CLSID  := "Exontrol.Grid.1" /*{101EE60F-7B07-48B0-A13A-F32BAE7DA165}*/
	oGrid:create(,, {10,60},{610,370} )

		oGrid:BeginUpdate()
		oColumn := oGrid:Columns():Add("Item")
			oColumn:DisplayFilterButton := .T.
			oColumn:FilterList := 9504/*exShowExclude+exShowFocusItem+exShowCheckBox+exSortItemsAsc*/
		oColumn1 := oGrid:Columns():Add("Pos")
			oColumn1:AllowSizing := .F.
			oColumn1:AllowSort := .F.
			oColumn1:Width := 32
			oColumn1:FormatColumn := "1 apos ``"
			oColumn1:Position := 0
		oItems := oGrid:Items()
			oItems:AddItem("Item A")
			oItems:AddItem("Item B")
			oItems:AddItem("Item C")
		oGrid:FilterBarFont := oGrid:Font()
		oGrid:FilterBarPrompt := Transform(oGrid:FormatABC("`<b>` + value",oGrid:FilterBarPrompt()),"")
		oGrid:FilterBarCaption := "`<b><r>` + value + `</b><fgcolor=808080>` + ( matchitemcount < 0 ? ( ( len(value) ? `<br>` : `` ) + `<r>` + abs(matchitemcount + 1) + ` result(s)` ) : (`<fgcolor=808080>`+ itemcount + ` item(s)`) )"
		oGrid:FilterBarPromptVisible := 3591/*exFilterBarCompact+exFilterBarShowCloseOnRight+exFilterBarShowCloseIfRequired+exFilterBarCaptionVisible+exFilterBarVisible+exFilterBarPromptVisible*/
		oGrid:EndUpdate()

	oForm:Show()
	DO WHILE nEvent != xbeP_Quit
		nEvent := AppEvent( @mp1, @mp2, @oXbp )
		oXbp:handleEvent( nEvent, mp1, mp2 )
	ENDDO 
RETURN
1054:
How can I get the number of results being shown in the control's filter bar (sample 3)

#include "AppEvent.ch"
#include "ActiveX.ch"

PROCEDURE Main
 	LOCAL oForm
	LOCAL nEvent := 0, mp1 := NIL, mp2 := NIL, oXbp := NIL
	LOCAL oGrid
	LOCAL oColumn,oColumn1
	LOCAL oItems

	oForm := XbpDialog():new( AppDesktop() )
	oForm:drawingArea:clipChildren := .T.
	oForm:create( ,,{100,100}, {640,480},, .F. )
	oForm:close  := {|| PostAppEvent( xbeP_Quit )}

	oGrid := XbpActiveXControl():new( oForm:drawingArea )
	oGrid:CLSID  := "Exontrol.Grid.1" /*{101EE60F-7B07-48B0-A13A-F32BAE7DA165}*/
	oGrid:create(,, {10,60},{610,370} )

		oGrid:BeginUpdate()
		oGrid:Columns():Add("Item"):DisplayFilterButton := .T.
		oColumn := oGrid:Columns():Add("Pos")
			oColumn:AllowSizing := .F.
			oColumn:AllowSort := .F.
			oColumn:Width := 32
			oColumn:FormatColumn := "1 apos ``"
			oColumn:Position := 0
		oItems := oGrid:Items()
			oItems:AddItem("Item A")
			oItems:AddItem("Item B")
			oItems:AddItem("Item C")
		oGrid:FilterBarFont := oGrid:Font()
		oGrid:FilterBarCaption := "`<b><r>` + value + `</b><fgcolor=808080>` + ( matchitemcount < 0 ? ( ( len(value) ? `<br>` : `` ) + `<r>` + abs(matchitemcount + 1) + ` result(s)` ) : ``)"
		oGrid:FilterBarPromptVisible := 2055/*exFilterBarCompact+exFilterBarCaptionVisible+exFilterBarVisible+exFilterBarPromptVisible*/
		oColumn1 := oGrid:Columns:Item(0)
			oColumn1:FilterType := 240/*exFilter*/
			oColumn1:Filter := "Item A|Item B"
		oGrid:ApplyFilter()
		oGrid:EndUpdate()

	oForm:Show()
	DO WHILE nEvent != xbeP_Quit
		nEvent := AppEvent( @mp1, @mp2, @oXbp )
		oXbp:handleEvent( nEvent, mp1, mp2 )
	ENDDO 
RETURN
1053:
How can I get the number of results being shown in the control's filter bar (sample 2, compact)

#include "AppEvent.ch"
#include "ActiveX.ch"

PROCEDURE Main
 	LOCAL oForm
	LOCAL nEvent := 0, mp1 := NIL, mp2 := NIL, oXbp := NIL
	LOCAL oGrid
	LOCAL oColumn,oColumn1
	LOCAL oItems

	oForm := XbpDialog():new( AppDesktop() )
	oForm:drawingArea:clipChildren := .T.
	oForm:create( ,,{100,100}, {640,480},, .F. )
	oForm:close  := {|| PostAppEvent( xbeP_Quit )}

	oGrid := XbpActiveXControl():new( oForm:drawingArea )
	oGrid:CLSID  := "Exontrol.Grid.1" /*{101EE60F-7B07-48B0-A13A-F32BAE7DA165}*/
	oGrid:create(,, {10,60},{610,370} )

		oGrid:BeginUpdate()
		oGrid:Columns():Add("Item"):DisplayFilterButton := .T.
		oColumn := oGrid:Columns():Add("Pos")
			oColumn:AllowSizing := .F.
			oColumn:AllowSort := .F.
			oColumn:Width := 32
			oColumn:FormatColumn := "1 apos ``"
			oColumn:Position := 0
		oItems := oGrid:Items()
			oItems:AddItem("Item A")
			oItems:AddItem("Item B")
			oItems:AddItem("Item C")
		oGrid:FilterBarFont := oGrid:Font()
		oGrid:FilterBarCaption := "`<b><r>` + value + `</b><fgcolor=808080>` + ( matchitemcount < 0 ? `<off -4> ` + abs(matchitemcount + 1) + ` result(s)` : ``)"
		oGrid:FilterBarPromptVisible := 2071/*exFilterBarCompact+exFilterBarSingleLine+exFilterBarCaptionVisible+exFilterBarVisible+exFilterBarPromptVisible*/
		oColumn1 := oGrid:Columns:Item(0)
			oColumn1:FilterType := 240/*exFilter*/
			oColumn1:Filter := "Item A|Item B"
		oGrid:ApplyFilter()
		oGrid:EndUpdate()

	oForm:Show()
	DO WHILE nEvent != xbeP_Quit
		nEvent := AppEvent( @mp1, @mp2, @oXbp )
		oXbp:handleEvent( nEvent, mp1, mp2 )
	ENDDO 
RETURN
1052:
How can I get the number of results being shown in the control's filter bar (sample 1)

#include "AppEvent.ch"
#include "ActiveX.ch"

PROCEDURE Main
 	LOCAL oForm
	LOCAL nEvent := 0, mp1 := NIL, mp2 := NIL, oXbp := NIL
	LOCAL oGrid
	LOCAL oColumn,oColumn1
	LOCAL oItems

	oForm := XbpDialog():new( AppDesktop() )
	oForm:drawingArea:clipChildren := .T.
	oForm:create( ,,{100,100}, {640,480},, .F. )
	oForm:close  := {|| PostAppEvent( xbeP_Quit )}

	oGrid := XbpActiveXControl():new( oForm:drawingArea )
	oGrid:CLSID  := "Exontrol.Grid.1" /*{101EE60F-7B07-48B0-A13A-F32BAE7DA165}*/
	oGrid:create(,, {10,60},{610,370} )

		oGrid:BeginUpdate()
		oGrid:Columns():Add("Item"):DisplayFilterButton := .T.
		oColumn := oGrid:Columns():Add("Pos")
			oColumn:AllowSizing := .F.
			oColumn:AllowSort := .F.
			oColumn:Width := 32
			oColumn:FormatColumn := "1 apos ``"
			oColumn:Position := 0
		oItems := oGrid:Items()
			oItems:AddItem("Item A")
			oItems:AddItem("Item B")
			oItems:AddItem("Item C")
		oGrid:FilterBarFont := oGrid:Font()
		oGrid:FilterBarCaption := "`<b>` + value + `</b><r><fgcolor=808080>` + ( matchitemcount < 0 ? abs(matchitemcount + 1) + ` result(s)` : ``)"
		oGrid:FilterBarPromptVisible := 7/*exFilterBarCaptionVisible+exFilterBarVisible+exFilterBarPromptVisible*/
		oColumn1 := oGrid:Columns:Item(0)
			oColumn1:FilterType := 240/*exFilter*/
			oColumn1:Filter := "Item A|Item B"
		oGrid:ApplyFilter()
		oGrid:EndUpdate()

	oForm:Show()
	DO WHILE nEvent != xbeP_Quit
		nEvent := AppEvent( @mp1, @mp2, @oXbp )
		oXbp:handleEvent( nEvent, mp1, mp2 )
	ENDDO 
RETURN
1051:
FilterBarCaption Predefined Keywords

PROCEDURE OnAfterExpandItem(oGrid,Item)
	oGrid:Refresh()
RETURN

#include "AppEvent.ch"
#include "ActiveX.ch"

PROCEDURE Main
 	LOCAL oForm
	LOCAL nEvent := 0, mp1 := NIL, mp2 := NIL, oXbp := NIL
	LOCAL oGrid
	LOCAL oColumn,oColumn1,oColumn2
	LOCAL oEditor
	LOCAL oItems
	LOCAL h

	oForm := XbpDialog():new( AppDesktop() )
	oForm:drawingArea:clipChildren := .T.
	oForm:create( ,,{100,100}, {640,480},, .F. )
	oForm:close  := {|| PostAppEvent( xbeP_Quit )}

	oGrid := XbpActiveXControl():new( oForm:drawingArea )
	oGrid:CLSID  := "Exontrol.Grid.1" /*{101EE60F-7B07-48B0-A13A-F32BAE7DA165}*/
	oGrid:create(,, {10,60},{610,370} )

		oGrid:AfterExpandItem := {|Item| OnAfterExpandItem(oGrid,Item)} /*Fired after an item is expanded (collapsed).*/

		oGrid:BeginUpdate()
		oGrid:LinesAtRoot := -1/*exLinesAtRoot*/
		oGrid:Columns():Add("Item"):DisplayFilterButton := .T.
		oColumn := oGrid:Columns():Add("Check")
			oEditor := oColumn:Editor()
				oEditor:EditType := 19/*CheckValueType*/
				oEditor:SetProperty("Option",17/*exCheckValue2*/,1)
			oColumn:DisplayFilterButton := .T.
			oColumn:DisplayFilterPattern := .F.
			oColumn:FilterType := 6/*exCheck*/
		oColumn1 := oGrid:Columns():Add("Pos")
			oColumn1:AllowSizing := .F.
			oColumn1:AllowSort := .F.
			oColumn1:Width := 32
			oColumn1:FormatColumn := "1 apos ``"
			oColumn1:Position := 0
		oItems := oGrid:Items()
			oItems:AddItem("Item A")
			h := oItems:AddItem("Item B")
			oItems:SetProperty("CellState",oItems:InsertItem(h,,"Sub-Item B1"),1,1)
			oItems:InsertItem(h,,"Sub-Item B2")
			oItems:SetProperty("ExpandItem",h,.T.)
			oItems:AddItem("Item C")
		oGrid:FilterInclude := 1/*exItemsWithChilds*/
		oGrid:FilterBarFont := oGrid:Font()
		oGrid:FilterBarCaption := "`<fgcolor=0000FF><i>value/current</i></fgcolor>: <fgcolor=808080>` + value + `</fgcolor>` + `<br><fgcolor=0000FF><i>available</i></fgcolor>: ` + available + `<br><fgcolor=0000FF><i>allui</i></fgcolor>: ` + allui + `<br><fgcolor=0000FF><i>all</i></fgcolor>: ` + all + `<br><fgcolor=0000FF><i>itemcount</i></fgcolor>: <fgcolor=808080>` + itemcount + `</fgcolor>`+ `<br><fgcolor=0000FF><i>visibleitemcount</i></fgcolor>: <fgcolor=808080>` + visibleitemcount + `</fgcolor>`+ `<br><fgcolor=0000FF><i>matchitemcount</" +;
		"i></fgcolor>: <fgcolor=808080>` + matchitemcount + `</fgcolor>`+ `<br><fgcolor=0000FF><i>promptpattern</i></fgcolor>: <fgcolor=808080>` + promptpattern + `</fgcolor>`+ `<br><fgcolor=0000FF><i>leafitemcount</i></fgcolor>: <fgcolor=808080>` + leafitemcount + `</fgcolor>`"
		oGrid:FilterBarPromptPattern := "B"
		oGrid:FilterBarPromptVisible := 7/*exFilterBarCaptionVisible+exFilterBarVisible+exFilterBarPromptVisible*/
		oColumn2 := oGrid:Columns:Item(0)
			oColumn2:FilterType := 240/*exFilter*/
			oColumn2:Filter := "Item A|Item B"
		oGrid:ApplyFilter()
		oGrid:EndUpdate()

	oForm:Show()
	DO WHILE nEvent != xbeP_Quit
		nEvent := AppEvent( @mp1, @mp2, @oXbp )
		oXbp:handleEvent( nEvent, mp1, mp2 )
	ENDDO 
RETURN
1050:
I am using filter prompt feature, and also column's filter, just wondering if possible to compact displaying the filter bar so it won't show on multiple lines

#include "AppEvent.ch"
#include "ActiveX.ch"

PROCEDURE Main
 	LOCAL oForm
	LOCAL nEvent := 0, mp1 := NIL, mp2 := NIL, oXbp := NIL
	LOCAL oGrid
	LOCAL oColumn,oColumn1
	LOCAL oItems

	oForm := XbpDialog():new( AppDesktop() )
	oForm:drawingArea:clipChildren := .T.
	oForm:create( ,,{100,100}, {640,480},, .F. )
	oForm:close  := {|| PostAppEvent( xbeP_Quit )}

	oGrid := XbpActiveXControl():new( oForm:drawingArea )
	oGrid:CLSID  := "Exontrol.Grid.1" /*{101EE60F-7B07-48B0-A13A-F32BAE7DA165}*/
	oGrid:create(,, {10,60},{610,370} )

		oGrid:BeginUpdate()
		oGrid:Columns():Add("Item"):DisplayFilterButton := .T.
		oColumn := oGrid:Columns():Add("Pos")
			oColumn:AllowSizing := .F.
			oColumn:AllowSort := .F.
			oColumn:Width := 32
			oColumn:FormatColumn := "1 apos ``"
			oColumn:Position := 0
		oItems := oGrid:Items()
			oItems:AddItem("Item A")
			oItems:AddItem("Item B")
			oItems:AddItem("Item C")
		oGrid:FilterBarFont := oGrid:Font()
		oGrid:FilterBarCaption := "`<r><i><fgcolor=808080><upline><solidline><sha ;;0>` + value"
		oGrid:FilterBarPromptPattern := "B"
		oGrid:FilterBarPromptVisible := 2067/*exFilterBarCompact+exFilterBarSingleLine+exFilterBarVisible+exFilterBarPromptVisible*/
		oColumn1 := oGrid:Columns:Item(0)
			oColumn1:FilterType := 240/*exFilter*/
			oColumn1:Filter := "Item A|Item B"
		oGrid:ApplyFilter()
		oGrid:EndUpdate()

	oForm:Show()
	DO WHILE nEvent != xbeP_Quit
		nEvent := AppEvent( @mp1, @mp2, @oXbp )
		oXbp:handleEvent( nEvent, mp1, mp2 )
	ENDDO 
RETURN
1049:
Just wondering if it is possible to show the filter bar's close button on the right ( sample 2 )

#include "AppEvent.ch"
#include "ActiveX.ch"

PROCEDURE Main
 	LOCAL oForm
	LOCAL nEvent := 0, mp1 := NIL, mp2 := NIL, oXbp := NIL
	LOCAL oGrid
	LOCAL oColumn
	LOCAL oItems

	oForm := XbpDialog():new( AppDesktop() )
	oForm:drawingArea:clipChildren := .T.
	oForm:create( ,,{100,100}, {640,480},, .F. )
	oForm:close  := {|| PostAppEvent( xbeP_Quit )}

	oGrid := XbpActiveXControl():new( oForm:drawingArea )
	oGrid:CLSID  := "Exontrol.Grid.1" /*{101EE60F-7B07-48B0-A13A-F32BAE7DA165}*/
	oGrid:create(,, {10,60},{610,370} )

		oGrid:BeginUpdate()
		oGrid:Columns():Add("Item"):DisplayFilterButton := .T.
		oColumn := oGrid:Columns():Add("Pos")
			oColumn:AllowSizing := .F.
			oColumn:AllowSort := .F.
			oColumn:Width := 32
			oColumn:FormatColumn := "1 apos ``"
			oColumn:Position := 0
		oItems := oGrid:Items()
			oItems:AddItem("Item A")
			oItems:AddItem("Item B")
			oItems:AddItem("Item C")
		oGrid:FilterBarPromptVisible := 1281/*exFilterBarShowCloseOnRight+exFilterBarToggle+exFilterBarPromptVisible*/
		oGrid:FilterBarPrompt := Transform(oGrid:FormatABC("`<r>` + value",oGrid:FilterBarPrompt()),"")
		oGrid:EndUpdate()

	oForm:Show()
	DO WHILE nEvent != xbeP_Quit
		nEvent := AppEvent( @mp1, @mp2, @oXbp )
		oXbp:handleEvent( nEvent, mp1, mp2 )
	ENDDO 
RETURN
1048:
Just wondering if it is possible to show the filter bar's close button on the right ( sample 1 )

#include "AppEvent.ch"
#include "ActiveX.ch"

PROCEDURE Main
 	LOCAL oForm
	LOCAL nEvent := 0, mp1 := NIL, mp2 := NIL, oXbp := NIL
	LOCAL oGrid
	LOCAL oColumn
	LOCAL oItems

	oForm := XbpDialog():new( AppDesktop() )
	oForm:drawingArea:clipChildren := .T.
	oForm:create( ,,{100,100}, {640,480},, .F. )
	oForm:close  := {|| PostAppEvent( xbeP_Quit )}

	oGrid := XbpActiveXControl():new( oForm:drawingArea )
	oGrid:CLSID  := "Exontrol.Grid.1" /*{101EE60F-7B07-48B0-A13A-F32BAE7DA165}*/
	oGrid:create(,, {10,60},{610,370} )

		oGrid:BeginUpdate()
		oGrid:RightToLeft := .T.
		oGrid:Columns():Add("Item"):DisplayFilterButton := .T.
		oColumn := oGrid:Columns():Add("Pos")
			oColumn:AllowSizing := .F.
			oColumn:AllowSort := .F.
			oColumn:Width := 32
			oColumn:FormatColumn := "1 apos ``"
			oColumn:Position := 0
		oItems := oGrid:Items()
			oItems:AddItem("Item A")
			oItems:AddItem("Item B")
			oItems:AddItem("Item C")
		oGrid:FilterBarPromptVisible := 257/*exFilterBarToggle+exFilterBarPromptVisible*/
		oGrid:EndUpdate()

	oForm:Show()
	DO WHILE nEvent != xbeP_Quit
		nEvent := AppEvent( @mp1, @mp2, @oXbp )
		oXbp:handleEvent( nEvent, mp1, mp2 )
	ENDDO 
RETURN
1047:
How can I change the visual appearance of the filter bar's close button (EBN)

#include "AppEvent.ch"
#include "ActiveX.ch"

PROCEDURE Main
 	LOCAL oForm
	LOCAL nEvent := 0, mp1 := NIL, mp2 := NIL, oXbp := NIL
	LOCAL oGrid
	LOCAL oAppearance
	LOCAL oColumn
	LOCAL oItems

	oForm := XbpDialog():new( AppDesktop() )
	oForm:drawingArea:clipChildren := .T.
	oForm:create( ,,{100,100}, {640,480},, .F. )
	oForm:close  := {|| PostAppEvent( xbeP_Quit )}

	oGrid := XbpActiveXControl():new( oForm:drawingArea )
	oGrid:CLSID  := "Exontrol.Grid.1" /*{101EE60F-7B07-48B0-A13A-F32BAE7DA165}*/
	oGrid:create(,, {10,60},{610,370} )

		oGrid:BeginUpdate()
		oAppearance := oGrid:VisualAppearance()
			oAppearance:Add(1,"gBFLBCJwBAEHhEJAAEhABHQDg6AADACAxRDgMQBQKAAzAJBIYhiG4cYCgMZhXDOCYXABCEYRXBIZQ7BKNIxjSJ5BhIAAyDSJMjSRJUEhqGCWYDleYYYAKHIMQLOg7IJjyI4/SJAYCydKAWhxIaZKJHCZoEDaTAADCNVAQp6MEIJVbVEI0e79OgBLp/Z7kECIJJAaRjHQdJxGLA8EhtCQhCZteK6SgMKJYXhWQYRXI1JwvMBrWrdQjiOYELQtMKmSZNLYGG4dR5SVJbcYhSYsRRFMoyDIOXYDLKsdYqSpXIThObEGgaPqJYjsUjCMKnR7HVIURrBPC9TBPE69ZgmC6ucKPX51ShKFaBWDZcwFAS+UBuYCAILiEAQGZ1XT8OROicbgJgSTJRlCaZeDsHY7QGR4xkSYp3CaExZAQMgalQYAwjCAAfBANxcA2TgKAUOpDCGFhKg0RpXCwCwDHQHQHEyAIkCkOhbFOGA8A8DohBgRg9AccZcn8EpEjMLI2C2" +;
		"DYxAgQgvAIUIVkoAAPBQDJlECTZ3CCYwDACQwUA8A5MCAWAWDiQi4l8aQOEgLJuBgBgDmYFAzEoIoIl0WALgKYJbBABADAAHgHg8VAMmqCQQDMXABAATYwTmNwBDATJXAiAgjHmNQ5lgQ5QEQEQMmcWg/GwD5ylyNw2gMcJcjsBgBgOQQDDhRpVAMMwnDBFw1B0Ax8D0DxOmmJJIGQTY5hGMAwkwM4CAYLZAmAOJnAqAojiIGg6iieYkmeAYOHaKJDCyCwjH6AoggsQpQliAJLhgaJ0CESBTnyDwjk+cg4g4P5IHIHJ+BWRRzlYWAxiOUxihsY4KjKLJRGqC44FCegkkkM58iAKAPnIWIWD8SRSFSfQnkmewUhYP4GiGKJ7G0TIbCSUoggqUo0lAQ4LnEcBcD8Coiiif4nE+eAAn2HpOkcFJqi4T5SkyMw/kqQown8IBIBOdA+A+DJrBqVxXEqYo4lCApLhGHBnD8S4ymyfxmg+cwQkQP5egOUZIWoEA" +;
		"kjIeIPBMBJBD+TBjBifwvkuc58hQJQPmFrYykkchclSApKjGOBuD+TRDFCfw3mmIxNi8FxFlOXhVC4aYDFyPgvg2YBcBcLZGCGCJ0DSLRzGSWQ/lmY5+mEP5gmMDBZRSMRsFsOxMhMJJ/DsTpTnwaQaE+N5ojuNhdEYNI5C4TZJO1GRDmCaxnA2Yx4n8IpIjOTBQBQC5TgyYw7gUYRYikC0BYRwsDQBoB8eA6Q2hsE0BUXgywZtYCyHMKwnxSAhAQHkIQhRrBaDsCwA4ERiB2EWAIYIXhhiVEgAEUYwwYjyASLge4FhHgRDkM8OQih0jWPkGgBBAQ")
		oGrid:Columns():Add("Item"):DisplayFilterButton := .T.
		oColumn := oGrid:Columns():Add("Pos")
			oColumn:AllowSizing := .F.
			oColumn:AllowSort := .F.
			oColumn:Width := 32
			oColumn:FormatColumn := "1 apos ``"
			oColumn:Position := 0
		oItems := oGrid:Items()
			oItems:AddItem("Item A")
			oItems:AddItem("Item B")
			oItems:AddItem("Item C")
		oGrid:FilterBarPromptVisible := 257/*exFilterBarToggle+exFilterBarPromptVisible*/
		oGrid:SetProperty("Background",1/*exFooterFilterBarButton*/,0x1000000)
		oGrid:EndUpdate()

	oForm:Show()
	DO WHILE nEvent != xbeP_Quit
		nEvent := AppEvent( @mp1, @mp2, @oXbp )
		oXbp:handleEvent( nEvent, mp1, mp2 )
	ENDDO 
RETURN
1046:
How can I change the visual appearance of the filter bar's close button (solid)

#include "AppEvent.ch"
#include "ActiveX.ch"

PROCEDURE Main
 	LOCAL oForm
	LOCAL nEvent := 0, mp1 := NIL, mp2 := NIL, oXbp := NIL
	LOCAL oGrid
	LOCAL oColumn
	LOCAL oItems

	oForm := XbpDialog():new( AppDesktop() )
	oForm:drawingArea:clipChildren := .T.
	oForm:create( ,,{100,100}, {640,480},, .F. )
	oForm:close  := {|| PostAppEvent( xbeP_Quit )}

	oGrid := XbpActiveXControl():new( oForm:drawingArea )
	oGrid:CLSID  := "Exontrol.Grid.1" /*{101EE60F-7B07-48B0-A13A-F32BAE7DA165}*/
	oGrid:create(,, {10,60},{610,370} )

		oGrid:BeginUpdate()
		oGrid:Columns():Add("Item"):DisplayFilterButton := .T.
		oColumn := oGrid:Columns():Add("Pos")
			oColumn:AllowSizing := .F.
			oColumn:AllowSort := .F.
			oColumn:Width := 32
			oColumn:FormatColumn := "1 apos ``"
			oColumn:Position := 0
		oItems := oGrid:Items()
			oItems:AddItem("Item A")
			oItems:AddItem("Item B")
			oItems:AddItem("Item C")
		oGrid:FilterBarPromptVisible := 1/*exFilterBarPromptVisible*/
		oGrid:SetProperty("Background",1/*exFooterFilterBarButton*/,AutomationTranslateColor( GraMakeRGBColor  ( { 255,0,0 } )  , .F. ))
		oGrid:EndUpdate()

	oForm:Show()
	DO WHILE nEvent != xbeP_Quit
		nEvent := AppEvent( @mp1, @mp2, @oXbp )
		oXbp:handleEvent( nEvent, mp1, mp2 )
	ENDDO 
RETURN
1045:
Is it possible to prevent definitely showing the filter bar's close button

#include "AppEvent.ch"
#include "ActiveX.ch"

PROCEDURE Main
 	LOCAL oForm
	LOCAL nEvent := 0, mp1 := NIL, mp2 := NIL, oXbp := NIL
	LOCAL oGrid
	LOCAL oColumn
	LOCAL oItems

	oForm := XbpDialog():new( AppDesktop() )
	oForm:drawingArea:clipChildren := .T.
	oForm:create( ,,{100,100}, {640,480},, .F. )
	oForm:close  := {|| PostAppEvent( xbeP_Quit )}

	oGrid := XbpActiveXControl():new( oForm:drawingArea )
	oGrid:CLSID  := "Exontrol.Grid.1" /*{101EE60F-7B07-48B0-A13A-F32BAE7DA165}*/
	oGrid:create(,, {10,60},{610,370} )

		oGrid:BeginUpdate()
		oGrid:Columns():Add("Item"):DisplayFilterButton := .T.
		oColumn := oGrid:Columns():Add("Pos")
			oColumn:AllowSizing := .F.
			oColumn:AllowSort := .F.
			oColumn:Width := 32
			oColumn:FormatColumn := "1 apos ``"
			oColumn:Position := 0
		oItems := oGrid:Items()
			oItems:AddItem("Item A")
			oItems:AddItem("Item B")
			oItems:AddItem("Item C")
		oGrid:FilterBarPromptVisible := 1/*exFilterBarPromptVisible*/
		oGrid:SetProperty("Background",1/*exFooterFilterBarButton*/,-1)
		oGrid:EndUpdate()

	oForm:Show()
	DO WHILE nEvent != xbeP_Quit
		nEvent := AppEvent( @mp1, @mp2, @oXbp )
		oXbp:handleEvent( nEvent, mp1, mp2 )
	ENDDO 
RETURN
1044:
Is it possible to show the close button only if there is a filter applied

#include "AppEvent.ch"
#include "ActiveX.ch"

PROCEDURE Main
 	LOCAL oForm
	LOCAL nEvent := 0, mp1 := NIL, mp2 := NIL, oXbp := NIL
	LOCAL oGrid
	LOCAL oColumn
	LOCAL oItems

	oForm := XbpDialog():new( AppDesktop() )
	oForm:drawingArea:clipChildren := .T.
	oForm:create( ,,{100,100}, {640,480},, .F. )
	oForm:close  := {|| PostAppEvent( xbeP_Quit )}

	oGrid := XbpActiveXControl():new( oForm:drawingArea )
	oGrid:CLSID  := "Exontrol.Grid.1" /*{101EE60F-7B07-48B0-A13A-F32BAE7DA165}*/
	oGrid:create(,, {10,60},{610,370} )

		oGrid:BeginUpdate()
		oGrid:Columns():Add("Item"):DisplayFilterButton := .T.
		oColumn := oGrid:Columns():Add("Pos")
			oColumn:AllowSizing := .F.
			oColumn:AllowSort := .F.
			oColumn:Width := 32
			oColumn:FormatColumn := "1 apos ``"
			oColumn:Position := 0
		oItems := oGrid:Items()
			oItems:AddItem("Item A")
			oItems:AddItem("Item B")
			oItems:AddItem("Item C")
		oGrid:FilterBarPromptVisible := 513/*exFilterBarShowCloseIfRequired+exFilterBarPromptVisible*/
		oGrid:EndUpdate()

	oForm:Show()
	DO WHILE nEvent != xbeP_Quit
		nEvent := AppEvent( @mp1, @mp2, @oXbp )
		oXbp:handleEvent( nEvent, mp1, mp2 )
	ENDDO 
RETURN
1043:
The control's filter bar is not closed once I click the close button (toggle)

#include "AppEvent.ch"
#include "ActiveX.ch"

PROCEDURE Main
 	LOCAL oForm
	LOCAL nEvent := 0, mp1 := NIL, mp2 := NIL, oXbp := NIL
	LOCAL oGrid
	LOCAL oColumn,oColumn1
	LOCAL oItems
	LOCAL h

	oForm := XbpDialog():new( AppDesktop() )
	oForm:drawingArea:clipChildren := .T.
	oForm:create( ,,{100,100}, {640,480},, .F. )
	oForm:close  := {|| PostAppEvent( xbeP_Quit )}

	oGrid := XbpActiveXControl():new( oForm:drawingArea )
	oGrid:CLSID  := "Exontrol.Grid.1" /*{101EE60F-7B07-48B0-A13A-F32BAE7DA165}*/
	oGrid:create(,, {10,60},{610,370} )

		oGrid:BeginUpdate()
		oGrid:Columns():Add("Item"):DisplayFilterButton := .T.
		oColumn := oGrid:Columns():Add("Pos")
			oColumn:AllowSizing := .F.
			oColumn:AllowSort := .F.
			oColumn:Width := 32
			oColumn:FormatColumn := "1 apos ``"
			oColumn:Position := 0
		oItems := oGrid:Items()
			oItems:AddItem("Item A")
			oItems:AddItem("Item B")
			oItems:AddItem("Item C")
			oItems:SetProperty("LockedItemCount",2/*exBottom*/,1)
			h := oItems:LockedItem(2/*exBottom*/,0)
			oItems:SetProperty("ItemDivider",h,0)
			oItems:SetProperty("CellValue",h,0,"<c><fgcolor=808080>Press the CTRL + F to turn on/off the control's filter bar. ALT + Up/Down moves the focus.")
			oItems:SetProperty("CellValueFormat",h,0,1/*exHTML*/)
		oGrid:FilterBarCaption := "`<r><fgcolor=808080>` + value"
		oGrid:FilterBarPromptPattern := "B"
		oGrid:FilterBarPromptVisible := 2323/*exFilterBarCompact+exFilterBarToggle+exFilterBarSingleLine+exFilterBarVisible+exFilterBarPromptVisible*/
		oColumn1 := oGrid:Columns:Item(0)
			oColumn1:FilterType := 240/*exFilter*/
			oColumn1:Filter := "Item B"
		oGrid:ApplyFilter()
		oGrid:EndUpdate()

	oForm:Show()
	DO WHILE nEvent != xbeP_Quit
		nEvent := AppEvent( @mp1, @mp2, @oXbp )
		oXbp:handleEvent( nEvent, mp1, mp2 )
	ENDDO 
RETURN
1042:
How can I display the control's filter on a single line

#include "AppEvent.ch"
#include "ActiveX.ch"

PROCEDURE Main
 	LOCAL oForm
	LOCAL nEvent := 0, mp1 := NIL, mp2 := NIL, oXbp := NIL
	LOCAL oGrid
	LOCAL oColumn,oColumn1
	LOCAL oItems

	oForm := XbpDialog():new( AppDesktop() )
	oForm:drawingArea:clipChildren := .T.
	oForm:create( ,,{100,100}, {640,480},, .F. )
	oForm:close  := {|| PostAppEvent( xbeP_Quit )}

	oGrid := XbpActiveXControl():new( oForm:drawingArea )
	oGrid:CLSID  := "Exontrol.Grid.1" /*{101EE60F-7B07-48B0-A13A-F32BAE7DA165}*/
	oGrid:create(,, {10,60},{610,370} )

		oGrid:BeginUpdate()
		oGrid:Columns():Add("Item"):DisplayFilterButton := .T.
		oColumn := oGrid:Columns():Add("Pos")
			oColumn:AllowSizing := .F.
			oColumn:AllowSort := .F.
			oColumn:Width := 32
			oColumn:FormatColumn := "1 apos ``"
			oColumn:Position := 0
		oItems := oGrid:Items()
			oItems:AddItem("Item A")
			oItems:AddItem("Item B")
			oItems:AddItem("Item C")
		oGrid:FilterBarCaption := "len(value) ? `filter for: <fgcolor 808080>` + value  : `<fgcolor 808080>no filter`"
		oGrid:FilterBarPromptVisible := 18/*exFilterBarSingleLine+exFilterBarVisible*/
		oColumn1 := oGrid:Columns:Item(0)
			oColumn1:FilterType := 240/*exFilter*/
			oColumn1:Filter := "Item A|Item B"
		oGrid:ApplyFilter()
		oGrid:EndUpdate()

	oForm:Show()
	DO WHILE nEvent != xbeP_Quit
		nEvent := AppEvent( @mp1, @mp2, @oXbp )
		oXbp:handleEvent( nEvent, mp1, mp2 )
	ENDDO 
RETURN
1041:
How can I display the control's filter on a single line (prompt-combined)

#include "AppEvent.ch"
#include "ActiveX.ch"

PROCEDURE Main
 	LOCAL oForm
	LOCAL nEvent := 0, mp1 := NIL, mp2 := NIL, oXbp := NIL
	LOCAL oGrid
	LOCAL oColumn,oColumn1
	LOCAL oItems

	oForm := XbpDialog():new( AppDesktop() )
	oForm:drawingArea:clipChildren := .T.
	oForm:create( ,,{100,100}, {640,480},, .F. )
	oForm:close  := {|| PostAppEvent( xbeP_Quit )}

	oGrid := XbpActiveXControl():new( oForm:drawingArea )
	oGrid:CLSID  := "Exontrol.Grid.1" /*{101EE60F-7B07-48B0-A13A-F32BAE7DA165}*/
	oGrid:create(,, {10,60},{610,370} )

		oGrid:BeginUpdate()
		oGrid:Columns():Add("Item"):DisplayFilterButton := .T.
		oColumn := oGrid:Columns():Add("Pos")
			oColumn:AllowSizing := .F.
			oColumn:AllowSort := .F.
			oColumn:Width := 32
			oColumn:FormatColumn := "1 apos ``"
			oColumn:Position := 0
		oItems := oGrid:Items()
			oItems:AddItem("Item A")
			oItems:AddItem("Item B")
			oItems:AddItem("Item C")
		oGrid:FilterBarCaption := "`<r>` + value"
		oGrid:FilterBarPromptVisible := 2067/*exFilterBarCompact+exFilterBarSingleLine+exFilterBarVisible+exFilterBarPromptVisible*/
		oColumn1 := oGrid:Columns:Item(0)
			oColumn1:FilterType := 240/*exFilter*/
			oColumn1:Filter := "Item A|Item B"
		oGrid:ApplyFilter()
		oGrid:EndUpdate()

	oForm:Show()
	DO WHILE nEvent != xbeP_Quit
		nEvent := AppEvent( @mp1, @mp2, @oXbp )
		oXbp:handleEvent( nEvent, mp1, mp2 )
	ENDDO 
RETURN
1040:
How can I get the number of results after a filter is applied

PROCEDURE OnClick(oGrid)
	oGrid:ClearFilter()
RETURN

PROCEDURE OnFilterChange(oGrid)
	DevOut( "Items.MatchItemCount" )
	DevOut( Transform(oGrid:Items:MatchItemCount(),"") )
	DevOut( Transform(oGrid:FormatABC("value < 0 ? `filter applied: ` + abs(value + 1) + ` result(s)` : `no filter`",oGrid:Items:MatchItemCount()),"") )
RETURN

#include "AppEvent.ch"
#include "ActiveX.ch"

PROCEDURE Main
 	LOCAL oForm
	LOCAL nEvent := 0, mp1 := NIL, mp2 := NIL, oXbp := NIL
	LOCAL oGrid
	LOCAL oColumn
	LOCAL oItems

	oForm := XbpDialog():new( AppDesktop() )
	oForm:drawingArea:clipChildren := .T.
	oForm:create( ,,{100,100}, {640,480},, .F. )
	oForm:close  := {|| PostAppEvent( xbeP_Quit )}

	oGrid := XbpActiveXControl():new( oForm:drawingArea )
	oGrid:CLSID  := "Exontrol.Grid.1" /*{101EE60F-7B07-48B0-A13A-F32BAE7DA165}*/
	oGrid:create(,, {10,60},{610,370} )

		oGrid:Click := {|| OnClick(oGrid)} /*Occurs when the user presses and then releases the left mouse button over the grid control.*/
		oGrid:FilterChange := {|| OnFilterChange(oGrid)} /*Occurs when filter was changed.*/

		oGrid:BeginUpdate()
		oGrid:Columns():Add("Item"):DisplayFilterButton := .T.
		oColumn := oGrid:Columns():Add("Pos")
			oColumn:AllowSizing := .F.
			oColumn:AllowSort := .F.
			oColumn:Width := 32
			oColumn:FormatColumn := "1 apos ``"
			oColumn:Position := 0
		oItems := oGrid:Items()
			oItems:AddItem("Item A")
			oItems:AddItem("Item B")
			oItems:AddItem("Item C")
		oGrid:FilterBarPromptVisible := 1/*exFilterBarPromptVisible*/
		oGrid:FilterBarPromptPattern := "Item"
		oGrid:EndUpdate()

	oForm:Show()
	DO WHILE nEvent != xbeP_Quit
		nEvent := AppEvent( @mp1, @mp2, @oXbp )
		oXbp:handleEvent( nEvent, mp1, mp2 )
	ENDDO 
RETURN
1039:
How can I programmatically clear the control's filter
PROCEDURE OnClick(oGrid)
	oGrid:ClearFilter()
RETURN

#include "AppEvent.ch"
#include "ActiveX.ch"

PROCEDURE Main
 	LOCAL oForm
	LOCAL nEvent := 0, mp1 := NIL, mp2 := NIL, oXbp := NIL
	LOCAL oGrid
	LOCAL oColumn
	LOCAL oItems

	oForm := XbpDialog():new( AppDesktop() )
	oForm:drawingArea:clipChildren := .T.
	oForm:create( ,,{100,100}, {640,480},, .F. )
	oForm:close  := {|| PostAppEvent( xbeP_Quit )}

	oGrid := XbpActiveXControl():new( oForm:drawingArea )
	oGrid:CLSID  := "Exontrol.Grid.1" /*{101EE60F-7B07-48B0-A13A-F32BAE7DA165}*/
	oGrid:create(,, {10,60},{610,370} )

		oGrid:Click := {|| OnClick(oGrid)} /*Occurs when the user presses and then releases the left mouse button over the grid control.*/

		oGrid:BeginUpdate()
		oGrid:Columns():Add("Item"):DisplayFilterButton := .T.
		oColumn := oGrid:Columns():Add("Pos")
			oColumn:AllowSizing := .F.
			oColumn:AllowSort := .F.
			oColumn:Width := 32
			oColumn:FormatColumn := "1 apos ``"
			oColumn:Position := 0
		oItems := oGrid:Items()
			oItems:AddItem("Item A")
			oItems:AddItem("Item B")
			oItems:AddItem("Item C")
		oGrid:FilterBarPromptVisible := 1/*exFilterBarPromptVisible*/
		oGrid:FilterBarPromptPattern := "B"
		oGrid:EndUpdate()

	oForm:Show()
	DO WHILE nEvent != xbeP_Quit
		nEvent := AppEvent( @mp1, @mp2, @oXbp )
		oXbp:handleEvent( nEvent, mp1, mp2 )
	ENDDO 
RETURN
1038:
Is it possible to prevent closing the control's filter bar, so it is always shown (prompt-combined)

#include "AppEvent.ch"
#include "ActiveX.ch"

PROCEDURE Main
 	LOCAL oForm
	LOCAL nEvent := 0, mp1 := NIL, mp2 := NIL, oXbp := NIL
	LOCAL oGrid
	LOCAL oColumn,oColumn1
	LOCAL oItems

	oForm := XbpDialog():new( AppDesktop() )
	oForm:drawingArea:clipChildren := .T.
	oForm:create( ,,{100,100}, {640,480},, .F. )
	oForm:close  := {|| PostAppEvent( xbeP_Quit )}

	oGrid := XbpActiveXControl():new( oForm:drawingArea )
	oGrid:CLSID  := "Exontrol.Grid.1" /*{101EE60F-7B07-48B0-A13A-F32BAE7DA165}*/
	oGrid:create(,, {10,60},{610,370} )

		oGrid:BeginUpdate()
		oGrid:Columns():Add("Item"):DisplayFilterButton := .T.
		oColumn := oGrid:Columns():Add("Pos")
			oColumn:AllowSizing := .F.
			oColumn:AllowSort := .F.
			oColumn:Width := 32
			oColumn:FormatColumn := "1 apos ``"
			oColumn:Position := 0
		oItems := oGrid:Items()
			oItems:AddItem("Item A")
			oItems:AddItem("Item B")
			oItems:AddItem("Item C")
		oGrid:FilterBarPromptPattern := "B"
		oGrid:FilterBarPromptVisible := 3/*exFilterBarVisible+exFilterBarPromptVisible*/
		oColumn1 := oGrid:Columns:Item(0)
			oColumn1:FilterType := 240/*exFilter*/
			oColumn1:Filter := "Item B"
		oGrid:ApplyFilter()
		oGrid:EndUpdate()

	oForm:Show()
	DO WHILE nEvent != xbeP_Quit
		nEvent := AppEvent( @mp1, @mp2, @oXbp )
		oXbp:handleEvent( nEvent, mp1, mp2 )
	ENDDO 
RETURN
1037:
Is it possible to prevent closing the control's filter bar, so it is always shown (prompt)

#include "AppEvent.ch"
#include "ActiveX.ch"

PROCEDURE Main
 	LOCAL oForm
	LOCAL nEvent := 0, mp1 := NIL, mp2 := NIL, oXbp := NIL
	LOCAL oGrid
	LOCAL oColumn
	LOCAL oItems

	oForm := XbpDialog():new( AppDesktop() )
	oForm:drawingArea:clipChildren := .T.
	oForm:create( ,,{100,100}, {640,480},, .F. )
	oForm:close  := {|| PostAppEvent( xbeP_Quit )}

	oGrid := XbpActiveXControl():new( oForm:drawingArea )
	oGrid:CLSID  := "Exontrol.Grid.1" /*{101EE60F-7B07-48B0-A13A-F32BAE7DA165}*/
	oGrid:create(,, {10,60},{610,370} )

		oGrid:BeginUpdate()
		oGrid:Columns():Add("Item"):DisplayFilterButton := .T.
		oColumn := oGrid:Columns():Add("Pos")
			oColumn:AllowSizing := .F.
			oColumn:AllowSort := .F.
			oColumn:Width := 32
			oColumn:FormatColumn := "1 apos ``"
			oColumn:Position := 0
		oItems := oGrid:Items()
			oItems:AddItem("Item A")
			oItems:AddItem("Item B")
			oItems:AddItem("Item C")
		oGrid:FilterBarPromptVisible := 1/*exFilterBarPromptVisible*/
		oGrid:FilterBarPromptPattern := "B"
		oGrid:EndUpdate()

	oForm:Show()
	DO WHILE nEvent != xbeP_Quit
		nEvent := AppEvent( @mp1, @mp2, @oXbp )
		oXbp:handleEvent( nEvent, mp1, mp2 )
	ENDDO 
RETURN
1036:
Is it possible to prevent closing the control's filter bar, so it is always shown

#include "AppEvent.ch"
#include "ActiveX.ch"

PROCEDURE Main
 	LOCAL oForm
	LOCAL nEvent := 0, mp1 := NIL, mp2 := NIL, oXbp := NIL
	LOCAL oGrid
	LOCAL oColumn,oColumn1
	LOCAL oItems

	oForm := XbpDialog():new( AppDesktop() )
	oForm:drawingArea:clipChildren := .T.
	oForm:create( ,,{100,100}, {640,480},, .F. )
	oForm:close  := {|| PostAppEvent( xbeP_Quit )}

	oGrid := XbpActiveXControl():new( oForm:drawingArea )
	oGrid:CLSID  := "Exontrol.Grid.1" /*{101EE60F-7B07-48B0-A13A-F32BAE7DA165}*/
	oGrid:create(,, {10,60},{610,370} )

		oGrid:BeginUpdate()
		oGrid:Columns():Add("Item"):DisplayFilterButton := .T.
		oColumn := oGrid:Columns():Add("Pos")
			oColumn:AllowSizing := .F.
			oColumn:AllowSort := .F.
			oColumn:Width := 32
			oColumn:FormatColumn := "1 apos ``"
			oColumn:Position := 0
		oItems := oGrid:Items()
			oItems:AddItem("Item A")
			oItems:AddItem("Item B")
			oItems:AddItem("Item C")
		oGrid:FilterBarCaption := "len(value) = 0 ? `<fgcolor=808080>no filter` : value"
		oGrid:FilterBarPromptVisible := 2/*exFilterBarVisible*/
		oColumn1 := oGrid:Columns:Item(0)
			oColumn1:FilterType := 240/*exFilter*/
			oColumn1:Filter := "Item B"
		oGrid:ApplyFilter()
		oGrid:EndUpdate()

	oForm:Show()
	DO WHILE nEvent != xbeP_Quit
		nEvent := AppEvent( @mp1, @mp2, @oXbp )
		oXbp:handleEvent( nEvent, mp1, mp2 )
	ENDDO 
RETURN
1035:
How can I change the visual appearance of the +/- buttons, open/close glyphs as current visual theme (method 4)

#include "AppEvent.ch"
#include "ActiveX.ch"

PROCEDURE Main
 	LOCAL oForm
	LOCAL nEvent := 0, mp1 := NIL, mp2 := NIL, oXbp := NIL
	LOCAL oGrid
	LOCAL oItems
	LOCAL h

	oForm := XbpDialog():new( AppDesktop() )
	oForm:drawingArea:clipChildren := .T.
	oForm:create( ,,{100,100}, {640,480},, .F. )
	oForm:close  := {|| PostAppEvent( xbeP_Quit )}

	oGrid := XbpActiveXControl():new( oForm:drawingArea )
	oGrid:CLSID  := "Exontrol.Grid.1" /*{101EE60F-7B07-48B0-A13A-F32BAE7DA165}*/
	oGrid:create(,, {10,60},{610,370} )

		oGrid:BeginUpdate()
		oGrid:LinesAtRoot := -1/*exLinesAtRoot*/
		oGrid:VisualDesign := "gBFLBWIgBAEHhEJAEGg6VAkHeLpgwChAOhULB8XAUUg8MAAREEHGMcgRCJ0ei8dhABDEcQAAYAQGKIYBkAKBQAGaAoDDMOQwQwAAxjGKEEwsACEIrjKCRShyCYZRhGcTSBCIZBqEqSZLiEZRQiiCYsS5GQBRWAkEwiBiEQTjea5CgOIAFS7LIqjRQEBxhIaZYIGaiQADENo9TxIMZAfBIHShK6NJABCCSQKkYx0HScRijDIEFwGIQmbKiej4DCiCQQW7OYYRVCNMQSfa8HivJyrcamfp/YBgOBYHb1eLVPR5LwfPCGUw1P6PLxkORZHimK4tSLHV7xVpMIwZFafIQhCCoHomS5NU7UNR0TQUFx9FaGX7rDDsGwLAJ6XRgF4bg2VpnHePpenAN4bH2GwHFmApSjEGBLnWOpRGOTBZHOegrE6BxPiWVJqCweQrn0LgJAWJBjwgaw1gKO5HmWch5h+fovF+G5bmich4BgfZkB8dynRUVYqiUR5rnmex/F6" +;
		"N4tn2AJfnebZ3DEXw3HWXgzAyIwgicKJKBKEIhCeCgiHyHYFEmSAFmqBghFIdgSCeIJygYDAyAgJx6AoIINAMOJNCgCZCGoGoLmMCI+CwJoihMNglCCIhzFCUg0EmMhghWDBkAiQg9CUY4jEYN4Jk2IxklYJoJHIUg+CSZJSESFwkkkGI+FOFIJEIRhPhMCRJCSVoRrSBhiDgTZjHYT4PEkYhwhgJYm0SaIaiaSYuE+GQNlmCIBGCJxjhiZQ5AkMhAg6ExJCkPhPguaAiFYUAlAkKZ0g6HoOEmWR/GHcA4m0OwIlIJIHCRgQshGJhpjoaocieaZiC6GAimkUgehIOwnGYGYIGkah6jaE4rg6SpCjKK5rEOMYlGIGIihKOggloFoqj6L5aGaBo6CkGIkAQjiPpCAAaJILCTJQlKPACDaXJgmSaJsnCdJ4nygKEoijKQpSmKcqCpKoqysK0rivLAsSyLMtC1LYty4Lkui7LwvS+L8wDBMIwzEMUxjHMgyT" +;
		"KMszDNM4zzQNE0jTNQ1TWNc2DZNo2zcN03jfOA4TiOM5DlOY5zoOk6jrOw7TuO88DxPI8z0PU9j3Pg+T6Ps/D9P4/0AQFAkDQRBUGQdCEJQpC0MQ1DkPRBEUSRNFEVBhFkXRhGQ9D6Dxfh+W5gGGd4QH2XQjCmDpFFaKoVB+D5Xmed5+H8YAHnIAh9EwV5Fl0d4MkMKJICmSgygSJAoEmMUCIPgnDCCIOQFYCxJjwFoCcA4kxoF+AIJkAgExegDEgEYQInAzCUAIOEGgfxiiRDYF1Q4EQ2BSCaEQYwbAiKREMpRSymFNDIAkAxT6oVRgSA2qdVKq1WqvVirMZQUhSCnBUMoIgoQRgnGSIQUgkg1hIHYAkAYMROAmHiLsE4xxSCxBwEwCQ0wmDdBsE0GYXBtg2CSPMFIuwYiQBYBQeAcwOCnBCCZgw0g0glBONAQgqQThCGgPQGoBQfiRGmOEZIPAXjsBoPAO4HRThhA0EQSA5BAgaCKJIGg3QdhOCmNU" +;
		"BoQAijTCIF0FwQxpCHDIPAYYMQGgtCmFcaQtRAjZCyFYSojQ2B2BoKwIYFApBXEIBsIQ1QsAWAWEwaA1xCgjAoIAQBAQ="
		oGrid:Columns():Add("Column")
		oItems := oGrid:Items()
			h := oItems:AddItem("Root 1")
			oItems:InsertItem(h,,"Child 1")
			oItems:InsertItem(h,,"Child 2")
			oItems:SetProperty("ExpandItem",h,.T.)
			h := oItems:AddItem("Root 2")
			oItems:InsertItem(h,,"Child")
		oGrid:EndUpdate()

	oForm:Show()
	DO WHILE nEvent != xbeP_Quit
		nEvent := AppEvent( @mp1, @mp2, @oXbp )
		oXbp:handleEvent( nEvent, mp1, mp2 )
	ENDDO 
RETURN
1034:
How can I change the visual appearance of the +/- buttons, open/close glyphs as current visual theme (method 3)

#include "AppEvent.ch"
#include "ActiveX.ch"

PROCEDURE Main
 	LOCAL oForm
	LOCAL nEvent := 0, mp1 := NIL, mp2 := NIL, oXbp := NIL
	LOCAL oGrid
	LOCAL oAppearance
	LOCAL oItems
	LOCAL h

	oForm := XbpDialog():new( AppDesktop() )
	oForm:drawingArea:clipChildren := .T.
	oForm:create( ,,{100,100}, {640,480},, .F. )
	oForm:close  := {|| PostAppEvent( xbeP_Quit )}

	oGrid := XbpActiveXControl():new( oForm:drawingArea )
	oGrid:CLSID  := "Exontrol.Grid.1" /*{101EE60F-7B07-48B0-A13A-F32BAE7DA165}*/
	oGrid:create(,, {10,60},{610,370} )

		oGrid:BeginUpdate()
		oAppearance := oGrid:VisualAppearance()
			oAppearance:Add(3,"gBFLBCJwBAEHhEJAAEhABDwCg6AADACAxRDgMQBQKAAzAJBIYhiG4cYCgMZhXDOCYXABCEYRXBIZQ7BKNIxjSJ5BhIAAyDSJMjSRJUEhqGCWYDleYYYAKHIMQLJQKQSBcQR9EaBZBAWTpQC0OJDTJRI4TNAgbSYAAYRqoCb6loTKypaxjCQQIgkUBpGKdBynEYsDwSGyJCCJWyIbpKAwoVbcs4AYhuJpaQi+d5PFbjVT8dLAMBwLA8EwXAJ+OpfDxXU7eFKpR5fchXTI8UxXFqXZhkeQrfh7KYVRBKdBQRBEFQPJqnahqOpaXo2RoLUJKcQwHTmHYNQTALyuTALZrWeZ3XrgN74LbtZzVQauYRpbCMEr6bpoWLnFi6Ho1U4llWah1jqSweFqfxPgQQRphi+Yak0YIuqUfJegef4zluaJ3nqPJeCYH4BAeX5TDLBpVGqKRRnwf4flefZtHsX54BYAR/F+EwVnUd5eAMMJKDIChygyIQpAoEh4iIJ5Jlg" +;
		"XIcgCXpIGoFwnGEQh6BEKBgmMIICHgIJCAiUAzgyUoAhwJohkiRgygwYpiGoKwzGIcgKCkNQNCMRIbCYCRYk4QoMiOchWDwNBjhiJJaDYTRiGiFwlCQAhOE8JBJHITIRgwZRZFCFCZBkOIUhKTRpCWAwgGYQ4El4NxlBifIWCcCYCFoaoMGaKYyG6GxlBmGJdhkCAWBIeA5g4U4QhMJAImkPIShRVxGgQJRlCIUISh+SJpnCZIeBgFgiHgO4OlOMINCISByECDQikkGhuh2JwpmqBogCKaYiC6FwhmkQ4yHgYgYiaHopiuaRakCbIsisSpGjYOwaHYKYMCkK5CA2IxrCwCwFigaJrkLTI6lcdANAEgIA=")
			oAppearance:Add(1,"CP:3 -2 -2 2 2")
			oAppearance:Add(4,"gBFLBCJwBAEHhEJAAEhABEICg6AADACAxRDgMQBQKAAzAJBIYhiG4cYCgMZhXDOCYXABCEYRXBIZQ7BKNIxjSJ5BhIAAyDSJMjSRJUEhqGCWYDleYYYAKHIMQLJQKQSBcQR9EaBZBAWTpQC0OJDTJRI4TNAgbSYAAYRqoCb6loTKypaxjCQQIgkUBpGKdBynEYsDwSGyJCCJWyIbpKAwoVbcs4AYhuJpaQi+d5PFbjVT8dLAMBwLA8EwXAJ+OpfDxXU7eFKpR5fchXTI8UxXFqXZhkeQrfh7KYVRBKdBQRBEFQPJqnahqOpaXo2RoLUJKcQwHTmHYNQTALyuTALZrWeZ3XrgN74LbtZzVQauYRpbCMEr6bpoWLnFi6Ho1U4llWah1jqSweFqfxPgQQRphi+Yak0YIuqUfJeg8X4rluaZ3niGB+AQHx/EyShjjEVYqiUR5rnmex/GAB5+AIf4gEeXJFHyXZ3gCTAygyAociMKBKEKBIeCiCZyHYFAnCE" +;
		"eBkh+BghFgRIegOCgYCySAgh4CAkgINAMmMNIgCcCYjn4LoLmMCJGDKC5ijIagoDMYhCAoJg1A0IxEhsJgJFiThChCY5yFYPA0GOGIYloNhNGIaIXCUJACE4TwkEkchOFSFYlFkXhUCUCQZEYTglCSMxaEkYJIBmFJhDeDZZEYPwlgmQhghaGqVDoa4bGaeY6FGGZNlmFIBGEJ4jhiZQ5AkMhAg6E5JCkRoGCUSQ6B6CYiSCBIOh+DhJmmARiWQOJtDsCJSCSBwkXSLIRicaZ6HqIIomoIguhwIpphIHoWDsJ4mCGChpmqOpGheLIOkqUo2iya4DjGJxihiQoSj4IJaDaMpCjCWoGg6PgpBiQ4tHcQJQBAgI=")
			oAppearance:Add(2,"CP:4 -2 -2 2 2")
		oGrid:LinesAtRoot := 1/*exGroupLinesAtRoot*/
		oGrid:HasButtons := 4/*exCustom*/
		oGrid:SetProperty("HasButtonsCustom",.F.,16777216)
		oGrid:SetProperty("HasButtonsCustom",.T.,33554432)
		oGrid:Columns():Add("Column")
		oItems := oGrid:Items()
			h := oItems:AddItem("Root 1")
			oItems:InsertItem(h,,"Child 1")
			oItems:InsertItem(h,,"Child 2")
			oItems:SetProperty("ExpandItem",h,.T.)
			h := oItems:AddItem("Root 2")
			oItems:InsertItem(h,,"Child")
		oGrid:EndUpdate()

	oForm:Show()
	DO WHILE nEvent != xbeP_Quit
		nEvent := AppEvent( @mp1, @mp2, @oXbp )
		oXbp:handleEvent( nEvent, mp1, mp2 )
	ENDDO 
RETURN
1033:
How can I change the visual appearance of the +/- buttons, open/close glyphs as current visual theme (method 2)

#include "AppEvent.ch"
#include "ActiveX.ch"

PROCEDURE Main
 	LOCAL oForm
	LOCAL nEvent := 0, mp1 := NIL, mp2 := NIL, oXbp := NIL
	LOCAL oGrid
	LOCAL oAppearance
	LOCAL oItems
	LOCAL h

	oForm := XbpDialog():new( AppDesktop() )
	oForm:drawingArea:clipChildren := .T.
	oForm:create( ,,{100,100}, {640,480},, .F. )
	oForm:close  := {|| PostAppEvent( xbeP_Quit )}

	oGrid := XbpActiveXControl():new( oForm:drawingArea )
	oGrid:CLSID  := "Exontrol.Grid.1" /*{101EE60F-7B07-48B0-A13A-F32BAE7DA165}*/
	oGrid:create(,, {10,60},{610,370} )

		oGrid:BeginUpdate()
		oAppearance := oGrid:VisualAppearance()
			oAppearance:Add(1,"XP:TREEVIEW 2 1")
			oAppearance:Add(2,"XP:TREEVIEW 2 2")
		oGrid:SetProperty("Background",180/*exTreeGlyphOpen*/,0x1000000)
		oGrid:SetProperty("Background",181/*exTreeGlyphClose*/,0x2000000)
		oGrid:LinesAtRoot := -1/*exLinesAtRoot*/
		oGrid:Columns():Add("Column")
		oItems := oGrid:Items()
			h := oItems:AddItem("Root 1")
			oItems:InsertItem(h,,"Child 1")
			oItems:InsertItem(h,,"Child 2")
			oItems:SetProperty("ExpandItem",h,.T.)
			h := oItems:AddItem("Root 2")
			oItems:InsertItem(h,,"Child")
		oGrid:EndUpdate()

	oForm:Show()
	DO WHILE nEvent != xbeP_Quit
		nEvent := AppEvent( @mp1, @mp2, @oXbp )
		oXbp:handleEvent( nEvent, mp1, mp2 )
	ENDDO 
RETURN
1032:
How can I find if the control is running in DPI mode
#include "AppEvent.ch"
#include "ActiveX.ch"

PROCEDURE Main
 	LOCAL oForm
	LOCAL nEvent := 0, mp1 := NIL, mp2 := NIL, oXbp := NIL
	LOCAL oGrid

	oForm := XbpDialog():new( AppDesktop() )
	oForm:drawingArea:clipChildren := .T.
	oForm:create( ,,{100,100}, {640,480},, .F. )
	oForm:close  := {|| PostAppEvent( xbeP_Quit )}

	oGrid := XbpActiveXControl():new( oForm:drawingArea )
	oGrid:CLSID  := "Exontrol.Grid.1" /*{101EE60F-7B07-48B0-A13A-F32BAE7DA165}*/
	oGrid:create(,, {10,60},{610,370} )

		DevOut( Transform(oGrid:FormatABC("dpi = 1 ? `normal/stretch mode` : `dpi mode`"),"") )

	oForm:Show()
	DO WHILE nEvent != xbeP_Quit
		nEvent := AppEvent( @mp1, @mp2, @oXbp )
		oXbp:handleEvent( nEvent, mp1, mp2 )
	ENDDO 
RETURN
1031:
How can I change the visual appearance of the +/- buttons (method 1)

#include "AppEvent.ch"
#include "ActiveX.ch"

PROCEDURE Main
 	LOCAL oForm
	LOCAL nEvent := 0, mp1 := NIL, mp2 := NIL, oXbp := NIL
	LOCAL oGrid
	LOCAL oAppearance
	LOCAL oItems
	LOCAL h

	oForm := XbpDialog():new( AppDesktop() )
	oForm:drawingArea:clipChildren := .T.
	oForm:create( ,,{100,100}, {640,480},, .F. )
	oForm:close  := {|| PostAppEvent( xbeP_Quit )}

	oGrid := XbpActiveXControl():new( oForm:drawingArea )
	oGrid:CLSID  := "Exontrol.Grid.1" /*{101EE60F-7B07-48B0-A13A-F32BAE7DA165}*/
	oGrid:create(,, {10,60},{610,370} )

		oGrid:BeginUpdate()
		oAppearance := oGrid:VisualAppearance()
			oAppearance:Add(1,"gBFLBCJwBAEHhEJAAEhABDwCg6AADACAxRDgMQBQKAAzAJBIYhiG4cYCgMZhXDOCYXABCEYRXBIZQ7BKNIxjSJ5BhIAAyDSJMjSRJUEhqGCWYDleYYYAKHIMQLJQKQSBcQR9EaBZBAWTpQC0OJDTJRI4TNAgbSYAAYRqoCb6loTKypaxjCQQIgkUBpGKdBynEYsDwSGyJCCJWyIbpKAwoVbcs4AYhuJpaQi+d5PFbjVT8dLAMBwLA8EwXAJ+OpfDxXU7eFKpR5fchXTI8UxXFqXZhkeQrfh7KYVRBKdBQRBEFQPJqnahqOpaXo2RoLUJKcQwHTmHYNQTALyuTALZrWeZ3XrgN74LbtZzVQauYRpbCMEr6bpoWLnFi6Ho1U4llWah1jqSweFqfxPgQQRphi+Yak0YIuqUfJegef4zluaJ3nqPJeCYH4BAeX5TDLBpVGqKRRnwf4flefZtHsX54BYAR/F+EwVnUd5eAMMJKDIChygyIQpAoEh4iIJ5Jlg" +;
		"XIcgCXpIGoFwnGEQh6BEKBgmMIICHgIJCAiUAzgyUoAhwJohkiRgygwYpiGoKwzGIcgKCkNQNCMRIbCYCRYk4QoMiOchWDwNBjhiJJaDYTRiGiFwlCQAhOE8JBJHITIRgwZRZFCFCZBkOIUhKTRpCWAwgGYQ4El4NxlBifIWCcCYCFoaoMGaKYyG6GxlBmGJdhkCAWBIeA5g4U4QhMJAImkPIShRVxGgQJRlCIUISh+SJpnCZIeBgFgiHgO4OlOMINCISByECDQikkGhuh2JwpmqBogCKaYiC6FwhmkQ4yHgYgYiaHopiuaRakCbIsisSpGjYOwaHYKYMCkK5CA2IxrCwCwFigaJrkLTI6lcdANAEgIA=")
			oAppearance:Add(2,"gBFLBCJwBAEHhEJAAEhABEICg6AADACAxRDgMQBQKAAzAJBIYhiG4cYCgMZhXDOCYXABCEYRXBIZQ7BKNIxjSJ5BhIAAyDSJMjSRJUEhqGCWYDleYYYAKHIMQLJQKQSBcQR9EaBZBAWTpQC0OJDTJRI4TNAgbSYAAYRqoCb6loTKypaxjCQQIgkUBpGKdBynEYsDwSGyJCCJWyIbpKAwoVbcs4AYhuJpaQi+d5PFbjVT8dLAMBwLA8EwXAJ+OpfDxXU7eFKpR5fchXTI8UxXFqXZhkeQrfh7KYVRBKdBQRBEFQPJqnahqOpaXo2RoLUJKcQwHTmHYNQTALyuTALZrWeZ3XrgN74LbtZzVQauYRpbCMEr6bpoWLnFi6Ho1U4llWah1jqSweFqfxPgQQRphi+Yak0YIuqUfJeg8X4rluaZ3niGB+AQHx/EyShjjEVYqiUR5rnmex/GAB5+AIf4gEeXJFHyXZ3gCTAygyAociMKBKEKBIeCiCZyHYFAnCE" +;
		"eBkh+BghFgRIegOCgYCySAgh4CAkgINAMmMNIgCcCYjn4LoLmMCJGDKC5ijIagoDMYhCAoJg1A0IxEhsJgJFiThChCY5yFYPA0GOGIYloNhNGIaIXCUJACE4TwkEkchOFSFYlFkXhUCUCQZEYTglCSMxaEkYJIBmFJhDeDZZEYPwlgmQhghaGqVDoa4bGaeY6FGGZNlmFIBGEJ4jhiZQ5AkMhAg6E5JCkRoGCUSQ6B6CYiSCBIOh+DhJmmARiWQOJtDsCJSCSBwkXSLIRicaZ6HqIIomoIguhwIpphIHoWDsJ4mCGChpmqOpGheLIOkqUo2iya4DjGJxihiQoSj4IJaDaMpCjCWoGg6PgpBiQ4tHcQJQBAgI=")
		oGrid:LinesAtRoot := -1/*exLinesAtRoot*/
		oGrid:SetProperty("Background",180/*exTreeGlyphOpen*/,0x1000000)
		oGrid:SetProperty("Background",181/*exTreeGlyphClose*/,0x2000000)
		oGrid:Columns():Add("Column")
		oItems := oGrid:Items()
			h := oItems:AddItem("Root 1")
			oItems:InsertItem(h,,"Child 1")
			oItems:InsertItem(h,,"Child 2")
			oItems:SetProperty("ExpandItem",h,.T.)
			h := oItems:AddItem("Root 2")
			oItems:InsertItem(h,,"Child")
		oGrid:EndUpdate()

	oForm:Show()
	DO WHILE nEvent != xbeP_Quit
		nEvent := AppEvent( @mp1, @mp2, @oXbp )
		oXbp:handleEvent( nEvent, mp1, mp2 )
	ENDDO 
RETURN
1030:
I am using single selection, the question is if possible to select an item only when the user releases the mouse, as currently it selects the item as soon as the user clicks it
PROCEDURE OnSelectionChanged(oGrid)
	DevOut( "SelectionChanged" )
RETURN

#include "AppEvent.ch"
#include "ActiveX.ch"

PROCEDURE Main
 	LOCAL oForm
	LOCAL nEvent := 0, mp1 := NIL, mp2 := NIL, oXbp := NIL
	LOCAL oGrid
	LOCAL oItems

	oForm := XbpDialog():new( AppDesktop() )
	oForm:drawingArea:clipChildren := .T.
	oForm:create( ,,{100,100}, {640,480},, .F. )
	oForm:close  := {|| PostAppEvent( xbeP_Quit )}

	oGrid := XbpActiveXControl():new( oForm:drawingArea )
	oGrid:CLSID  := "Exontrol.Grid.1" /*{101EE60F-7B07-48B0-A13A-F32BAE7DA165}*/
	oGrid:create(,, {10,60},{610,370} )

		oGrid:SelectionChanged := {|| OnSelectionChanged(oGrid)} /*Fired after a new item has been selected.*/

		oGrid:BeginUpdate()
		oGrid:FreezeEvents(.T.)
		oGrid:SingleSel := .T.
		oGrid:SelectOnRelease := .T.
		oGrid:Columns():Add("Column"):FormatColumn := "1 apos `A-Z`"
		oItems := oGrid:Items()
			oItems:AddItem("")
			oItems:SetProperty("SelectItem",oItems:AddItem(""),.T.)
			oItems:AddItem("")
		oGrid:FreezeEvents(.F.)
		oGrid:EndUpdate()

	oForm:Show()
	DO WHILE nEvent != xbeP_Quit
		nEvent := AppEvent( @mp1, @mp2, @oXbp )
		oXbp:handleEvent( nEvent, mp1, mp2 )
	ENDDO 
RETURN
1029:
Is it possible to select nothing
PROCEDURE OnSelectionChanged(oGrid)
	DevOut( "SelectionChanged" )
RETURN

#include "AppEvent.ch"
#include "ActiveX.ch"

PROCEDURE Main
 	LOCAL oForm
	LOCAL nEvent := 0, mp1 := NIL, mp2 := NIL, oXbp := NIL
	LOCAL oGrid
	LOCAL oItems

	oForm := XbpDialog():new( AppDesktop() )
	oForm:drawingArea:clipChildren := .T.
	oForm:create( ,,{100,100}, {640,480},, .F. )
	oForm:close  := {|| PostAppEvent( xbeP_Quit )}

	oGrid := XbpActiveXControl():new( oForm:drawingArea )
	oGrid:CLSID  := "Exontrol.Grid.1" /*{101EE60F-7B07-48B0-A13A-F32BAE7DA165}*/
	oGrid:create(,, {10,60},{610,370} )

		oGrid:SelectionChanged := {|| OnSelectionChanged(oGrid)} /*Fired after a new item has been selected.*/

		oGrid:BeginUpdate()
		oGrid:FreezeEvents(.T.)
		oGrid:AllowSelectNothing := .T.
		oGrid:Columns():Add("Column"):FormatColumn := "1 apos `A-Z`"
		oItems := oGrid:Items()
			oItems:AddItem("")
			oItems:SetProperty("SelectItem",oItems:AddItem(""),.T.)
			oItems:AddItem("")
		oGrid:FreezeEvents(.F.)
		oGrid:EndUpdate()

	oForm:Show()
	DO WHILE nEvent != xbeP_Quit
		nEvent := AppEvent( @mp1, @mp2, @oXbp )
		oXbp:handleEvent( nEvent, mp1, mp2 )
	ENDDO 
RETURN
1028:
How can I specify the color for control's selection when it loses the focus

#include "AppEvent.ch"
#include "ActiveX.ch"

PROCEDURE Main
 	LOCAL oForm
	LOCAL nEvent := 0, mp1 := NIL, mp2 := NIL, oXbp := NIL
	LOCAL oGrid
	LOCAL oColumn
	LOCAL oItems

	oForm := XbpDialog():new( AppDesktop() )
	oForm:drawingArea:clipChildren := .T.
	oForm:create( ,,{100,100}, {640,480},, .F. )
	oForm:close  := {|| PostAppEvent( xbeP_Quit )}

	oGrid := XbpActiveXControl():new( oForm:drawingArea )
	oGrid:CLSID  := "Exontrol.Grid.1" /*{101EE60F-7B07-48B0-A13A-F32BAE7DA165}*/
	oGrid:create(,, {10,60},{610,370} )

		oGrid:BeginUpdate()
		oColumn := oGrid:Columns():Add("")
			oColumn:AllowSizing := .F.
			oColumn:AllowDragging := .F.
			oColumn:AllowSort := .F.
			oColumn:Width := 24
			oColumn:SetProperty("Def",2/*exCellHasButton*/,.T.)
		oGrid:Columns():Add("Column"):FormatColumn := "1 apos `A-Z`"
		oItems := oGrid:Items()
			oItems:AddItem("")
			oItems:SetProperty("SelectItem",oItems:AddItem(""),.T.)
			oItems:AddItem("")
		oGrid:SetProperty("Background",166/*exSelBackColorHide*/,AutomationTranslateColor( GraMakeRGBColor  ( { 196,196,196 } )  , .F. ))
		oGrid:SetProperty("Background",167/*exSelForeColorHide*/,AutomationTranslateColor( GraMakeRGBColor  ( { 0,0,1 } )  , .F. ))
		oGrid:EndUpdate()

	oForm:Show()
	DO WHILE nEvent != xbeP_Quit
		nEvent := AppEvent( @mp1, @mp2, @oXbp )
		oXbp:handleEvent( nEvent, mp1, mp2 )
	ENDDO 
RETURN
1027:
How can I change the background color for checked items (EBN color, frame)

PROCEDURE OnCellStateChanged(oGrid,Item,ColIndex)
	oGrid:Refresh()
RETURN

#include "AppEvent.ch"
#include "ActiveX.ch"

PROCEDURE Main
 	LOCAL oForm
	LOCAL nEvent := 0, mp1 := NIL, mp2 := NIL, oXbp := NIL
	LOCAL oGrid
	LOCAL oAppearance
	LOCAL oColumn
	LOCAL oConditionalFormat
	LOCAL oItems
	LOCAL h,hChild

	oForm := XbpDialog():new( AppDesktop() )
	oForm:drawingArea:clipChildren := .T.
	oForm:create( ,,{100,100}, {640,480},, .F. )
	oForm:close  := {|| PostAppEvent( xbeP_Quit )}

	oGrid := XbpActiveXControl():new( oForm:drawingArea )
	oGrid:CLSID  := "Exontrol.Grid.1" /*{101EE60F-7B07-48B0-A13A-F32BAE7DA165}*/
	oGrid:create(,, {10,60},{610,370} )

		oGrid:CellStateChanged := {|Item,ColIndex| OnCellStateChanged(oGrid,Item,ColIndex)} /*Fired after cell's state has been changed.*/

		oGrid:BeginUpdate()
		oGrid:LinesAtRoot := -1/*exLinesAtRoot*/
		oGrid:SelBackMode := 1/*exTransparent*/
		oGrid:DefaultItemHeight := 22
		oColumn := oGrid:Columns():Add("Tasks")
			oColumn:SetProperty("Def",0/*exCellHasCheckBox*/,.T.)
			oColumn:PartialCheck := .T.
		oAppearance := oGrid:VisualAppearance()
			oAppearance:Add(2,"gBFLBCJwBAEHhEJAAEhABUkIQAAYAQGKIcBiAKBQAGYBIJDEMQ3DjAUBjMK4ZwTC4AIQjCK4JDKHYJRpHEZgLBMJAAGIZYhhUYRUiYMkiJBGGDIDiGGI2SJAcbTVIEcx9EyUJSgSTJOjCMokTTIU4TTLYASbJafJJhWSaAiyMouDIOMg1BDNIw/Hika6jOgKUisNJXRzWIBTbDlOQ3JqnbCjOQRSrQBoNDAMAiiaKlbwJPK9RoieQXfwUAJrXJcFqXFSLVxNBKAQEBA=")
			oAppearance:Add(1,"CP:2 1 1 -1 -1")
		oConditionalFormat := oGrid:ConditionalFormats():Add("%CS0 = 1")
			oConditionalFormat:SetProperty("BackColor",0x1000000)
		oGrid:HeaderVisible := .T.
		oItems := oGrid:Items()
			h := oItems:AddItem("Project")
			hChild := oItems:InsertItem(h,,"Task 1")
			oItems:SetProperty("SelectItem",hChild,.T.)
			hChild := oItems:InsertItem(h,,"Task 2")
			oItems:SetProperty("CellState",hChild,1)
			hChild := oItems:InsertItem(h,,"Task 3")
			oItems:SetProperty("CellState",hChild,1)
			oItems:SetProperty("ExpandItem",h,.T.)
		oGrid:EndUpdate()

	oForm:Show()
	DO WHILE nEvent != xbeP_Quit
		nEvent := AppEvent( @mp1, @mp2, @oXbp )
		oXbp:handleEvent( nEvent, mp1, mp2 )
	ENDDO 
RETURN
1026:
How can I change the caption of the checked items (sample 2)

#include "AppEvent.ch"
#include "ActiveX.ch"

PROCEDURE Main
 	LOCAL oForm
	LOCAL nEvent := 0, mp1 := NIL, mp2 := NIL, oXbp := NIL
	LOCAL oGrid
	LOCAL oColumn
	LOCAL oItems
	LOCAL h,hChild

	oForm := XbpDialog():new( AppDesktop() )
	oForm:drawingArea:clipChildren := .T.
	oForm:create( ,,{100,100}, {640,480},, .F. )
	oForm:close  := {|| PostAppEvent( xbeP_Quit )}

	oGrid := XbpActiveXControl():new( oForm:drawingArea )
	oGrid:CLSID  := "Exontrol.Grid.1" /*{101EE60F-7B07-48B0-A13A-F32BAE7DA165}*/
	oGrid:create(,, {10,60},{610,370} )

		oGrid:BeginUpdate()
		oGrid:LinesAtRoot := -1/*exLinesAtRoot*/
		oColumn := oGrid:Columns():Add("Tasks")
			oColumn:SetProperty("Def",0/*exCellHasCheckBox*/,.T.)
			oColumn:PartialCheck := .T.
			oColumn:SetProperty("Def",17/*exCellValueFormat*/,1)
			oColumn:FormatColumn := "%CS0 = 1 ? `<bgcolor=000000><fgcolor=FFFFFF> ` + value + ` </fgcolor></bgcolor>` : value"
		oGrid:HeaderVisible := .T.
		oItems := oGrid:Items()
			h := oItems:AddItem("Project")
			hChild := oItems:InsertItem(h,,"Task 1")
			oItems:SetProperty("SelectItem",hChild,.T.)
			hChild := oItems:InsertItem(h,,"Task 2")
			oItems:SetProperty("CellState",hChild,1)
			hChild := oItems:InsertItem(h,,"Task 3")
			oItems:SetProperty("CellState",hChild,1)
			oItems:SetProperty("ExpandItem",h,.T.)
		oGrid:EndUpdate()

	oForm:Show()
	DO WHILE nEvent != xbeP_Quit
		nEvent := AppEvent( @mp1, @mp2, @oXbp )
		oXbp:handleEvent( nEvent, mp1, mp2 )
	ENDDO 
RETURN
1025:
How can I change the caption of the checked items (sample 1)

#include "AppEvent.ch"
#include "ActiveX.ch"

PROCEDURE Main
 	LOCAL oForm
	LOCAL nEvent := 0, mp1 := NIL, mp2 := NIL, oXbp := NIL
	LOCAL oGrid
	LOCAL oColumn
	LOCAL oItems
	LOCAL h,hChild

	oForm := XbpDialog():new( AppDesktop() )
	oForm:drawingArea:clipChildren := .T.
	oForm:create( ,,{100,100}, {640,480},, .F. )
	oForm:close  := {|| PostAppEvent( xbeP_Quit )}

	oGrid := XbpActiveXControl():new( oForm:drawingArea )
	oGrid:CLSID  := "Exontrol.Grid.1" /*{101EE60F-7B07-48B0-A13A-F32BAE7DA165}*/
	oGrid:create(,, {10,60},{610,370} )

		oGrid:BeginUpdate()
		oGrid:LinesAtRoot := -1/*exLinesAtRoot*/
		oColumn := oGrid:Columns():Add("Tasks")
			oColumn:SetProperty("Def",0/*exCellHasCheckBox*/,.T.)
			oColumn:PartialCheck := .T.
			oColumn:SetProperty("Def",17/*exCellValueFormat*/,1)
			oColumn:FormatColumn := "value + (%CS0 = 1 ? `<r><fgcolor=808080>(checked)` : ``)"
		oGrid:HeaderVisible := .T.
		oItems := oGrid:Items()
			h := oItems:AddItem("Project")
			hChild := oItems:InsertItem(h,,"Task 1")
			oItems:SetProperty("SelectItem",hChild,.T.)
			hChild := oItems:InsertItem(h,,"Task 2")
			oItems:SetProperty("CellState",hChild,1)
			hChild := oItems:InsertItem(h,,"Task 3")
			oItems:SetProperty("CellState",hChild,1)
			oItems:SetProperty("ExpandItem",h,.T.)
		oGrid:EndUpdate()

	oForm:Show()
	DO WHILE nEvent != xbeP_Quit
		nEvent := AppEvent( @mp1, @mp2, @oXbp )
		oXbp:handleEvent( nEvent, mp1, mp2 )
	ENDDO 
RETURN
1024:
How can I change the font for the checked items

PROCEDURE OnCellStateChanged(oGrid,Item,ColIndex)
	oGrid:Refresh()
RETURN

#include "AppEvent.ch"
#include "ActiveX.ch"

PROCEDURE Main
 	LOCAL oForm
	LOCAL nEvent := 0, mp1 := NIL, mp2 := NIL, oXbp := NIL
	LOCAL oGrid
	LOCAL oColumn
	LOCAL oConditionalFormat
	LOCAL oItems
	LOCAL h,hChild
	LOCAL f

	oForm := XbpDialog():new( AppDesktop() )
	oForm:drawingArea:clipChildren := .T.
	oForm:create( ,,{100,100}, {640,480},, .F. )
	oForm:close  := {|| PostAppEvent( xbeP_Quit )}

	oGrid := XbpActiveXControl():new( oForm:drawingArea )
	oGrid:CLSID  := "Exontrol.Grid.1" /*{101EE60F-7B07-48B0-A13A-F32BAE7DA165}*/
	oGrid:create(,, {10,60},{610,370} )

		oGrid:CellStateChanged := {|Item,ColIndex| OnCellStateChanged(oGrid,Item,ColIndex)} /*Fired after cell's state has been changed.*/

		oGrid:BeginUpdate()
		oGrid:LinesAtRoot := -1/*exLinesAtRoot*/
		oGrid:DefaultItemHeight := 22
		oColumn := oGrid:Columns():Add("Tasks")
			oColumn:SetProperty("Def",0/*exCellHasCheckBox*/,.T.)
			oColumn:PartialCheck := .T.
		oConditionalFormat := oGrid:ConditionalFormats():Add("%CS0 = 1")
			f := CreateObject("StdFont")
				f:Name := oGrid:Font():Name()
				f:Size := 12
			oConditionalFormat:Font := f
		oGrid:HeaderVisible := .T.
		oItems := oGrid:Items()
			h := oItems:AddItem("Project")
			hChild := oItems:InsertItem(h,,"Task 1")
			oItems:SetProperty("SelectItem",hChild,.T.)
			hChild := oItems:InsertItem(h,,"Task 2")
			oItems:SetProperty("CellState",hChild,1)
			hChild := oItems:InsertItem(h,,"Task 3")
			oItems:SetProperty("CellState",hChild,1)
			oItems:SetProperty("ExpandItem",h,.T.)
		oGrid:EndUpdate()

	oForm:Show()
	DO WHILE nEvent != xbeP_Quit
		nEvent := AppEvent( @mp1, @mp2, @oXbp )
		oXbp:handleEvent( nEvent, mp1, mp2 )
	ENDDO 
RETURN
1023:
How can I bold the checked items

PROCEDURE OnCellStateChanged(oGrid,Item,ColIndex)
	oGrid:Refresh()
RETURN

#include "AppEvent.ch"
#include "ActiveX.ch"

PROCEDURE Main
 	LOCAL oForm
	LOCAL nEvent := 0, mp1 := NIL, mp2 := NIL, oXbp := NIL
	LOCAL oGrid
	LOCAL oColumn
	LOCAL oConditionalFormat
	LOCAL oItems
	LOCAL h,hChild

	oForm := XbpDialog():new( AppDesktop() )
	oForm:drawingArea:clipChildren := .T.
	oForm:create( ,,{100,100}, {640,480},, .F. )
	oForm:close  := {|| PostAppEvent( xbeP_Quit )}

	oGrid := XbpActiveXControl():new( oForm:drawingArea )
	oGrid:CLSID  := "Exontrol.Grid.1" /*{101EE60F-7B07-48B0-A13A-F32BAE7DA165}*/
	oGrid:create(,, {10,60},{610,370} )

		oGrid:CellStateChanged := {|Item,ColIndex| OnCellStateChanged(oGrid,Item,ColIndex)} /*Fired after cell's state has been changed.*/

		oGrid:BeginUpdate()
		oGrid:LinesAtRoot := -1/*exLinesAtRoot*/
		oColumn := oGrid:Columns():Add("Tasks")
			oColumn:SetProperty("Def",0/*exCellHasCheckBox*/,.T.)
			oColumn:PartialCheck := .T.
		oConditionalFormat := oGrid:ConditionalFormats():Add("%CS0 = 1")
			oConditionalFormat:Bold := .T.
		oGrid:HeaderVisible := .T.
		oItems := oGrid:Items()
			h := oItems:AddItem("Project")
			hChild := oItems:InsertItem(h,,"Task 1")
			oItems:SetProperty("SelectItem",hChild,.T.)
			hChild := oItems:InsertItem(h,,"Task 2")
			oItems:SetProperty("CellState",hChild,1)
			hChild := oItems:InsertItem(h,,"Task 3")
			oItems:SetProperty("CellState",hChild,1)
			oItems:SetProperty("ExpandItem",h,.T.)
		oGrid:EndUpdate()

	oForm:Show()
	DO WHILE nEvent != xbeP_Quit
		nEvent := AppEvent( @mp1, @mp2, @oXbp )
		oXbp:handleEvent( nEvent, mp1, mp2 )
	ENDDO 
RETURN
1022:
How can I change the foreground color for checked items

PROCEDURE OnCellStateChanged(oGrid,Item,ColIndex)
	oGrid:Refresh()
RETURN

#include "AppEvent.ch"
#include "ActiveX.ch"

PROCEDURE Main
 	LOCAL oForm
	LOCAL nEvent := 0, mp1 := NIL, mp2 := NIL, oXbp := NIL
	LOCAL oGrid
	LOCAL oColumn
	LOCAL oConditionalFormat
	LOCAL oItems
	LOCAL h,hChild

	oForm := XbpDialog():new( AppDesktop() )
	oForm:drawingArea:clipChildren := .T.
	oForm:create( ,,{100,100}, {640,480},, .F. )
	oForm:close  := {|| PostAppEvent( xbeP_Quit )}

	oGrid := XbpActiveXControl():new( oForm:drawingArea )
	oGrid:CLSID  := "Exontrol.Grid.1" /*{101EE60F-7B07-48B0-A13A-F32BAE7DA165}*/
	oGrid:create(,, {10,60},{610,370} )

		oGrid:CellStateChanged := {|Item,ColIndex| OnCellStateChanged(oGrid,Item,ColIndex)} /*Fired after cell's state has been changed.*/

		oGrid:BeginUpdate()
		oGrid:LinesAtRoot := -1/*exLinesAtRoot*/
		oGrid:SelBackMode := 1/*exTransparent*/
		oColumn := oGrid:Columns():Add("Tasks")
			oColumn:SetProperty("Def",0/*exCellHasCheckBox*/,.T.)
			oColumn:PartialCheck := .T.
		oConditionalFormat := oGrid:ConditionalFormats():Add("%CS0 = 1")
			oConditionalFormat:SetProperty("ForeColor",AutomationTranslateColor( GraMakeRGBColor  ( { 255,128,128 } )  , .F. ))
		oGrid:HeaderVisible := .T.
		oItems := oGrid:Items()
			h := oItems:AddItem("Project")
			hChild := oItems:InsertItem(h,,"Task 1")
			oItems:SetProperty("SelectItem",hChild,.T.)
			hChild := oItems:InsertItem(h,,"Task 2")
			oItems:SetProperty("CellState",hChild,1)
			hChild := oItems:InsertItem(h,,"Task 3")
			oItems:SetProperty("CellState",hChild,1)
			oItems:SetProperty("ExpandItem",h,.T.)
		oGrid:EndUpdate()

	oForm:Show()
	DO WHILE nEvent != xbeP_Quit
		nEvent := AppEvent( @mp1, @mp2, @oXbp )
		oXbp:handleEvent( nEvent, mp1, mp2 )
	ENDDO 
RETURN
1021:
How can I change the background color for checked items (solid color)

PROCEDURE OnCellStateChanged(oGrid,Item,ColIndex)
	oGrid:Refresh()
RETURN

#include "AppEvent.ch"
#include "ActiveX.ch"

PROCEDURE Main
 	LOCAL oForm
	LOCAL nEvent := 0, mp1 := NIL, mp2 := NIL, oXbp := NIL
	LOCAL oGrid
	LOCAL oColumn
	LOCAL oConditionalFormat
	LOCAL oItems
	LOCAL h,hChild

	oForm := XbpDialog():new( AppDesktop() )
	oForm:drawingArea:clipChildren := .T.
	oForm:create( ,,{100,100}, {640,480},, .F. )
	oForm:close  := {|| PostAppEvent( xbeP_Quit )}

	oGrid := XbpActiveXControl():new( oForm:drawingArea )
	oGrid:CLSID  := "Exontrol.Grid.1" /*{101EE60F-7B07-48B0-A13A-F32BAE7DA165}*/
	oGrid:create(,, {10,60},{610,370} )

		oGrid:CellStateChanged := {|Item,ColIndex| OnCellStateChanged(oGrid,Item,ColIndex)} /*Fired after cell's state has been changed.*/

		oGrid:BeginUpdate()
		oGrid:LinesAtRoot := -1/*exLinesAtRoot*/
		oGrid:SelBackMode := 1/*exTransparent*/
		oColumn := oGrid:Columns():Add("Tasks")
			oColumn:SetProperty("Def",0/*exCellHasCheckBox*/,.T.)
			oColumn:PartialCheck := .T.
		oConditionalFormat := oGrid:ConditionalFormats():Add("%CS0 = 1")
			oConditionalFormat:SetProperty("BackColor",AutomationTranslateColor( GraMakeRGBColor  ( { 255,128,128 } )  , .F. ))
		oGrid:HeaderVisible := .T.
		oItems := oGrid:Items()
			h := oItems:AddItem("Project")
			hChild := oItems:InsertItem(h,,"Task 1")
			oItems:SetProperty("SelectItem",hChild,.T.)
			hChild := oItems:InsertItem(h,,"Task 2")
			oItems:SetProperty("CellState",hChild,1)
			hChild := oItems:InsertItem(h,,"Task 3")
			oItems:SetProperty("CellState",hChild,1)
			oItems:SetProperty("ExpandItem",h,.T.)
		oGrid:EndUpdate()

	oForm:Show()
	DO WHILE nEvent != xbeP_Quit
		nEvent := AppEvent( @mp1, @mp2, @oXbp )
		oXbp:handleEvent( nEvent, mp1, mp2 )
	ENDDO 
RETURN
1020:
How can I export the cell's state as well

#include "AppEvent.ch"
#include "ActiveX.ch"

PROCEDURE Main
 	LOCAL oForm
	LOCAL nEvent := 0, mp1 := NIL, mp2 := NIL, oXbp := NIL
	LOCAL oGrid
	LOCAL oColumn
	LOCAL oColumns
	LOCAL oItems

	oForm := XbpDialog():new( AppDesktop() )
	oForm:drawingArea:clipChildren := .T.
	oForm:create( ,,{100,100}, {640,480},, .F. )
	oForm:close  := {|| PostAppEvent( xbeP_Quit )}

	oGrid := XbpActiveXControl():new( oForm:drawingArea )
	oGrid:CLSID  := "Exontrol.Grid.1" /*{101EE60F-7B07-48B0-A13A-F32BAE7DA165}*/
	oGrid:create(,, {10,60},{610,370} )

		oGrid:BeginUpdate()
		oColumns := oGrid:Columns()
			oColumns:Add("C1"):SetProperty("Def",0/*exCellHasCheckBox*/,.T.)
			oColumns:Add("C2"):FormatColumn := "1 index `A-Z`"
			oColumns:Add("C3"):FormatColumn := "100 index ``"
		oItems := oGrid:Items()
			oItems:AddItem("Item 1")
			oItems:SetProperty("CellState",oItems:AddItem("Item 2"),1)
			oItems:SetProperty("CellState",oItems:AddItem("Item 3"),1)
		oGrid:EndUpdate()
		DevOut( "Export CSV Items including Check-State:" )
		oGrid:BeginUpdate()
		oColumn := oGrid:Columns():Add("Check")
			oColumn:Position := 0
			oColumn:FormatColumn := "%CS0"
		DevOut( Transform(oGrid:Export(""),"") )
		oGrid:Columns():Remove("Check")
		oGrid:EndUpdate()

	oForm:Show()
	DO WHILE nEvent != xbeP_Quit
		nEvent := AppEvent( @mp1, @mp2, @oXbp )
		oXbp:handleEvent( nEvent, mp1, mp2 )
	ENDDO 
RETURN
1019:
Is it possible to customize the editor selection colour of the built in text editor, from standard blue to black

#include "AppEvent.ch"
#include "ActiveX.ch"

PROCEDURE Main
 	LOCAL oForm
	LOCAL nEvent := 0, mp1 := NIL, mp2 := NIL, oXbp := NIL
	LOCAL oGrid
	LOCAL oEditor
	LOCAL oItems

	oForm := XbpDialog():new( AppDesktop() )
	oForm:drawingArea:clipChildren := .T.
	oForm:create( ,,{100,100}, {640,480},, .F. )
	oForm:close  := {|| PostAppEvent( xbeP_Quit )}

	oGrid := XbpActiveXControl():new( oForm:drawingArea )
	oGrid:CLSID  := "Exontrol.Grid.1" /*{101EE60F-7B07-48B0-A13A-F32BAE7DA165}*/
	oGrid:create(,, {10,60},{610,370} )

		oGrid:BeginUpdate()
		oGrid:SetProperty("SelBackColor",AutomationTranslateColor( GraMakeRGBColor  ( { 0,0,0 } )  , .F. ))
		oGrid:SetProperty("SelForeColor",AutomationTranslateColor( GraMakeRGBColor  ( { 255,255,255 } )  , .F. ))
		oEditor := oGrid:Columns():Add("Edit"):Editor()
			oEditor:EditType := 8/*MaskType*/
			oEditor:Mask := ";;;rich"
		oItems := oGrid:Items()
			oItems:AddItem("")
			oItems:AddItem("Just a text")
			oItems:AddItem("")
		oGrid:EndUpdate()

	oForm:Show()
	DO WHILE nEvent != xbeP_Quit
		nEvent := AppEvent( @mp1, @mp2, @oXbp )
		oXbp:handleEvent( nEvent, mp1, mp2 )
	ENDDO 
RETURN
1018:
Is it possible to customize the editor selection colour of the built in dropdown editor, from standard blue to black

#include "AppEvent.ch"
#include "ActiveX.ch"

PROCEDURE Main
 	LOCAL oForm
	LOCAL nEvent := 0, mp1 := NIL, mp2 := NIL, oXbp := NIL
	LOCAL oGrid
	LOCAL oEditor
	LOCAL oItems

	oForm := XbpDialog():new( AppDesktop() )
	oForm:drawingArea:clipChildren := .T.
	oForm:create( ,,{100,100}, {640,480},, .F. )
	oForm:close  := {|| PostAppEvent( xbeP_Quit )}

	oGrid := XbpActiveXControl():new( oForm:drawingArea )
	oGrid:CLSID  := "Exontrol.Grid.1" /*{101EE60F-7B07-48B0-A13A-F32BAE7DA165}*/
	oGrid:create(,, {10,60},{610,370} )

		oGrid:BeginUpdate()
		oGrid:SetProperty("SelBackColor",AutomationTranslateColor( GraMakeRGBColor  ( { 0,0,0 } )  , .F. ))
		oGrid:SetProperty("SelForeColor",AutomationTranslateColor( GraMakeRGBColor  ( { 255,255,255 } )  , .F. ))
		oEditor := oGrid:Columns():Add("DropDown"):Editor()
			oEditor:AddItem(1,"This is just the first item")
			oEditor:AddItem(2,"This is just the second item")
			oEditor:AddItem(3,"This is just the third item")
			oEditor:EditType := 2/*DropDownType*/
			oEditor:Mask := ";;;rich"
		oItems := oGrid:Items()
			oItems:AddItem("")
			oItems:AddItem("Just a text")
			oItems:AddItem("")
		oGrid:EndUpdate()

	oForm:Show()
	DO WHILE nEvent != xbeP_Quit
		nEvent := AppEvent( @mp1, @mp2, @oXbp )
		oXbp:handleEvent( nEvent, mp1, mp2 )
	ENDDO 
RETURN
1017:
The BeforeExpandItem event is fired when clicking the drop down filter button. What we can do to prevent that
PROCEDURE OnBeforeExpandItem(oGrid,Item,Cancel)
	DevOut( "BeforeExpandItem" )
	DevOut( Transform(Item,"") )
	DevOut( "ColumnFromPoint" )
	DevOut( Transform(oGrid:ColumnFromPoint(-1,-1),"") )
	DevOut( "ColumnFromPoint return -1, if the user clicks the +/- glitch, else it returns the index of the column where the click occurs." )
	oGrid:Items():InsertItem(Item,,"new child")
RETURN

#include "AppEvent.ch"
#include "ActiveX.ch"

PROCEDURE Main
 	LOCAL oForm
	LOCAL nEvent := 0, mp1 := NIL, mp2 := NIL, oXbp := NIL
	LOCAL oGrid
	LOCAL oColumns
	LOCAL oItems

	oForm := XbpDialog():new( AppDesktop() )
	oForm:drawingArea:clipChildren := .T.
	oForm:create( ,,{100,100}, {640,480},, .F. )
	oForm:close  := {|| PostAppEvent( xbeP_Quit )}

	oGrid := XbpActiveXControl():new( oForm:drawingArea )
	oGrid:CLSID  := "Exontrol.Grid.1" /*{101EE60F-7B07-48B0-A13A-F32BAE7DA165}*/
	oGrid:create(,, {10,60},{610,370} )

		oGrid:BeforeExpandItem := {|Item,Cancel| OnBeforeExpandItem(oGrid,Item,Cancel)} /*Fired before an item is about to be expanded (collapsed).*/

		oGrid:BeginUpdate()
		oGrid:LinesAtRoot := -1/*exLinesAtRoot*/
		oColumns := oGrid:Columns()
			oColumns:Add("Items"):DisplayFilterButton := .T.
		oItems := oGrid:Items()
			oItems:SetProperty("ItemHasChildren",oItems:InsertItem(,,"Group 1"),.T.)
			oItems:SetProperty("ItemHasChildren",oItems:InsertItem(,,"Group 2"),.T.)
		oGrid:EndUpdate()

	oForm:Show()
	DO WHILE nEvent != xbeP_Quit
		nEvent := AppEvent( @mp1, @mp2, @oXbp )
		oXbp:handleEvent( nEvent, mp1, mp2 )
	ENDDO 
RETURN
1016:
How do I change the drop down filter icon/button (black)

#include "AppEvent.ch"
#include "ActiveX.ch"

PROCEDURE Main
 	LOCAL oForm
	LOCAL nEvent := 0, mp1 := NIL, mp2 := NIL, oXbp := NIL
	LOCAL oGrid
	LOCAL oAppearance
	LOCAL oColumn

	oForm := XbpDialog():new( AppDesktop() )
	oForm:drawingArea:clipChildren := .T.
	oForm:create( ,,{100,100}, {640,480},, .F. )
	oForm:close  := {|| PostAppEvent( xbeP_Quit )}

	oGrid := XbpActiveXControl():new( oForm:drawingArea )
	oGrid:CLSID  := "Exontrol.Grid.1" /*{101EE60F-7B07-48B0-A13A-F32BAE7DA165}*/
	oGrid:create(,, {10,60},{610,370} )

		oGrid:BeginUpdate()
		oAppearance := oGrid:VisualAppearance()
			oAppearance:Add(1,"gBFLBCJwBAEHhEJAAEhABXUIQAAYAQGKIcBiAKBQAGYBIJDEMgzDDAUBjKKocQTC4AIQjCK4JDKHYJRpHEZyCA8EhqGASRAFUQBYiWE4oSpLABQaK0ZwIGyRIrkGQgQgmPYDSDNU4zVIEEglBI0TDNczhNDENgtGYaJqHIYpZBcM40TKkEZoSIITZcRrOEBiRL1S0RBhGcRUHZlWzdN64LhuK47UrWdD/XhdVzXRbjfz1Oq+bxve48Br7A5yYThdr4LhOFQ3RjIL4xbIcUwGe6VZhjOLZXjmO49T69HTtOCYBEBA")
		oGrid:SetProperty("Background",0/*exHeaderFilterBarButton*/,0x1000000)
		oGrid:SetProperty("Background",32/*exCursorHoverColumn*/,-1)
		oGrid:HeaderAppearance := 0/*None2*/
		oGrid:SetProperty("BackColorHeader",AutomationTranslateColor( GraMakeRGBColor  ( { 0,0,0 } )  , .F. ))
		oGrid:SetProperty("ForeColorHeader",AutomationTranslateColor( GraMakeRGBColor  ( { 255,255,255 } )  , .F. ))
		oGrid:HeaderVisible := .T.
		oColumn := oGrid:Columns():Add("Filter")
			oColumn:DisplayFilterButton := .T.
			oColumn:AllowSort := .F.
			oColumn:AllowDragging := .F.
		oGrid:EndUpdate()

	oForm:Show()
	DO WHILE nEvent != xbeP_Quit
		nEvent := AppEvent( @mp1, @mp2, @oXbp )
		oXbp:handleEvent( nEvent, mp1, mp2 )
	ENDDO 
RETURN
1015:
How do I change the drop down filter icon/button (white)

#include "AppEvent.ch"
#include "ActiveX.ch"

PROCEDURE Main
 	LOCAL oForm
	LOCAL nEvent := 0, mp1 := NIL, mp2 := NIL, oXbp := NIL
	LOCAL oGrid
	LOCAL oAppearance
	LOCAL oColumn

	oForm := XbpDialog():new( AppDesktop() )
	oForm:drawingArea:clipChildren := .T.
	oForm:create( ,,{100,100}, {640,480},, .F. )
	oForm:close  := {|| PostAppEvent( xbeP_Quit )}

	oGrid := XbpActiveXControl():new( oForm:drawingArea )
	oGrid:CLSID  := "Exontrol.Grid.1" /*{101EE60F-7B07-48B0-A13A-F32BAE7DA165}*/
	oGrid:create(,, {10,60},{610,370} )

		oGrid:BeginUpdate()
		oAppearance := oGrid:VisualAppearance()
			oAppearance:Add(2,"gBFLBCJwBAEHhEJAAEhABX8GACAADACAxSDEMQBQKAAzQFAYbhgHCGAAGQaBUgmFgAQhFcZQSKUOQTDKNYykCIRSDUJYkSZEIyjBI8ExXFqNACkGKwYgmNYiTLAcgANJ0WBaGIZJ4gOT5fDKMoEDRRYADFCscwxJybQAqGQKKb+VgAVY/cTyBIAEQSKA0TDOQ5TSKWB4JPZQRBEbZMNBtBIUJquKaqShdQJCU5FdY3Xblez9P7AMBwLFEC4NQ8YNYuPhjR4dRTIMhvVAsUArFh8Zg9GZZFjmDIDT4ydBLTQwcyVIKnP5qOa6XbmPoCQDYKxZHYxPzVDa3axuL76dqCAT7XrXNy1TbNRrzQKfcJqfCbdw2YaDZLOOT3fjuI4hhKaRzFAHJ+jYQ4xHuY4gHuGIXGeExqC8Tp6C+PoEm+G5ImycRgh0XwvDGa5rgOeoejyXwnFeQp2mkf5ClgBB9gCWIYAwfYAEKV58mkdwOggNArgOXY2EWLoDkKOA0mg" +;
		"bhOGgZApgaSBIHWSYHSmbApgYThmESZYJkIeIkgeCpfliLIHgpMIcmUYYYmODAlg2SI4mWfRfGOEguDcCRjFYAJihCQhJBSDoRmONgKEcI4kFCEJhhOVYTmYnAlEAQhWBMJYJGYWoWmWSR2F6F5lnkWAQhUAgpEieRWEuSYkjWGpmkmNhuhuZwJkYcocmaaYkjyEhngnUA6lEFAlAEgI=")
			oAppearance:Add(1,"CP:2 -4 -4 2 4")
		oGrid:SetProperty("Background",0/*exHeaderFilterBarButton*/,0x1000000)
		oGrid:SetProperty("Background",32/*exCursorHoverColumn*/,oGrid:BackColor())
		oGrid:HeaderAppearance := 0/*None2*/
		oGrid:HeaderHeight := 24
		oGrid:SetProperty("BackColorHeader",AutomationTranslateColor( GraMakeRGBColor  ( { 255,255,255 } )  , .F. ))
		oGrid:HeaderVisible := .T.
		oColumn := oGrid:Columns():Add("Filter")
			oColumn:DisplayFilterButton := .T.
			oColumn:AllowSort := .F.
			oColumn:AllowDragging := .F.
		oGrid:EndUpdate()

	oForm:Show()
	DO WHILE nEvent != xbeP_Quit
		nEvent := AppEvent( @mp1, @mp2, @oXbp )
		oXbp:handleEvent( nEvent, mp1, mp2 )
	ENDDO 
RETURN
1014:
How can I draw a solid frame around the the focusing item

#include "AppEvent.ch"
#include "ActiveX.ch"

PROCEDURE Main
 	LOCAL oForm
	LOCAL nEvent := 0, mp1 := NIL, mp2 := NIL, oXbp := NIL
	LOCAL oGrid
	LOCAL oAppearance
	LOCAL oColumn
	LOCAL oItems
	LOCAL h

	oForm := XbpDialog():new( AppDesktop() )
	oForm:drawingArea:clipChildren := .T.
	oForm:create( ,,{100,100}, {640,480},, .F. )
	oForm:close  := {|| PostAppEvent( xbeP_Quit )}

	oGrid := XbpActiveXControl():new( oForm:drawingArea )
	oGrid:CLSID  := "Exontrol.Grid.1" /*{101EE60F-7B07-48B0-A13A-F32BAE7DA165}*/
	oGrid:create(,, {10,60},{610,370} )

		oGrid:BeginUpdate()
		oGrid:SingleSel := .F.
		oGrid:DefaultItemHeight := 20
		oAppearance := oGrid:VisualAppearance()
			oAppearance:RenderType := -1
			oAppearance:Add(1,"gBFLBCJwBAEHhEJAAEhABOkGACAADACAxRDgMQBQKAAzAJBIYhkGYYYCgMZRUDGCYXABCEYRXBKUQSDqEYyjGLIXAWCYSAAMIwDKAUEwpFAZBhgeDYMiSNoYDJCM4wHIURRJFCUJSGWQpTgSIgyT5HFIxXKoASbJabZLhWS6EpWOotTbIQQRYCkEyfKKfZyGURZQqOKA1DBZErWTJESRFJqLazgO4LAhyQYrVgAErzVKVCRNOqbJzADApdpGQJTULDNTQHRFIyhOSnIRrWbMAhid6JUZiVT4dBOIYhSYANAqCwLFqrDJmWrpV5WZjlZ47V6BdAyXJsIrmFJEXaOGhyDDlGybSDZYryfZhUziUw4XjbWwZDqPF6DKTTdSGLREE8WZVlURZvDaep3C+AY8kAYRgGCCBJECUhjDoHROEYWgoAGTQ1CEEx9lGMY0CQUYSnuZQDBGBYFlOH5+H+igGAKAJgEgFgGgGVgDn4CoCmCSA2A6A5hAgDgQgSYRIE4" +;
		"EoFGGCBiBeBhhkgPgbgcYgICoH4IGGWIOCSBhiGiHgVgoYooFoAoLGIWI+DCCgjCiTgrgII4ImYOoOmOSJ2AYOpWlQDQBICA=")
		oGrid:ShowFocusRect := .T.
		oGrid:SetProperty("Background",19/*exShowFocusRect*/,0x1000000)
		oGrid:LinesAtRoot := -1/*exLinesAtRoot*/
		oColumn := oGrid:Columns():Add("P1")
			oColumn:SetProperty("Def",0/*exCellHasCheckBox*/,.T.)
			oColumn:PartialCheck := .T.
		oItems := oGrid:Items()
			h := oItems:AddItem("Root")
			oItems:InsertItem(h,,"Child 1")
			oItems:InsertItem(h,,"Child 2")
			oItems:SetProperty("ExpandItem",h,.T.)
		oGrid:EndUpdate()

	oForm:Show()
	DO WHILE nEvent != xbeP_Quit
		nEvent := AppEvent( @mp1, @mp2, @oXbp )
		oXbp:handleEvent( nEvent, mp1, mp2 )
	ENDDO 
RETURN
1013:
The frame around the focusing item is not very clear. Can I show it larger or more cleared (sample 2)

#include "AppEvent.ch"
#include "ActiveX.ch"

PROCEDURE Main
 	LOCAL oForm
	LOCAL nEvent := 0, mp1 := NIL, mp2 := NIL, oXbp := NIL
	LOCAL oGrid
	LOCAL oAppearance
	LOCAL oColumn
	LOCAL oItems
	LOCAL h

	oForm := XbpDialog():new( AppDesktop() )
	oForm:drawingArea:clipChildren := .T.
	oForm:create( ,,{100,100}, {640,480},, .F. )
	oForm:close  := {|| PostAppEvent( xbeP_Quit )}

	oGrid := XbpActiveXControl():new( oForm:drawingArea )
	oGrid:CLSID  := "Exontrol.Grid.1" /*{101EE60F-7B07-48B0-A13A-F32BAE7DA165}*/
	oGrid:create(,, {10,60},{610,370} )

		oGrid:BeginUpdate()
		oGrid:SingleSel := .F.
		oGrid:DefaultItemHeight := 20
		oGrid:ShowFocusRect := .T.
		oAppearance := oGrid:VisualAppearance()
			oAppearance:RenderType := -1
			oAppearance:Add(2,"gBFLBCJwBAEHhEJAAEhABPEGACAADACAxRDgMQBQKAAzAJBIYhkGYYYCgMZRUDGCYXABCEYRXBKUQSDqEYyjGLIXAWCYSAAMIwDKAUEwpFAZBhgeCRUgyJI3RgMUIzVAcRRFEiUJQlIZZCjOAw0SIMU7xZRcNxsACnaZnCR4NiuRYiUhOcqzRIQIQ4CiEahqOgJbDUJYwWZKAyjBY8XTZFCSJCpeJ6egOc5jRxQUp1WAEXx3GSsJKvCZ5cADBY+VLQNS0JBtMSTKSLaiuWoIJqCPaDRheWKQJh1NSnLqEcjyYANDxDCZlWzAYxWTZ2Uz7N7PbB0HY4DyPGKZYrfESVRbQcZNS6nNigPI9XhfGq6VjRe63ZaOaYpWrnOJqTRWjOKYujWdZ2BGO5lkuBAAkmcQkDmDBEAwEQJCgGhMGcQ4pkiSxGAAOYmkQIhvkYNg2gSCgyj+LI4GIMIwF2XQoAYAoAmASAWAaAZgggJgKFiT54DYDoDmECBGBKBJgGg" +;
		"TgWgWYRoFYGIGmGOBqByB5hCgegggiYJYgoJIICIaIeByChiigYgsgsYYYBYMIKCMKJOCuDRjGiOgLg6Y5InYPoPmQCAkmsXAQDQBCAg=")
			oAppearance:Add(3,"CP:2 -3 0 3 0")
		oGrid:SetProperty("Background",19/*exShowFocusRect*/,0x3010101)
		oGrid:LinesAtRoot := -1/*exLinesAtRoot*/
		oColumn := oGrid:Columns():Add("P1")
			oColumn:SetProperty("Def",0/*exCellHasCheckBox*/,.T.)
			oColumn:PartialCheck := .T.
		oItems := oGrid:Items()
			h := oItems:AddItem("Root")
			oItems:InsertItem(h,,"Child 1")
			oItems:InsertItem(h,,"Child 2")
			oItems:SetProperty("ExpandItem",h,.T.)
		oGrid:EndUpdate()

	oForm:Show()
	DO WHILE nEvent != xbeP_Quit
		nEvent := AppEvent( @mp1, @mp2, @oXbp )
		oXbp:handleEvent( nEvent, mp1, mp2 )
	ENDDO 
RETURN
1012:
The frame around the focusing item is not very clear. Can I show it larger or more cleared (sample 1)

#include "AppEvent.ch"
#include "ActiveX.ch"

PROCEDURE Main
 	LOCAL oForm
	LOCAL nEvent := 0, mp1 := NIL, mp2 := NIL, oXbp := NIL
	LOCAL oGrid
	LOCAL oAppearance
	LOCAL oColumn
	LOCAL oItems
	LOCAL h

	oForm := XbpDialog():new( AppDesktop() )
	oForm:drawingArea:clipChildren := .T.
	oForm:create( ,,{100,100}, {640,480},, .F. )
	oForm:close  := {|| PostAppEvent( xbeP_Quit )}

	oGrid := XbpActiveXControl():new( oForm:drawingArea )
	oGrid:CLSID  := "Exontrol.Grid.1" /*{101EE60F-7B07-48B0-A13A-F32BAE7DA165}*/
	oGrid:create(,, {10,60},{610,370} )

		oGrid:BeginUpdate()
		oGrid:SingleSel := .F.
		oGrid:ShowFocusRect := .T.
		oAppearance := oGrid:VisualAppearance()
			oAppearance:Add(1,"gBFLBCJwBAEHhEJAAEhABHoDg6AADACAxRDgMQBQKAAzAJBIYhkGYYYCgMZRUDGCYXABCEYRXBIZQ7BKNIxjSJwFiCCQwSDKEjyCKcGRHF6MI6gOYpCgOIYjRJNIASVAceAAGaUZrjSgobjmOYhAJCLqhYIgASXJqLaBlOCaAieSc+QhjQJIJoeCZXU5TFg1BTsOhqEqcRiseaRVDCaIJWzbdYWLDdNQHHKYLjnWorbpSJZ5XjNEySDQkMS9PrEJ7vST8FBCdAABLJUB2BR9RwxRafKpnWwJDpmCaOQLXEB5DK1PyVMTKYrtGy7GrIAJxWxbV4UHh+QABOzIMAvHKJMwvHYcUZne5XVLeF41HbONogPaJZyIAK2cLROq6Xo7GEcJZEcLASB4DwvgWUZlE6AQQhKAYkkYdA6hyDIwHgSoqFwQgmnsYxjGgSIiBOTpSEiAwRgOJI7j4JAHA6U5wm0MpPlOBIjD8TZiGYCICiCGAuA6AxhAgMgSgOYQ4DY" +;
		"Bg/g6cw1n+ABOmMMJ9DmCwjnScw4RsVJngkYh4hoKIKmKKI2CmC5ikiQgqgiT5jhyMw8g4QwIn0OIKEiCJhD8DwTGyfA7k0WQOEWEQkGkJhIhKZB5DYSoTiSCQEn4PQOCOXJcCeIJjliaIQk0aRyF4O5llmAhfhgZhJg4ZoYiaAxYn4PZOhOZJaCUZYTiYQw1mcOZUm+HQnHmWh4h6Z4pnYeYfk0eYsmqG4nAgNJ2DqD5DkCWoiGiOgqgyI5omoRoNiSaQKFKEojCaM4ugSFhOjkAJcieKgDkaH4oioGoOiaKRqgqEoqDddwyhuAxPgOMJ8DyDZqk6NYtCsapmjiLprHqdo6i+K5K1oPhOlqPgKD4DpjnII4yiOewuk6MxtAsMpSjObQ7EaT4wk6ewYn0PgPAiCJkjeLgDk6X44i4G4OmaORuguEpqDkLAzkaWg+E8GIUmaPIvEOVpzj2Lxbl6eo+G+S5in4OYPmOaJyjuTwjnYWpBg6DAjAqQZwkwJw" +;
		"NkKcJsEcEJCDBEpaD6Dw8BiapGjGSgfB2RpxmyBwgkicZ8haBw/g+M5TBcPQPlOXJskscp8jsMJMnMLJXDGTZzEyYw2kwMoDlcFw9i2M4/EGUJPg0CxFlENBtCcSJSnQfQ0m+SgPHsaJ7lALZLG6XZVHWDRfFqVY1k0ZxdladYTnifJUGaeAWAeMnSGcGWgBObJ3lWbwdjKW5cHcTZPHaLkN4GxXDlFqFsA4uRbBOGAFAEIzAsDEFOBkfYqR4D6AOBEYo8QuBvAmMceInBDgcD0JwOIqQyJ1DMAwG4IANDnHSMoK4QhOgMBGNEIQvQWAdGenETIswGiddsAAQAgCAgA==")
			oAppearance:Add(2,"gBFLBCJwBAEHhEJAAEhABeEGACAADACAxRDgMQBQKAAzAJBIYhkGYYYCgMZRUDGCYXABCEYRXBIZQ7BKNIxjSJwFgmEgADDFIBQSLAYROGSDJBGODJDjWGIeQLOEhQHIMRxPE6UYLhWYpBDKPYcUbGc7yBBMVwGf59XzACoKSheQIVSDQkw6Fo6NYhAxHALyNRkBy8f60KjtGpodDUJYvW5JYyjBZ8EznOqbJBkeJ7BgOe5NQjaD72VgdWQJFSWJajWYYJDOJY2ZAAE5TVINEwxJbDaylChIdxaF6WAzZEBhBYoATPNLBMrhWqKDw2XaQWBCOgwHYeR5LU7BdRwbIrRq2eAAXbcVyXfDddZlBK+QA0SK9lRVTKvJZmKgBWw1COSxmAAGw4kcNx1iKFBiCAfQsG8lJemucg7nsXpUHOOxrm+DI3jOH4XAOBx2nscw0j2HhPG4L5uGEVIECQCBCEUAYkGMHQHFGSBlGaAxkEgQgTGCVBsDYQhCgQJZrHK" +;
		"UggGEShkFGNgIlsNpPnMHJHD+TADAIJIJiIWIeCqChikiIgmgiD5zHyXxgiACJKCuC4jHiZgtg6I4IlkCQwkwOIonMPJjEkFhGhGZBpA4KoMBCGJuEiE5lAkGg7hMY4JEYVoUCUNAOE6FZl0KWQACWOR2GKF5mBmChchkJRZhoXYaCKKYqGuDglEmNhuhWZpIiYc4dCcCRqGmHZlgm2YxAwSQKESHwkFkKgpiAIAIH4PIimOOg2DiChoiQJRRD+TZDHCfwyAyCgyg+JpiioYJ/DgDgIlECQ6lwRAEICA=")
			oAppearance:Add(3,"CP:2 -2 0 2 0")
		oGrid:SetProperty("SelBackColor",0x1000000)
		oGrid:SetProperty("SelForeColor",AutomationTranslateColor( GraMakeRGBColor  ( { 0,0,0 } )  , .F. ))
		oGrid:SetProperty("Background",19/*exShowFocusRect*/,0x3ff0000)
		oGrid:LinesAtRoot := -1/*exLinesAtRoot*/
		oColumn := oGrid:Columns():Add("P1")
			oColumn:SetProperty("Def",0/*exCellHasCheckBox*/,.T.)
			oColumn:PartialCheck := .T.
		oItems := oGrid:Items()
			h := oItems:AddItem("Root")
			oItems:InsertItem(h,,"Child 1")
			oItems:InsertItem(h,,"Child 2")
			oItems:SetProperty("ExpandItem",h,.T.)
		oGrid:EndUpdate()

	oForm:Show()
	DO WHILE nEvent != xbeP_Quit
		nEvent := AppEvent( @mp1, @mp2, @oXbp )
		oXbp:handleEvent( nEvent, mp1, mp2 )
	ENDDO 
RETURN
1011:
I have a column right-aligned. How can I display its check box aligned to the right, as it appears to the left of the cell's caption

#include "AppEvent.ch"
#include "ActiveX.ch"

PROCEDURE Main
 	LOCAL oForm
	LOCAL nEvent := 0, mp1 := NIL, mp2 := NIL, oXbp := NIL
	LOCAL oGrid
	LOCAL oColumn,oColumn1,oColumn2
	LOCAL oColumns
	LOCAL oItems

	oForm := XbpDialog():new( AppDesktop() )
	oForm:drawingArea:clipChildren := .T.
	oForm:create( ,,{100,100}, {640,480},, .F. )
	oForm:close  := {|| PostAppEvent( xbeP_Quit )}

	oGrid := XbpActiveXControl():new( oForm:drawingArea )
	oGrid:CLSID  := "Exontrol.Grid.1" /*{101EE60F-7B07-48B0-A13A-F32BAE7DA165}*/
	oGrid:create(,, {10,60},{610,370} )

		oGrid:BeginUpdate()
		oGrid:ColumnAutoResize := .T.
		oGrid:DrawGridLines := 2/*exVLines*/
		oColumns := oGrid:Columns()
			oColumn := oColumns:Add("Left")
				oColumn:AllowSizing := .F.
				oColumn:Width := 96
				oColumn:SetProperty("Def",0/*exCellHasCheckBox*/,.T.)
				oColumn:FormatColumn := "0 pos `A-Z`"
			oColumn1 := oColumns:Add("Center")
				oColumn1:HeaderAlignment := 1/*CenterAlignment*/
				oColumn1:Alignment := oColumn1:HeaderAlignment()
				oColumn1:AllowSizing := .F.
				oColumn1:Width := 96
				oColumn1:SetProperty("Def",0/*exCellHasCheckBox*/,.T.)
				oColumn1:FormatColumn := "0 pos `A-Z`"
			oColumn2 := oColumns:Add("Right")
				oColumn2:HeaderAlignment := 2/*RightAlignment*/
				oColumn2:Alignment := oColumn2:HeaderAlignment()
				oColumn2:AllowSizing := .F.
				oColumn2:Width := 96
				oColumn2:SetProperty("Def",0/*exCellHasCheckBox*/,.T.)
				oColumn2:FormatColumn := "0 pos `A-Z`"
				oColumn2:SetProperty("Def",34/*exCellDrawPartsOrder*/,"caption,check,icon,icons,picture")
			oColumns:Add("")
		oItems := oGrid:Items()
			oItems:SetProperty("CellState",oItems:AddItem("Item 1"),3,1)
			oItems:SetProperty("CellState",oItems:AddItem("Item 2"),2,1)
			oItems:SetProperty("CellState",oItems:AddItem("Item 3"),1,1)
		oGrid:EndUpdate()

	oForm:Show()
	DO WHILE nEvent != xbeP_Quit
		nEvent := AppEvent( @mp1, @mp2, @oXbp )
		oXbp:handleEvent( nEvent, mp1, mp2 )
	ENDDO 
RETURN
1010:
Can I display the column's multiple-lines caption vertically oriented (method 2)

#include "AppEvent.ch"
#include "ActiveX.ch"

PROCEDURE Main
 	LOCAL oForm
	LOCAL nEvent := 0, mp1 := NIL, mp2 := NIL, oXbp := NIL
	LOCAL oGrid
	LOCAL oColumn,oColumn1,oColumn2
	LOCAL oColumns
	LOCAL oItems

	oForm := XbpDialog():new( AppDesktop() )
	oForm:drawingArea:clipChildren := .T.
	oForm:create( ,,{100,100}, {640,480},, .F. )
	oForm:close  := {|| PostAppEvent( xbeP_Quit )}

	oGrid := XbpActiveXControl():new( oForm:drawingArea )
	oGrid:CLSID  := "Exontrol.Grid.1" /*{101EE60F-7B07-48B0-A13A-F32BAE7DA165}*/
	oGrid:create(,, {10,60},{610,370} )

		oGrid:BeginUpdate()
		oGrid:HeaderHeight := 48
		oGrid:ColumnAutoResize := .T.
		oColumns := oGrid:Columns()
			oColumns:Add("And others ...")
			oColumn := oColumns:Add("")
				oColumn:HTMLCaption := "First Column"
				oColumn:HeaderVertical := .T.
				oColumn:Width := 36
				oColumn:AllowSizing := .F.
				oColumn:SetProperty("Def",0/*exCellHasCheckBox*/,.T.)
				oColumn:SetProperty("Def",48/*exCellPaddingLeft*/,8)
				oColumn:Position := 0
			oColumn1 := oColumns:Add("")
				oColumn1:HTMLCaption := "<c><b>Second Column"
				oColumn1:HeaderVertical := .T.
				oColumn1:Width := 36
				oColumn1:AllowSizing := .F.
				oColumn1:SetProperty("Def",0/*exCellHasCheckBox*/,.T.)
				oColumn1:SetProperty("Def",48/*exCellPaddingLeft*/,8)
				oColumn1:Position := 1
			oColumn2 := oColumns:Add("")
				oColumn2:HTMLCaption := "<r>Third Column"
				oColumn2:HeaderVertical := .T.
				oColumn2:Width := 36
				oColumn2:AllowSizing := .F.
				oColumn2:SetProperty("Def",0/*exCellHasCheckBox*/,.T.)
				oColumn2:SetProperty("Def",48/*exCellPaddingLeft*/,8)
				oColumn2:Position := 2
		oItems := oGrid:Items()
			oItems:SetProperty("CellState",oItems:AddItem("Item 1"),3,1)
			oItems:SetProperty("CellState",oItems:AddItem("Item 2"),2,1)
			oItems:SetProperty("CellState",oItems:AddItem("Item 3"),1,1)
		oGrid:EndUpdate()

	oForm:Show()
	DO WHILE nEvent != xbeP_Quit
		nEvent := AppEvent( @mp1, @mp2, @oXbp )
		oXbp:handleEvent( nEvent, mp1, mp2 )
	ENDDO 
RETURN
1009:
Can I display the column's multiple-lines caption vertically oriented (method 1)

#include "AppEvent.ch"
#include "ActiveX.ch"

PROCEDURE Main
 	LOCAL oForm
	LOCAL nEvent := 0, mp1 := NIL, mp2 := NIL, oXbp := NIL
	LOCAL oGrid
	LOCAL oColumn,oColumn1,oColumn2
	LOCAL oColumns
	LOCAL oItems

	oForm := XbpDialog():new( AppDesktop() )
	oForm:drawingArea:clipChildren := .T.
	oForm:create( ,,{100,100}, {640,480},, .F. )
	oForm:close  := {|| PostAppEvent( xbeP_Quit )}

	oGrid := XbpActiveXControl():new( oForm:drawingArea )
	oGrid:CLSID  := "Exontrol.Grid.1" /*{101EE60F-7B07-48B0-A13A-F32BAE7DA165}*/
	oGrid:create(,, {10,60},{610,370} )

		oGrid:BeginUpdate()
		oGrid:HeaderHeight := 48
		oGrid:HeaderSingleLine := .F.
		oGrid:ColumnAutoResize := .T.
		oColumns := oGrid:Columns()
			oColumns:Add("And others ...")
			oColumn := oColumns:Add("First Column")
				oColumn:HeaderVertical := .T.
				oColumn:Width := 36
				oColumn:AllowSizing := .F.
				oColumn:SetProperty("Def",0/*exCellHasCheckBox*/,.T.)
				oColumn:SetProperty("Def",48/*exCellPaddingLeft*/,8)
				oColumn:Position := 0
			oColumn1 := oColumns:Add("Second Column")
				oColumn1:HeaderBold := .T.
				oColumn1:HeaderVertical := .T.
				oColumn1:Width := 36
				oColumn1:AllowSizing := .F.
				oColumn1:SetProperty("Def",0/*exCellHasCheckBox*/,.T.)
				oColumn1:SetProperty("Def",48/*exCellPaddingLeft*/,8)
				oColumn1:Position := 1
			oColumn2 := oColumns:Add("Third Column")
				oColumn2:HeaderVertical := .T.
				oColumn2:Width := 36
				oColumn2:AllowSizing := .F.
				oColumn2:SetProperty("Def",0/*exCellHasCheckBox*/,.T.)
				oColumn2:SetProperty("Def",48/*exCellPaddingLeft*/,8)
				oColumn2:Position := 2
		oItems := oGrid:Items()
			oItems:SetProperty("CellState",oItems:AddItem("Item 1"),3,1)
			oItems:SetProperty("CellState",oItems:AddItem("Item 2"),2,1)
			oItems:SetProperty("CellState",oItems:AddItem("Item 3"),1,1)
		oGrid:EndUpdate()

	oForm:Show()
	DO WHILE nEvent != xbeP_Quit
		nEvent := AppEvent( @mp1, @mp2, @oXbp )
		oXbp:handleEvent( nEvent, mp1, mp2 )
	ENDDO 
RETURN
1008:
Can I display the column's caption vertically oriented (method 2)

#include "AppEvent.ch"
#include "ActiveX.ch"

PROCEDURE Main
 	LOCAL oForm
	LOCAL nEvent := 0, mp1 := NIL, mp2 := NIL, oXbp := NIL
	LOCAL oGrid
	LOCAL oColumn,oColumn1,oColumn2
	LOCAL oColumns
	LOCAL oItems

	oForm := XbpDialog():new( AppDesktop() )
	oForm:drawingArea:clipChildren := .T.
	oForm:create( ,,{100,100}, {640,480},, .F. )
	oForm:close  := {|| PostAppEvent( xbeP_Quit )}

	oGrid := XbpActiveXControl():new( oForm:drawingArea )
	oGrid:CLSID  := "Exontrol.Grid.1" /*{101EE60F-7B07-48B0-A13A-F32BAE7DA165}*/
	oGrid:create(,, {10,60},{610,370} )

		oGrid:BeginUpdate()
		oGrid:HeaderHeight := 48
		oGrid:ColumnAutoResize := .T.
		oColumns := oGrid:Columns()
			oColumns:Add("And others ...")
			oColumn := oColumns:Add("")
				oColumn:HTMLCaption := "First"
				oColumn:HeaderVertical := .T.
				oColumn:Width := 20
				oColumn:AllowSizing := .F.
				oColumn:SetProperty("Def",0/*exCellHasCheckBox*/,.T.)
				oColumn:Position := 0
			oColumn1 := oColumns:Add("")
				oColumn1:HTMLCaption := "<c><b>Second"
				oColumn1:HeaderVertical := .T.
				oColumn1:Width := 20
				oColumn1:AllowSizing := .F.
				oColumn1:SetProperty("Def",0/*exCellHasCheckBox*/,.T.)
				oColumn1:Position := 1
			oColumn2 := oColumns:Add("")
				oColumn2:HTMLCaption := "<r>Third"
				oColumn2:HeaderVertical := .T.
				oColumn2:Width := 20
				oColumn2:AllowSizing := .F.
				oColumn2:SetProperty("Def",0/*exCellHasCheckBox*/,.T.)
				oColumn2:Position := 2
		oItems := oGrid:Items()
			oItems:SetProperty("CellState",oItems:AddItem("Item 1"),3,1)
			oItems:SetProperty("CellState",oItems:AddItem("Item 2"),2,1)
			oItems:SetProperty("CellState",oItems:AddItem("Item 3"),1,1)
		oGrid:EndUpdate()

	oForm:Show()
	DO WHILE nEvent != xbeP_Quit
		nEvent := AppEvent( @mp1, @mp2, @oXbp )
		oXbp:handleEvent( nEvent, mp1, mp2 )
	ENDDO 
RETURN
1007:
Can I display the column's caption vertically oriented (method 1)

#include "AppEvent.ch"
#include "ActiveX.ch"

PROCEDURE Main
 	LOCAL oForm
	LOCAL nEvent := 0, mp1 := NIL, mp2 := NIL, oXbp := NIL
	LOCAL oGrid
	LOCAL oColumn,oColumn1,oColumn2
	LOCAL oColumns
	LOCAL oItems

	oForm := XbpDialog():new( AppDesktop() )
	oForm:drawingArea:clipChildren := .T.
	oForm:create( ,,{100,100}, {640,480},, .F. )
	oForm:close  := {|| PostAppEvent( xbeP_Quit )}

	oGrid := XbpActiveXControl():new( oForm:drawingArea )
	oGrid:CLSID  := "Exontrol.Grid.1" /*{101EE60F-7B07-48B0-A13A-F32BAE7DA165}*/
	oGrid:create(,, {10,60},{610,370} )

		oGrid:BeginUpdate()
		oGrid:HeaderHeight := 48
		oGrid:ColumnAutoResize := .T.
		oColumns := oGrid:Columns()
			oColumns:Add("And others ...")
			oColumn := oColumns:Add("First")
				oColumn:HeaderVertical := .T.
				oColumn:Width := 20
				oColumn:AllowSizing := .F.
				oColumn:SetProperty("Def",0/*exCellHasCheckBox*/,.T.)
				oColumn:Position := 0
			oColumn1 := oColumns:Add("Second")
				oColumn1:HeaderBold := .T.
				oColumn1:HeaderVertical := .T.
				oColumn1:Width := 20
				oColumn1:AllowSizing := .F.
				oColumn1:SetProperty("Def",0/*exCellHasCheckBox*/,.T.)
				oColumn1:Position := 1
			oColumn2 := oColumns:Add("Third")
				oColumn2:HeaderVertical := .T.
				oColumn2:Width := 20
				oColumn2:AllowSizing := .F.
				oColumn2:SetProperty("Def",0/*exCellHasCheckBox*/,.T.)
				oColumn2:Position := 2
		oItems := oGrid:Items()
			oItems:SetProperty("CellState",oItems:AddItem("Item 1"),3,1)
			oItems:SetProperty("CellState",oItems:AddItem("Item 2"),2,1)
			oItems:SetProperty("CellState",oItems:AddItem("Item 3"),1,1)
		oGrid:EndUpdate()

	oForm:Show()
	DO WHILE nEvent != xbeP_Quit
		nEvent := AppEvent( @mp1, @mp2, @oXbp )
		oXbp:handleEvent( nEvent, mp1, mp2 )
	ENDDO 
RETURN
1006:
How do I automatically bold items being checked

PROCEDURE OnCellStateChanged(oGrid,Item,ColIndex)

RETURN

#include "AppEvent.ch"
#include "ActiveX.ch"

PROCEDURE Main
 	LOCAL oForm
	LOCAL nEvent := 0, mp1 := NIL, mp2 := NIL, oXbp := NIL
	LOCAL oGrid
	LOCAL oConditionalFormat
	LOCAL oItems

	oForm := XbpDialog():new( AppDesktop() )
	oForm:drawingArea:clipChildren := .T.
	oForm:create( ,,{100,100}, {640,480},, .F. )
	oForm:close  := {|| PostAppEvent( xbeP_Quit )}

	oGrid := XbpActiveXControl():new( oForm:drawingArea )
	oGrid:CLSID  := "Exontrol.Grid.1" /*{101EE60F-7B07-48B0-A13A-F32BAE7DA165}*/
	oGrid:create(,, {10,60},{610,370} )

		oGrid:CellStateChanged := {|Item,ColIndex| OnCellStateChanged(oGrid,Item,ColIndex)} /*Fired after cell's state has been changed.*/

		oGrid:BeginUpdate()
		oGrid:SelBackMode := 1/*exTransparent*/
		oConditionalFormat := oGrid:ConditionalFormats():Add("%CS0","check")
			oConditionalFormat:Bold := .T.
		oGrid:Columns():Add("Items"):SetProperty("Def",0/*exCellHasCheckBox*/,.T.)
		oGrid:Columns():Add(oGrid:ConditionalFormats:Item("check"):Expression()):FormatColumn := oGrid:ConditionalFormats:Item("check"):Expression()
		oItems := oGrid:Items()
			oItems:AddItem("Item 1")
			oItems:SetProperty("CellState",oItems:AddItem("Item 2"),0,1)
			oItems:AddItem("Item 3")
		oGrid:EndUpdate()

	oForm:Show()
	DO WHILE nEvent != xbeP_Quit
		nEvent := AppEvent( @mp1, @mp2, @oXbp )
		oXbp:handleEvent( nEvent, mp1, mp2 )
	ENDDO 
RETURN
1005:
How can I use the CellState with ConditionalFormat/ComputedField/FormatColumn

PROCEDURE OnCellStateChanged(oGrid,Item,ColIndex)

RETURN

#include "AppEvent.ch"
#include "ActiveX.ch"

PROCEDURE Main
 	LOCAL oForm
	LOCAL nEvent := 0, mp1 := NIL, mp2 := NIL, oXbp := NIL
	LOCAL oGrid
	LOCAL oColumn,oColumn1
	LOCAL oItems
	LOCAL h

	oForm := XbpDialog():new( AppDesktop() )
	oForm:drawingArea:clipChildren := .T.
	oForm:create( ,,{100,100}, {640,480},, .F. )
	oForm:close  := {|| PostAppEvent( xbeP_Quit )}

	oGrid := XbpActiveXControl():new( oForm:drawingArea )
	oGrid:CLSID  := "Exontrol.Grid.1" /*{101EE60F-7B07-48B0-A13A-F32BAE7DA165}*/
	oGrid:create(,, {10,60},{610,370} )

		oGrid:CellStateChanged := {|Item,ColIndex| OnCellStateChanged(oGrid,Item,ColIndex)} /*Fired after cell's state has been changed.*/

		oGrid:BeginUpdate()
		oGrid:LinesAtRoot := 4/*exGroupLinesInsideLeaf*/
		oGrid:SelBackMode := 1/*exTransparent*/
		oColumn := oGrid:Columns():Add("Items")
			oColumn:SetProperty("Def",0/*exCellHasCheckBox*/,.T.)
			oColumn:PartialCheck := .T.
		oColumn1 := oGrid:Columns():Add("Format")
			oColumn1:FormatColumn := "%CS0"
			oColumn1:Caption := oColumn1:FormatColumn()
			oColumn1:SetProperty("Def",5/*exCellForeColor*/,8421504)
			oColumn1:SetProperty("Def",8/*exHeaderForeColor*/,oColumn1:Def(5/*exCellForeColor*/))
		oItems := oGrid:Items()
			h := oItems:AddItem("Root")
			oItems:InsertItem(h,,"Item 1")
			oItems:SetProperty("CellState",oItems:InsertItem(h,,"Item 2"),0,1)
			oItems:SetProperty("CellState",oItems:InsertItem(h,,"Item 3"),0,1)
			oItems:SetProperty("ExpandItem",h,.T.)
		oGrid:EndUpdate()

	oForm:Show()
	DO WHILE nEvent != xbeP_Quit
		nEvent := AppEvent( @mp1, @mp2, @oXbp )
		oXbp:handleEvent( nEvent, mp1, mp2 )
	ENDDO 
RETURN
1004:
How can I use the CellData with ConditionalFormat/ComputedField/FormatColumn

#include "AppEvent.ch"
#include "ActiveX.ch"

PROCEDURE Main
 	LOCAL oForm
	LOCAL nEvent := 0, mp1 := NIL, mp2 := NIL, oXbp := NIL
	LOCAL oGrid
	LOCAL oColumn
	LOCAL oItems

	oForm := XbpDialog():new( AppDesktop() )
	oForm:drawingArea:clipChildren := .T.
	oForm:create( ,,{100,100}, {640,480},, .F. )
	oForm:close  := {|| PostAppEvent( xbeP_Quit )}

	oGrid := XbpActiveXControl():new( oForm:drawingArea )
	oGrid:CLSID  := "Exontrol.Grid.1" /*{101EE60F-7B07-48B0-A13A-F32BAE7DA165}*/
	oGrid:create(,, {10,60},{610,370} )

		oGrid:BeginUpdate()
		oGrid:Columns():Add("Items")
		oColumn := oGrid:Columns():Add("Format")
			oColumn:FormatColumn := "%CD0"
			oColumn:Caption := oColumn:FormatColumn()
			oColumn:SetProperty("Def",5/*exCellForeColor*/,8421504)
			oColumn:SetProperty("Def",8/*exHeaderForeColor*/,oColumn:Def(5/*exCellForeColor*/))
		oItems := oGrid:Items()
			oItems:SetProperty("CellData",oItems:AddItem("Item 1"),0,1234)
			oItems:SetProperty("CellData",oItems:AddItem("Item 2"),0,"this is just an user data")
			oItems:SetProperty("CellData",oItems:AddItem("Item 3"),0,"01/01/2001")
		oGrid:EndUpdate()

	oForm:Show()
	DO WHILE nEvent != xbeP_Quit
		nEvent := AppEvent( @mp1, @mp2, @oXbp )
		oXbp:handleEvent( nEvent, mp1, mp2 )
	ENDDO 
RETURN
1003:
How can I use the CellValue/CellCaption with ConditionalFormat/ComputedField/FormatColumn

#include "AppEvent.ch"
#include "ActiveX.ch"

PROCEDURE Main
 	LOCAL oForm
	LOCAL nEvent := 0, mp1 := NIL, mp2 := NIL, oXbp := NIL
	LOCAL oGrid
	LOCAL oColumn,oColumn1,oColumn2
	LOCAL oEditor
	LOCAL oItems

	oForm := XbpDialog():new( AppDesktop() )
	oForm:drawingArea:clipChildren := .T.
	oForm:create( ,,{100,100}, {640,480},, .F. )
	oForm:close  := {|| PostAppEvent( xbeP_Quit )}

	oGrid := XbpActiveXControl():new( oForm:drawingArea )
	oGrid:CLSID  := "Exontrol.Grid.1" /*{101EE60F-7B07-48B0-A13A-F32BAE7DA165}*/
	oGrid:create(,, {10,60},{610,370} )

		oGrid:BeginUpdate()
		oColumn := oGrid:Columns():Add("Items")
			oEditor := oColumn:Editor()
				oEditor:EditType := 3/*DropDownListType*/
				oEditor:AddItem(1,"Item 1")
				oEditor:AddItem(2,"Item 2")
				oEditor:AddItem(3,"Item 3")
		oColumn1 := oGrid:Columns():Add("Format")
			oColumn1:FormatColumn := "%0"
			oColumn1:Caption := oColumn1:FormatColumn()
			oColumn1:SetProperty("Def",5/*exCellForeColor*/,8421504)
			oColumn1:SetProperty("Def",8/*exHeaderForeColor*/,oColumn1:Def(5/*exCellForeColor*/))
			oColumn1:AllowSizing := .F.
		oColumn2 := oGrid:Columns():Add("Format")
			oColumn2:FormatColumn := "%C0"
			oColumn2:Caption := oColumn2:FormatColumn()
			oColumn2:SetProperty("Def",5/*exCellForeColor*/,8421504)
			oColumn2:SetProperty("Def",8/*exHeaderForeColor*/,oColumn2:Def(5/*exCellForeColor*/))
			oColumn2:AllowSizing := .F.
		oItems := oGrid:Items()
			oItems:AddItem(1)
			oItems:SetProperty("CellValue",oItems:AddItem(0),0,2)
			oItems:AddItem(2)
		oGrid:EndUpdate()

	oForm:Show()
	DO WHILE nEvent != xbeP_Quit
		nEvent := AppEvent( @mp1, @mp2, @oXbp )
		oXbp:handleEvent( nEvent, mp1, mp2 )
	ENDDO 
RETURN
1002:
Can I display the radio-button with a solid color

#include "AppEvent.ch"
#include "ActiveX.ch"

PROCEDURE Main
 	LOCAL oForm
	LOCAL nEvent := 0, mp1 := NIL, mp2 := NIL, oXbp := NIL
	LOCAL oGrid
	LOCAL oItems

	oForm := XbpDialog():new( AppDesktop() )
	oForm:drawingArea:clipChildren := .T.
	oForm:create( ,,{100,100}, {640,480},, .F. )
	oForm:close  := {|| PostAppEvent( xbeP_Quit )}

	oGrid := XbpActiveXControl():new( oForm:drawingArea )
	oGrid:CLSID  := "Exontrol.Grid.1" /*{101EE60F-7B07-48B0-A13A-F32BAE7DA165}*/
	oGrid:create(,, {10,60},{610,370} )

		oGrid:BeginUpdate()
		oGrid:SetProperty("RadioImage",.F.,32699122)
		oGrid:SetProperty("RadioImage",.T.,16777216)
		oGrid:Columns():Add("Check"):SetProperty("Def",1/*exCellHasRadioButton*/,.T.)
		oItems := oGrid:Items()
			oItems:AddItem("Radio 1")
			oItems:SetProperty("CellState",oItems:AddItem("Radio 2"),0,1)
			oItems:AddItem("Radio 1")
		oGrid:EndUpdate()

	oForm:Show()
	DO WHILE nEvent != xbeP_Quit
		nEvent := AppEvent( @mp1, @mp2, @oXbp )
		oXbp:handleEvent( nEvent, mp1, mp2 )
	ENDDO 
RETURN
1001:
Can I display the check-box with a solid color

#include "AppEvent.ch"
#include "ActiveX.ch"

PROCEDURE Main
 	LOCAL oForm
	LOCAL nEvent := 0, mp1 := NIL, mp2 := NIL, oXbp := NIL
	LOCAL oGrid
	LOCAL oItems

	oForm := XbpDialog():new( AppDesktop() )
	oForm:drawingArea:clipChildren := .T.
	oForm:create( ,,{100,100}, {640,480},, .F. )
	oForm:close  := {|| PostAppEvent( xbeP_Quit )}

	oGrid := XbpActiveXControl():new( oForm:drawingArea )
	oGrid:CLSID  := "Exontrol.Grid.1" /*{101EE60F-7B07-48B0-A13A-F32BAE7DA165}*/
	oGrid:create(,, {10,60},{610,370} )

		oGrid:BeginUpdate()
		oGrid:SetProperty("CheckImage",0/*Unchecked*/,32699122)
		oGrid:SetProperty("CheckImage",1/*Checked*/,16777216)
		oGrid:Columns():Add("Check"):SetProperty("Def",0/*exCellHasCheckBox*/,.T.)
		oItems := oGrid:Items()
			oItems:AddItem("Check 1")
			oItems:SetProperty("CellState",oItems:AddItem("Check 2"),0,1)
			oItems:AddItem("Check 3")
		oGrid:EndUpdate()

	oForm:Show()
	DO WHILE nEvent != xbeP_Quit
		nEvent := AppEvent( @mp1, @mp2, @oXbp )
		oXbp:handleEvent( nEvent, mp1, mp2 )
	ENDDO 
RETURN