110
ImageSize property on 32 (specifies the size of control' icons/images/check-boxes/radio-buttons)

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

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

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

	oTreeCube := XbpActiveXControl():new( oForm:drawingArea )
	oTreeCube:CLSID  := "Exontrol.TreeCube.1" /*{13A5B44B-DBB7-42F2-AE2B-943A6CF6C8B9}*/
	oTreeCube:create(,, {10,60},{610,370} )

		oTreeCube:BeginUpdate()
		oTreeCube:TexturePicturePath := ""
		oTreeCube:ImageSize := 32
		oTreeCube:Font():Size := 16
		oTreeCube:CheckBoxWidth := 32
		oTreeCube:CheckBoxHeight := 32
		oTreeCube:Images("gBJJgBAIDAAEg4AEEKAD/hz/EMNh8TIRNGwAjEZAEXjAojKAjMLjABhkaABAk0plUrlktl0vmExmUzmk1m03nE5nU7nk9miAoE+oVDolFo1HpFJpU5h8Sf9OqFNqUOqNUqdPq9VrFWrlbr1QpdhAFAkFis1ntFptVrtkrpszrNvmVxqk3uVtm1kmF3sdBvF/wGBmV+j9BYGHwWJulfxdax2NyFdx2JlV6l9Nw7AAGZymdz2Cy2GxErvWcz9ivlwyV21cuxugwktzGIzmvwtl0+53U5y0a0Wazmmyu/3dCyOMyXHx/J5nIr9q3uyqnBxFN3G46ma4vb7mD2Ng4nZze00fDkHC7t7us2rOX5tguetpHRlmz4HVqnXk1PjHO+CMPo9MBMC+j2vC8j7wS8cFNI4kBo05UIvfCT/NsnsApU+0Fqg/T+oy/kPxC0sEQfErKQK96+w28UWRI8UGvO8sTLS9r2PWmsMJTDTask3CsIbIEQRA3shOXEEAO/GclJ9" +;
		"FEKrrA8FRbKMXRIlb0JxCkjS1LMswhCcvuel0cv26cSMa8Ufx+2sQwhEUoSXOCjSbLcnxjKc7sdKUVyq28NtVI71P9P7JxtQEapjQ6fzfM8zPfNE2PhIsLL63E40slk5y7N89LcyU9SvMb3SdUc6VJLj5VLVLfO/PS9KzNFHUa/0XyBD0dxlS9cxhMlTRSoNXypPErWDPyfNS+MwprRNO0FD8wVVZ1AI08URwVRjtJ1WCn21QkkUrXVLVPQS/XIkFgTxT9iONZ9xVTdq+L1eKg3kkF6Upe68XtfV51/MtrVjBlwYFL1ev8y1/P6/lyzzYl02wntj0RVFmS1Qa+M5as93QxEUW9e993rfmQ2+vy65M/mL1lhl/2bj2ByVduMtNhCJT9hdz41nN14Ld12Z9UjfI/oUAaGseiw6+uFLLhcVabJOS5RqOE0BHlZ5VnEr5fOMs3st+aa/bbRzrJGV51Y0b0DbqaWXZD90hIsPbjWu52+6Wyadpe66hhO+P/Xi" +;
		"oW5rD8ZbrUZuVg6n1dsE/cXmewu1m9PVwnd35/nueXho/NaJzmjc61W76esuT77eG8pTquy9TwWH8LEzG8RDfFalx3Gcfvna9rvG/cptGLd9tuI6TZOP5Fiqi99vea+X4VRcBq/JZZtVQ9cwSs5lsXE372+a9z7PbfB3VVqHyvMctLto8uob6eV0m/cD6MN2v+T33t6sBut42vdv2bJ8a997x2maFJfK+qArbGJPEKE+1qTflMsIdW/GCJX17KcT6/czr/X+u1g29B7j/4BQfWkkx4zIHisjhPCmE0K4SwtXM+d4BvHRwNZOoBph9IJvPek9d40FoMJxf691jj2ywQQcHEWET4XJwkTszlVqm2GokewxtBT1DpQjRxDN0rUVDNKdC3lb6tzNOwh6upMSSYfv4YBCl/bsn9PxiFCEo7SI6Obc9HeOrnY8x4jtHtdpN4GRbaorhsbu18Pph5CiHymI0RpSXGJ/z2oUOxYxG858AyiI+bfJtuTcG5yelBJy" +;
		"T8okhqFd4a5yxL0rvulYtKCsZiWxWkc1s1cRoxxwhA31DLE0mR9l9HqX8fJgTDmFMVH0MIsRzVYnwnMi1dyzmhLt2kS2pxIiU62Wj5ptQGlSYFakLonTUJNLKaM5WzlffEkuFkk5wTrhVO2eE7G6lJhxFFYUZ55zmn0WuBCD4pzhirFCKkbomsOoIYmZx5p90LoYWGPdD5g0QmJRKYxbZ6zYoVQ2jVGylSak7KSkFH6RSjpHKFuU+YMyNo5SulkC6I0vonTCitMXPoEpVS2H5FQfEqp2R1opIgAEkJISYARTCukOhmPNI5Ex/wzGHUsicMwA1LHgQ90Y/KpoQHAD+pB/R4NzIaMAB9Xaw1gqaAOsh/A/ptIkWUfhGK1kZH8RgH5GqvgArqRmt4AAPrTroRofBGADkqr6Rmu4D7CEaHARiwpJrEEZsXXwlVjyMWRsaRqwdkLGNBABZmytmyMnaINZqyVpLR2ftKAAAdd6h2osbaskdiq4EZtgSmyNcbVW" +;
		"RJNXe3AA7REar3b0stlAAXBtoRmvJGLjEYAHUWsFcwCD/rnaop9aEICMAPdK5hT6xpeuzdOtAgKuJeGfdq6ggEbkTvAP+p9UCHXrvKkcgIA==")
		oAppearance := oTreeCube:VisualAppearance()
			oAppearance:Add(1,"gBFLBCJwBAEHhEJAAEhABfICg6AADACAxRDgMQBQKAAzQFAYbhkGCGAAGMZxRgmFgAQhFcZQSKUOQTDKMIziaQAGgkNQwCSLIwjNIsBxPFKVQChEYxSjKA40SJNUgyj6CCY+QLIE5PfQgAL9I6eJABCCSQKkYx0HScRiwPBIbAZAYhCZqaKhWgkKI/WBQIABRDVLx5ESiLRtKy7Mq2bpvXBcNxXHalaztO68LxvKyqHb5fJ/PpgL4YHgmC4NQ7EMRwF6rfbyfZ7Xg/ORPTijZ4sdzMHTzJyscx3HqfaBoOaZU5eMLceTUMofHIndxCcasPbsOatVqjG5sYjcGC3La9cz3Pq/bpuDCbMxuaK1TrYXr1TTrcofBDldAxXRKDxRDWVhLnYOw9i6XxzjuXprCaOoKB6EwbiCZZCGOdZYlcT4xHmbhMnwNxtn+G5bmqdZ7n4Pw/i+X5zm+dQ9g4CAFjsfAJheOI8HsDoWDWTB/lwSAQkmA5PEgRYoDyDwYFY" +;
		"FoFmGCBmBqBphDgRJ0gOTIYBGRB/lyRh0iSCZbjYWJzgWDwIjYLoLmMCJGDKDJjBgWgqG6YhyhGHRzA2aJ1mCABOAiOJvhCZBJBYRoRmSCQmEqEQimkAZgg8TZnDCV4UkmCUmBKZYJGYWoWCUUhiFMNZckNUh2GENoaGaGZmgmJhqhqZpGGIEx2GYIxSGGGJdggWJth2Z4JmYeoemeSZ2H6H4hGmQhihyTRHGYLg7CiCgmgqIpokoNoOiOaJ4jqAochqaZGgaCxpAoZoaiaaJqEmWIcGgShcnCJwqEqFoR3YOoFlgchflqNouiuawHmWSYqGkWZQhcatzmaOoumuSp2j6L5bBaKo0GQKRnGGCxqiyCwmkqMpsksNpOGUGI7A0ew1G0Rxlg0PptgsZuDG2Sx2l6N5tnYNZZjUDRXDCVo5l2FoymqOpukuNpujubwLjmWY5k0ZwxkaFxYlWdp6j6b5Lnafo/nABQdg2FxcUsY5BkmXAkmeQpckwNRrkKTh" +;
		"8CSHZBk4NwyC4KxxgMDwakOMZDn8GgwnGAo2C4cwthMcwmCcMoHBMHRehwTIghySYNksZwcH4HBMEsHx5hyPItiweYxnwSZEH4Mozn0fR+DMAo7EYJ50gkdZelKdNql2UgJn0GIukwH4HicQRai2GI4mSVpNl0dZGledgNgcYpYDWUx3FsOQi5YV5anaTY3G6W53A2RxylydxFjiaxEFCCgBBAQ==")
			oAppearance:Add(2,"gBFLBCJwBAEHhEJAAEhABcoFg6AADACAxRDgMQBQKAAzQFAYbhkGCGAAGMZxRgmFgAQhFcZQSKUOQTDKMIziaQAGgkNQwCSLIwjNIsBxPFKVQChEYxSjKA40SJNUgyj6CCY+QLIE5PfQgAL9I6eJABCCSQKkYx0HScRiwPBIbAZAYhCZqaKhWgkKI/WBQIABRDVLx5ESiLRtKy7Mq2bpvXBcNxXHalaztO68LxvKyqHb5fJ/PpgL4YHgmC4NQ7EMRwF6rfbyfZ7Xg/ORPTijZ4sdzMHTzJyscx3HqfaBoOaZU5eMLceTUMofHIndxCcasPbsLpOS5LNKsaxmWLYdhFdTxQi6LpvfA8BwXC6JY7heRYRbFbYxRjGNi1TS7G4nGKd5WGuL4UHwI4VkaYxii8V4pgQMgVBQdQ5iCTYGi8T4vlWbJ3nuPg+l+H5AlSCg6ByPBoE8Ap3jqYxhBido5g0OgOGOGI4CsSpCCAcgcAuEokiEN5NCKfJ9DyTRjnS" +;
		"cg1CEYxOBmBpPCgagdgcIZoHoGIFA4AxQkCAxKAgKBwgGSpIBCZhjF2E5UnQPQMiMCJBCIBwxkSQgsgo+JtDKT4ziiQw+k6EwAnsOgLnkHI+yCQ4iEuE4klkPhShEJBpAoPgymOMoaDgHBjFMBgyD0HYTiCZSZhIIIGC4ChiHSew5kwM5omILZPiOBI0hwZw5kodIdA+M4Uj4PxOmMSJ9DuTQzmyZgviceZagaHVfj4awwmaAh2GUIYmCOEZZDaDRDFGdwcg4EwyHMN4LBOaJbCoaZqgKH8qkMfIyD8DozDyfA7A0Coui0OpMmOZJdCsahKg6NooioChwmEMxLEoXJbDUTRXGSUgykyMgQG0GpPHMdI3D4TRCgSeQ0kmaw+lGNAtCOZJVCiT5DhyRQwAqMg0EoDBBGEGAsASC5yiSCw+k4Mp6lWNQuksTpRjMTxDGzJwGmGMpDDKXYTECSAxl6Q5olkK4PgMMIVkASRMBMBgzEkaZEjsNALhIZA6AeQB" +;
		"gk0ZJEgAAJ0CIAgODMNIsD6DRih9uYwFyAwfCUb5ijmbI+gwdxkk8MZMGeMpPCkDxzBiC5MHMPJLDSSROFMLIoBEQogEMFJPnENYQGgE4DCOaJfC7tYkhGTQ0kyWwykuXpMiyRpKjKR4wngM4JmOWJACCdYtHMWw+Eych4nINYLAEYA8AgdAEEsQZajaQoog4GxPiMVIolcdxNG8XZVkmNoRwWRVBlFeFEeAZQJgnFiHgHwcAhjhHgGMSI5xki2CyA4EQsA3i0HkBsLwKRFgAHcPkHopBJBcBeDUYI7xyDOHqKkWo2hLCsDIBIY4qQ5A8DoMMYwOAqCSBGKgU4yB2iDBwIgB4hxQgAAWNgBoAgsBdEcBUQ4sQ9A/HqD0JI8RpBzH2OYVgahLBHFiJQJweQiDhDUE4SAARQAzFsG0EQwA6AOWSBkFgVAIBCHeGERQFQiCQHeFkC4vkiB8DyB4F4QxVDvGMNEOQexMjlBeOAKQiQLgfDA7QEAaRiBdEkH8" +;
		"TI7AZiFBAGYBIABWjYBiGACioQ4C1A+AMMgWhfgxHgPsT4URIB0COKgPgjRwiAB8AYUArxBgCF6J4GY5hrAOCAPAAoGRRCsCIMEXATXfgAF8BMJwURuEQDgD4Q4OBoAeHGFgLIwQrC2D0JoSQ+QvhrHoSgQI8AbDFGID8C4Ah6BQAQAASACwgCYCMAUMARAvCKAiAMCAokeCKBEOAKgCBoDaHuMsEAqwJDiACDURg8R6gPCyDofYWAhgoDIJ4ZAuhoiGAYGgRoQw/A0GMMga4GwxiEDeIYYInATCDBQAoBAwAoDlA0KMBoVRGiDGwDQUYIRsgaGGDgM4LAwDWB8EcIA1APhjEgGQVwgRIgjFIIQHokgZA+CSEkLIKQSjHAwMsCwDAsAEB2ABTIwRwD6A8CMToSxkAxE4HYIw+BsgbBEDAHYBwojCBoIYFgXSjABE4MsHIbQWhlGILQS4UhvBdAUKEEwHgxDAAABQQQUAhgKHiDwE4JS4A7BGLQZwCR4g" +;
		"aBEMUYAqgKApHgGwVAIRNgvBMMQXImwZDtE4I8UIyAZCDCAE8AwrhgAdEEBACQLRCg4FEB4AYtA7CdEiPQMoJAMDNCkOMCAXAFDhH0D0Q4EgfAaGSK4NYzRUj9BuCgAgswOBjB4Fqpw8B2ADAwE4A4Qx2DAE6JIaQPQGhAGKBcIQ5B5gHByKIFARwADbAyKUfgdBKBBGyEcVIAB/ijHoIoSA0gdBNl+OATYERZgBGSDYWIWAUCEGKA4FAhR7CIBtYQGYZg4CMAiKEcAOwkBjHWE8Z4lQgA+DkBoTohwwCeAaMEEgBQCCABgHMRwQRhhMEWFQd4HwZgwDqFESItAbAGEANCpINAzANCCJkK4ah+heFYBURwsQrS2CsMYMoWGBhYDWI0EInQgiApXaOVI1QFDsC8MUNoMBMA1HMJga4eh+BeAWOgNNowGjYzCGAAwax+iJBeBVT4gxoBIAGFsJFBxgBiGKFkKQ7g5DFFQEcAo4AzDDACKEQQLgCiJDYB0M" +;
		"gRBCCQAgQEA==")
			oAppearance:Add(3,"gBFLBCJwBAEHhEJAAEhABQ4Fg6AADACAxRDgMQBQKAAzQFAYbhkGCGAAGMZxRgmFgAQhFcZQSKUOQTDKMIziaQAGgkNQwCSLIwjNIsBxPFKVQChEYxSjKA40SJNUgyj6CCY+QLIE5PfQgAL9I6eJABCCSQKkYx0HScRiwPBIbAZAYhCZqaKhWgkKI/WBQIABRDVLx5ESiLRtKy7Mq2bpvXBcNxXHalaztO68LxvKyqHb5fJ/PpgL4YHgmC4NQ7EMRwF6rfbyfZ7Xg/ORPTijZ4sdzMHTzJyscx3HqfaBoOaZU5eMLceTUMofHIndxCcasPbsLpOS5LNKsaxmWLYdhFdTxQi6LpvfA8BwXC6JY7heRYRbFbYxRjGNi1TS7G4nGKd5WGuL4UHwI4VkaYxii8V4pgQMgVBQdQ5iCTYGi8T4vlWbJ3nuPg+l+H5AlSCg6ByPBoE8Ap3jqYxhBido5g0OgOGOGI4CsSpCCAcgcAuEosiYN5NHMOJ+D4TpTnS" +;
		"eQ7CEY4uBmBpPhgagdgcIZoHibIEyUBJZDQIJShoCgcCAcoyAQOYYlcZJ1D0DxDCiQgwEiAZMHEMJLFKPJ9D2DoDnidQ4k+Y5QmKEROBkIhKD0JIZDIS4TGUCQuEeEJjnOIg8CuY4RkYNgwGMM5RllGpThDRYIGKZIpCkJFUH0PINyWcQ3CaaZCG+HBnEOTJhD8Tx4GoeQ/GcaZSHOH5nCmQhshoZhihYYwhiYA4RlkNoNEMUZ3ByDjwEsPxOnMaJ9DuDR6F6GYmCmKh0nANtMioP4Gg8aoSiIO5NhodociqaY6GaFYkEyOg8lsNRNTaUgykyMgQG0GpPiONJbD8DpDEyfA6k0KwOkWMQsGsAJU0SagwkoJQJDIPISCQCJTGSUwyGaM4KkmMgtksHpFjAZ4TGCBAbgaSpcksdhNAMIJHHsD5TjSWWMAMOpwjyLwbk6cAz0KRJiDkDYzESCwiggcgcgYIQwCIEINCMCITj6TVxkMXp2j0cQLlCTo7E2F4" +;
		"ymkMZdhMPJHDGHpLAyVg+k4UwrCCSIyByDJ8DuDY8CiWY0kiXAXC6QJwFKGIjCeJpjgyezjlyDw6klHx5myRoMGwZwbkcToTEiew4kwbQfEmUgPkOKJUD4DpTHSHQmgkXI/ASTA1g0XIEDMTBimyfI7jSLYHEiUoPk0Fw/kadAsHGao8A0A5smEMJ2mNyg5gzJZwDgCpChyIZVyIZwFCMJEPASRkBqE+IcHInRcDxA2H4bIsx0AtDsIBpwZwYicD6BscwDwUBgHCIYaIfgtiVH2O4WgUwJjEFeAEQA7y4hMCiBMS4aRdB9A4CYE4LxljyBMHcDItBxinDCLcTYmgejBFQ9UTg9gFBOEmAQTI7A4iZGMGkQAWQ7jYA2HIL8BRAjDG4HcCwARbjZHiNoDw1nLDnGyNINQ+wjCpBMEgcovQUgICQJEcgWRuBvAyJ4d4ugpCUAINcHogxIgnDiM4N4axzD3F2JMTY/hRqYF6FsWIxhYAGGoAALQYgYirBwBE" +;
		"BwpAjBEAAIEIYsA2gOHCMAGgXAACIDmMITAUgFABH0D0I4WwvhNFGMAOIvxRD2GKNcMA8gjAPDCPwBogRPAxA8PgRwZRICYDED8RAXQEghEAN8DIgwIBdB4JYWwMgtiQHoFQKAiRFguFKGwGQhglDsEOVwEQQRkCKBwOIHgSREDRBYHEXQcQdD7GIGARQHRxipBrMobgewDCUCADsEYWAzgMHKHQDQxxsDzA6EMfAeQHB4GQDkUYPA0iECiKoGgRhcDdA2GMQA8AOCjDSPgHI4QnApAKBICwHg1A+BcAwcYsgbjGGQNkCIgRsA6EcBEWANADjsB0B8YYzQQDIGSBcEYZBCCPEkFIHQSgkgZAwG4IwBAbAYGGAgL4Ch4g8BOCQAA2KKC0GcAke4AAXAFCoHkDw4xbBFEcJkE4JRSiEFeJYKQVRMgJHODwX4xAgC/AsIIZAeAHDRG0HYI40RKCLEGDUI4jAghwBWIceA+whCpHMFYZYOQxglDMHMBQGxYj" +;
		"VHiAoBIPgfgHGwPsHYJRSB6A0IERQLhCjJHMA4OQoAoCOACLYGYSx8DpBQIMWQdRnDRH+DsE4fB3CeAmM67kAAXBFEIDYDI7wLBtEoEIfYNwjiUGGJQYQMAjCHEAO0C4zxW29CoCgfIxR9AKA6J8BgUAIhDGMIoJ40hqgwCgKETgnBhhqCGI0AIqgZhGDANQDIlBDCRGkCoJISR0g1BSKQOgfAzBRG0DYHARh4DeDAOwANuw8ApCKKkYg/RPhjBsH0J4yg5hPGWN0GwFBHQBFaDoQIURljFAoB4GgzRVzbBECQFQRQoguHGHANwDRdCKy8CgSIGwhhoDYJYYI1giBICSAEgI=")
		oTreeCube:SetProperty("Background",70/*exCheckBoxState0*/,0x1000000)
		oTreeCube:SetProperty("Background",71/*exCheckBoxState1*/,0x2000000)
		oTreeCube:SetProperty("Background",72/*exCheckBoxState2*/,0x3000000)
		oFaceTree := oTreeCube:FrontFace():CreateTree()
			oFaceTree:ShowSelection := .F.
			oFaceTree:DrawGridLines := -2/*exRowLines*/
			oFaceTree:ItemPadding := 16
			oColumn := oFaceTree:Columns():Add("<c><b>Check")
				oColumn:Alignment := 0/*LeftAlignment*/
				oColumn:SetProperty("Def",0/*exCellHasCheckBox*/,.T.)
			oFaceTree:Items():ToString := "Check A<img>1</img>,Check B<img>2</img>,Check C<img>3</img>"
			oFaceTree:ItemByIndex(1):SetProperty("State",0,1)
		oTreeCube:EndUpdate()

	oForm:Show()
	DO WHILE nEvent != xbeP_Quit
		nEvent := AppEvent( @mp1, @mp2, @oXbp )
		oXbp:handleEvent( nEvent, mp1, mp2 )
	ENDDO 
RETURN
109
ImageSize property on 16 (default) (specifies the size of control' icons)

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

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

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

	oTreeCube := XbpActiveXControl():new( oForm:drawingArea )
	oTreeCube:CLSID  := "Exontrol.TreeCube.1" /*{13A5B44B-DBB7-42F2-AE2B-943A6CF6C8B9}*/
	oTreeCube:create(,, {10,60},{610,370} )

		oTreeCube:BeginUpdate()
		oTreeCube:TexturePicturePath := ""
		oTreeCube:ImageSize := 16
		oTreeCube:Images("gBJJgBAIDAAEg4ACEKAD/hz/EMNh8TIRNGwAjEZAEXjAojJAjMLjABAAgjUYkUnlUrlktl0vmExmUzmk1m03nE5nU7nkrQCAntBoVDolFo1HoM/ADAplLptImdMYFOqdSqlXq1QrVbrlGpVWsFNrNdnNjsk7pQAtNroFnt0sh8Yr9iulTuNxs1Eu8OiT/vsnsNVutXlk/oGGtVKxGLxWNtsZtN8iUYuNvy0Zvd+xNYwdwvl4p870GCqc8vOeuVttmp1knyOayWVy+WzN/ze1wOElenm+12WUz/Bv2/3UyyWrzeutux2GSyGP2dQ33C1ur3GD3M4zUNzHdlWjq/E3nGzVpjWv4HA7fRy/Tv2IrN8rPW6nZ3ve7mUlfu20Z8acvQyb+vY9jasYoDwMm+LytVBDqKG3z8O3Cb8P+mkAuY9cCQ2uL4KaxDKvkp8RNLEjqugnrwQo/UWPzFyeQw5sNLZFENrI4kOqU66pw8uzmOKvTqNqjULJvGL1JO48GtT" +;
		"GsbLdEL3scxLlyiw8dQeoUVxdLTtyKmUjwGlslRPJsnK1HbAKbKCrsQo8uQk/CeP44iaR/ATnTNPLvyxPU+z9P9AUDQVBowiofJXQ6Oo+kKMpIkjztE4TKn4P6JowfgPnwD5/nAjB8AOeAPo0eAA1IAFH07UhAIMpYAVIYFHqBUhwVjV1S1EtQAHxW65V0AZwAeuQAnwB5gAPYViEDVhwAHTQBkCjB4gOhwDmCyhH0sACAg==")
		oFaceTree := oTreeCube:FrontFace():CreateTree()
			oFaceTree:ShowSelection := .F.
			oFaceTree:DrawGridLines := -2/*exRowLines*/
			oFaceTree:ItemPadding := 16
			oColumn := oFaceTree:Columns():Add("<c><b>Check")
				oColumn:Alignment := 0/*LeftAlignment*/
				oColumn:SetProperty("Def",0/*exCellHasCheckBox*/,.T.)
			oFaceTree:Items():ToString := "Check A<img>1</img>,Check B<img>2</img>,Check C<img>3</img>"
			oFaceTree:ItemByIndex(1):SetProperty("State",0,1)
		oTreeCube:EndUpdate()

	oForm:Show()
	DO WHILE nEvent != xbeP_Quit
		nEvent := AppEvent( @mp1, @mp2, @oXbp )
		oXbp:handleEvent( nEvent, mp1, mp2 )
	ENDDO 
RETURN
108
How can I add a hierarchy (multiple-columns), using the Item.ToString method

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

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

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

	oTreeCube := XbpActiveXControl():new( oForm:drawingArea )
	oTreeCube:CLSID  := "Exontrol.TreeCube.1" /*{13A5B44B-DBB7-42F2-AE2B-943A6CF6C8B9}*/
	oTreeCube:create(,, {10,60},{610,370} )

		oTreeCube:TexturePicturePath := ""
		oFaceTree := oTreeCube:FrontFace():CreateTree()
			oFaceTree:LinesAtRoot := -1/*exLinesAtRoot*/
			oFaceTree:Columns():Add(Transform(1,"")):Alignment := 0/*LeftAlignment*/
			oFaceTree:Columns():Add(Transform(2,"")):Alignment := 0/*LeftAlignment*/
			oFaceTree:Columns():Add(Transform(3,"")):Alignment := 0/*LeftAlignment*/
			oFaceTree:Items():ToString := "Root 1;Root 2;Root 3(Child1.1;Child2.1;Child3.1(SubChild 1.1;SubChild 2.1;SubChild 3.1,SubChild 2.1;SubChild 2.2;SubChild 2.3),Child 1.2;Child 2.2;Child 3.2)"
			oFaceTree:Items():ExpandAll()
			DevOut( oFaceTree:Items:Item(0):ToString() )

	oForm:Show()
	DO WHILE nEvent != xbeP_Quit
		nEvent := AppEvent( @mp1, @mp2, @oXbp )
		oXbp:handleEvent( nEvent, mp1, mp2 )
	ENDDO 
RETURN
107
How can I add a hierarchy (single column), using the Item.ToString method

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

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

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

	oTreeCube := XbpActiveXControl():new( oForm:drawingArea )
	oTreeCube:CLSID  := "Exontrol.TreeCube.1" /*{13A5B44B-DBB7-42F2-AE2B-943A6CF6C8B9}*/
	oTreeCube:create(,, {10,60},{610,370} )

		oTreeCube:TexturePicturePath := ""
		oFaceTree := oTreeCube:FrontFace():CreateTree()
			oFaceTree:LinesAtRoot := -1/*exLinesAtRoot*/
			oFaceTree:Columns():Add(""):Alignment := 0/*LeftAlignment*/
			oFaceTree:Items():Count := 1
			oFaceTree:Items:Item(0):ToString := "Root(Child1(SubChild 1,SubChild 2),Child2)"
			oFaceTree:Items():ExpandAll()
			DevOut( oFaceTree:Items:Item(0):ToString() )

	oForm:Show()
	DO WHILE nEvent != xbeP_Quit
		nEvent := AppEvent( @mp1, @mp2, @oXbp )
		oXbp:handleEvent( nEvent, mp1, mp2 )
	ENDDO 
RETURN
106
How can add items to a list

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

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

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

	oTreeCube := XbpActiveXControl():new( oForm:drawingArea )
	oTreeCube:CLSID  := "Exontrol.TreeCube.1" /*{13A5B44B-DBB7-42F2-AE2B-943A6CF6C8B9}*/
	oTreeCube:create(,, {10,60},{610,370} )

		oTreeCube:TexturePicturePath := ""
		oFaceTree := oTreeCube:FrontFace():CreateTree()
			oFaceTree:Columns():Add("Pos"):FormatColumn := "1 pos ``"
			oFaceTree:Items():Count := oTreeCube:FrontFace():FaceTree():VisibleItemsCount()

	oForm:Show()
	DO WHILE nEvent != xbeP_Quit
		nEvent := AppEvent( @mp1, @mp2, @oXbp )
		oXbp:handleEvent( nEvent, mp1, mp2 )
	ENDDO 
RETURN
105
How can I split a cell

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

PROCEDURE Main
 	LOCAL oForm
	LOCAL nEvent := 0, mp1 := NIL, mp2 := NIL, oXbp := NIL
	LOCAL oFace
	LOCAL oFaceTree
	LOCAL oItem,oItem1
	LOCAL oItems
	LOCAL oTreeCube
	LOCAL s

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

	oTreeCube := XbpActiveXControl():new( oForm:drawingArea )
	oTreeCube:CLSID  := "Exontrol.TreeCube.1" /*{13A5B44B-DBB7-42F2-AE2B-943A6CF6C8B9}*/
	oTreeCube:create(,, {10,60},{610,370} )

		oTreeCube:BeginUpdate()
		oTreeCube:TexturePicturePath := ""
		oTreeCube:SetProperty("HTMLPicture","P1","c:\exontrol\images\zipdisk.gif")
		oTreeCube:SetProperty("HTMLPicture","P2","c:\exontrol\images\auction.gif")
		oTreeCube:SetProperty("HTMLPicture","P3","c:\exontrol\images\colorize.gif")
		oTreeCube:SetProperty("HTMLPicture","P4","c:\exontrol\images\auction.gif")
		oFace := oTreeCube:FrontFace()
			oFaceTree := oFace:CreateTree()
				oFaceTree:Columns():Add("Default"):Alignment := 0/*LeftAlignment*/
				oItems := oFaceTree:Items()
					oItem := oItems:Add("Choose your quick actions")
						oItem:SetProperty("SingleLine",0,.F.)
						oItem1 := oItem:Items():Add("")
							oItem1:Height := 48
							s := 0
							oItem1:SetProperty("Value",s,"<c><img>P1</img>")
							oItem1:SetProperty("CellWidth",s,48)
							oItem1:SetProperty("HasButton",s,.T.)
							s := oItem1:SplitCell(s)
							oItem1:SetProperty("Value",s,"<c><img>P2</img>")
							oItem1:SetProperty("CellWidth",s,48)
							oItem1:SetProperty("HasButton",s,.T.)
							s := oItem1:SplitCell(s)
							oItem1:SetProperty("Value",s,"<c><img>P3</img>")
							oItem1:SetProperty("CellWidth",s,48)
							oItem1:SetProperty("HasButton",s,.T.)
							s := oItem1:SplitCell(s)
							oItem1:SetProperty("Value",s,"<c><img>P4</img>")
							oItem1:SetProperty("CellWidth",s,48)
							oItem1:SetProperty("HasButton",s,.T.)
							s := oItem1:SplitCell(s)
						oItem:Expanded := .T.
		oTreeCube:EndUpdate()

	oForm:Show()
	DO WHILE nEvent != xbeP_Quit
		nEvent := AppEvent( @mp1, @mp2, @oXbp )
		oXbp:handleEvent( nEvent, mp1, mp2 )
	ENDDO 
RETURN
104
I've noticed that the Face has no background color. Still, can I change the face's background color

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

PROCEDURE Main
 	LOCAL oForm
	LOCAL nEvent := 0, mp1 := NIL, mp2 := NIL, oXbp := NIL
	LOCAL oFace
	LOCAL oFaceCalendar
	LOCAL oTreeCube

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

	oTreeCube := XbpActiveXControl():new( oForm:drawingArea )
	oTreeCube:CLSID  := "Exontrol.TreeCube.1" /*{13A5B44B-DBB7-42F2-AE2B-943A6CF6C8B9}*/
	oTreeCube:create(,, {10,60},{610,370} )

		oTreeCube:BeginUpdate()
		oTreeCube:TexturePicturePath := ""
		oFace := oTreeCube:FrontFace()
			oFaceCalendar := oFace:CreateCalendar()
				oFaceCalendar:AutoSize := 1/*exFitClient*/
				oFaceCalendar:MaxMonthX := oFaceCalendar:MinMonthX()
				oFaceCalendar:MaxMonthY := oFaceCalendar:MinMonthY()
				oFaceCalendar:ShowTodayButton := .F.
			oFace:SetProperty("ExtraTitle","extra",1/*exTitleFaceBackColor*/,15790320)
			oFace:SetProperty("ExtraTitle","extra",8/*exTitleFaceHeight*/,"height")
			oFace:SetProperty("ExtraTitle","extra",9/*exTitleFaceVisible*/,1)
		oTreeCube:EndUpdate()

	oForm:Show()
	DO WHILE nEvent != xbeP_Quit
		nEvent := AppEvent( @mp1, @mp2, @oXbp )
		oXbp:handleEvent( nEvent, mp1, mp2 )
	ENDDO 
RETURN
103
How can I change the +/- expanding/collapsing buttons

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

PROCEDURE Main
 	LOCAL oForm
	LOCAL nEvent := 0, mp1 := NIL, mp2 := NIL, oXbp := NIL
	LOCAL oAppearance
	LOCAL oFaceTree
	LOCAL oTreeCube

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

	oTreeCube := XbpActiveXControl():new( oForm:drawingArea )
	oTreeCube:CLSID  := "Exontrol.TreeCube.1" /*{13A5B44B-DBB7-42F2-AE2B-943A6CF6C8B9}*/
	oTreeCube:create(,, {10,60},{610,370} )

		oTreeCube:TexturePicturePath := ""
		oTreeCube:BeginUpdate()
		oAppearance := oTreeCube:VisualAppearance()
			oAppearance:Add(1,"gBFLBCJwBAEHhEJAADhABDgCg6AADACAxRDAMgBQKAAzQFAYaBsHCGAAGMZRZgmFgAQhFcZQSKUOQTDKMIziaQIRDINQlSTJcQjKKEUQTFiXIyAKKwEgmEQMQiCcbzXIUBxAAqXZZFUaKAgOMJDTLBAzUSAAYhtHqeJBjID4JA6UJXRpIAIQSSBUjGOg6TiMUYZAguAxCEzZUT0fAYUQSCC3ZzDCKoRpiCT7Xg8V5OVbjUz9P7AMBwLA7erxap6PJeD54QymGp/R5eMhyLI8UxXFqRY6veKtJhGDIrT5CEIQVA9EyXJqnahqOiaCguPorQy/dYYdg2BYBPS6MAvG4bVrOd59XrgN42fY2ByzAqlMQwS7rOqiY6YWTnehWToHE+JZUmoLB5CufQuAkBYkGO+ZrDWAo7keZZyHmH5+i8X4bluaJyHgGB9mQHx3JjBpViqJRHmueZ7H8Xo3i2fYAl+d5tncMRfDcdZeDMDIjCCJwokoEoQiEJ4KCIfIdgU" +;
		"SZIAWaoGCEUh2BIJ4gnKBgMDICAnHoCggg0Aw4k0KAJkIagaguYwIj4LAmiKEw2CUIIiHMUJSDQSYyGCFYMGQCJCD0JRjiMRg3gmTYjGSVgmgkchSD4JJklIRIXCSSQYj4U4UgkQhGE+EwJEkJJWhGpgGGIOBNmMdhPg8SRiHCGAlibNhohqJpJi4T4ZA2WYIgEYInGOGJlDkCQyECDoTEkKQ+E+C5oCIVhQCUCQpnSDoeg4SZZH8YdhjibQ7AiUgkgcJFyiyEYmGmOhqhyJ5pmILoYCKaRSB6Eg7CcZgZggaRqHqNoTiuDpKkKMormsQ4xiUYgYiKEo6CCWgWiqPovloZoGjoKQYiOLR1ECUAQIC")
			oAppearance:Add(2,"gBFLBCJwBAEHhEJAADhABDwCg6AADACAxRDAMgBQKAAzQFAYaBsHCGAAGMZRZgmFgAQhFcZQSKUOQTDKMIziaQIRDINQlSTJcQjKKEUQTFiXIyAKKwEgmEQMQiCcbzXIUBxAAqXZZFUaKAgOMJDTLBAzUSAAYhtHqeJBjID4JA6UJXRpIAIQSSBUjGOg6TiMUYZAguAxCEzZUT0fAYUQSCC3ZzDCKoRpiCT7Xg8V5OVbjUz9P7AMBwLA7erxap6PJeD54QymGp/R5eMhyLI8UxXFqRY6veKtJhGDIrT5CEIQVA9EyXJqnahqOiaCguPorQy/dYYdg2BYBPS6MAvG4bVrOd59XrgN42fY2ByzAqlMQwS7rOqiY6YWTnehWToHE+JZUmoLB5CufQuAkBYkGO+ZrDWAo7keZZyHmPQ+g8X4fluYBhneEB9l0Iwpg6RRWiqFQfg+V5nnefh/GAB5yAIfRMFeRZdHeDJDCiSApkoMoEiQKBJmKCIfCcYQiHI" +;
		"FYFkmeBaBOA5JmgsICEyAgJl6AZICMQJODMSgCHCGg/mKSI2C6C5jAiNgpCaIhjDYIggiIQxQlINBJjIYIVgwZAJAYPQlGOIxGDeCQNiMZJWCaCRyFIPgkmSUhEhcJJlCkUhThUZQiFCEYTmSQhSEkNYkHYBIBhiTgTHiXYTmOUhYhwJgJGmJhuhsJoZi4bYbCSeYUl2GJIBYCh4DmDhThCEwkAiaQ0hKE5oEIVITiEaB6BqAofkiaZwmSHgXnYGh4DuDpTjCDQiEgchAg0IpJBobodicKZqgaIAimmIguhcIZpEOMh4GGGIGhaKYrmkWpAmyLIrEqRo2DsGhWCGCgpCuQgNiEaosAsBYmGga5ChGCg6lcVANAEgI")
		oTreeCube:SetProperty("Background",84/*exTreeGlyphCollapsed*/,0x1000000)
		oTreeCube:SetProperty("Background",85/*exTreeGlyphExpanded*/,0x2000000)
		oFaceTree := oTreeCube:FrontFace():CreateTree()
			oFaceTree:ExpandOnDblClick := .T.
			oFaceTree:ItemPadding := 16
			oFaceTree:HeaderVisible := .F.
			oFaceTree:HasLines := 2/*exThinLine*/
			oFaceTree:LinesAtRoot := 3/*exGroupLinesInside*/
			oFaceTree:DrawGridLines := -2/*exRowLines*/
			oFaceTree:Columns():Add("Def"):Alignment := 0/*LeftAlignment*/
			oFaceTree:Items():ToString := "Root 1(Child 1,Child 2),Root 2(Child 3,Child 4)"
			oFaceTree:ItemByIndex(3):Expanded := .T.
		oTreeCube:EndUpdate()

	oForm:Show()
	DO WHILE nEvent != xbeP_Quit
		nEvent := AppEvent( @mp1, @mp2, @oXbp )
		oXbp:handleEvent( nEvent, mp1, mp2 )
	ENDDO 
RETURN
102
How can I use the ToString property

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

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

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

	oTreeCube := XbpActiveXControl():new( oForm:drawingArea )
	oTreeCube:CLSID  := "Exontrol.TreeCube.1" /*{13A5B44B-DBB7-42F2-AE2B-943A6CF6C8B9}*/
	oTreeCube:create(,, {10,60},{610,370} )

		oTreeCube:TexturePicturePath := ""
		oFaceTree := oTreeCube:FrontFace():CreateTree()
			oFaceTree:DrawGridLines := -2/*exRowLines*/
			oFaceTree:Columns():ToString := "Column 1,Column 2,Column 3,Column 4"
			oFaceTree:Items():ToString := "1;2;3;4,5;6;7;8,9;10;11;12,13;14;15;16,17;18;29;20,21;22;23;24,25;26;27;28,29;30;31;32"

	oForm:Show()
	DO WHILE nEvent != xbeP_Quit
		nEvent := AppEvent( @mp1, @mp2, @oXbp )
		oXbp:handleEvent( nEvent, mp1, mp2 )
	ENDDO 
RETURN
101
How can I use the Background property

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

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

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

	oTreeCube := XbpActiveXControl():new( oForm:drawingArea )
	oTreeCube:CLSID  := "Exontrol.TreeCube.1" /*{13A5B44B-DBB7-42F2-AE2B-943A6CF6C8B9}*/
	oTreeCube:create(,, {10,60},{610,370} )

		oTreeCube:BeginUpdate()
		oTreeCube:VisualAppearance():Add(1,"C:\Program Files\Exontrol\ExButton\Sample\EBN\Assorted\calendar_single.ebn")
		oTreeCube:SetProperty("Background",8/*exDateHeader*/,0x1000000)
		oTreeCube:SetProperty("Background",7/*exWeeksHeader*/,AutomationTranslateColor( GraMakeRGBColor  ( { 250,250,250 } )  , .F. ))
		oTreeCube:SetProperty("Background",6/*exDaysHeader*/,AutomationTranslateColor( GraMakeRGBColor  ( { 250,250,250 } )  , .F. ))
		oTreeCube:SetProperty("Background",9/*exDateTodayUp*/,0x2000000)
		oTreeCube:SetProperty("Background",31/*exDateTodayForeColor*/,AutomationTranslateColor( GraMakeRGBColor  ( { 255,255,255 } )  , .F. ))
		oTreeCube:TexturePicturePath := ""
		oFaceCalendar := oTreeCube:FrontFace():CreateCalendar()
			oFaceCalendar:Date := "01/01/2016"
			oFaceCalendar:AutoSize := 1/*exFitClient*/
			oFaceCalendar:MaxMonthX := oFaceCalendar:MinMonthX()
			oFaceCalendar:MaxMonthY := oFaceCalendar:MinMonthY()
		oTreeCube:EndUpdate()

	oForm:Show()
	DO WHILE nEvent != xbeP_Quit
		nEvent := AppEvent( @mp1, @mp2, @oXbp )
		oXbp:handleEvent( nEvent, mp1, mp2 )
	ENDDO 
RETURN
100
How can I display two lists of radio-buttons

PROCEDURE OnFaceTreeStateChanged(oTreeCube,Tree,Item,Column)
	LOCAL oItem
	oItem := oTreeCube:FrontFace():FaceTree():ItemByIndex(Item)
		DevOut( "State" )
		DevOut( Transform(oItem:State(0),"") )
RETURN

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

PROCEDURE Main
 	LOCAL oForm
	LOCAL nEvent := 0, mp1 := NIL, mp2 := NIL, oXbp := NIL
	LOCAL oFaceTree
	LOCAL oItem,oItem1,oItem2,oItem3,oItem4,oItem5,oItem6,oItem7
	LOCAL oItems,oItems1,oItems2
	LOCAL oTreeCube

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

	oTreeCube := XbpActiveXControl():new( oForm:drawingArea )
	oTreeCube:CLSID  := "Exontrol.TreeCube.1" /*{13A5B44B-DBB7-42F2-AE2B-943A6CF6C8B9}*/
	oTreeCube:create(,, {10,60},{610,370} )

		oTreeCube:FaceTreeStateChanged := {|Tree,Item,Column| OnFaceTreeStateChanged(oTreeCube,Tree,Item,Column)} /*Notifies that a cell changes its state into a face of tree type.*/

		oTreeCube:TexturePicturePath := ""
		oFaceTree := oTreeCube:FrontFace():CreateTree()
			oFaceTree:HeaderVisible := .F.
			oFaceTree:ItemPadding := 16
			oFaceTree:DrawGridLines := 0/*exNoLines*/
			oFaceTree:Columns():Add("Radio"):Alignment := 0/*LeftAlignment*/
			oItems := oFaceTree:Items()
				oItem := oItems:Add("Group A")
					oItems1 := oItem:Items()
						oItem1 := oItems1:Add("Radio <b>1")
							oItem1:SetProperty("HasRadioButton",0,.T.)
							oItem1:SetProperty("RadioGroup",0,1234)
						oItem2 := oItems1:Add("Radio <b>2")
							oItem2:SetProperty("HasRadioButton",0,.T.)
							oItem2:SetProperty("RadioGroup",0,1234)
							oItem2:SetProperty("State",0,1)
						oItem3 := oItems1:Add("Radio <b>3")
							oItem3:SetProperty("HasRadioButton",0,.T.)
							oItem3:SetProperty("RadioGroup",0,1234)
					oItem:Expanded := .T.
				oItem4 := oItems:Add("Group B")
					oItems2 := oItem4:Items()
						oItem5 := oItems2:Add("Radio <b>1")
							oItem5:SetProperty("HasRadioButton",0,.T.)
							oItem5:SetProperty("RadioGroup",0,1235)
						oItem6 := oItems2:Add("Radio <b>2")
							oItem6:SetProperty("HasRadioButton",0,.T.)
							oItem6:SetProperty("RadioGroup",0,1235)
						oItem7 := oItems2:Add("Radio <b>3")
							oItem7:SetProperty("HasRadioButton",0,.T.)
							oItem7:SetProperty("RadioGroup",0,1235)
							oItem7:SetProperty("State",0,1)
					oItem4:Expanded := .T.

	oForm:Show()
	DO WHILE nEvent != xbeP_Quit
		nEvent := AppEvent( @mp1, @mp2, @oXbp )
		oXbp:handleEvent( nEvent, mp1, mp2 )
	ENDDO 
RETURN
99
How can I display a list of check-boxes

PROCEDURE OnFaceTreeStateChanged(oTreeCube,Tree,Item,Column)
	LOCAL oItem
	oItem := oTreeCube:FrontFace():FaceTree():ItemByIndex(Item)
		DevOut( "State" )
		DevOut( Transform(oItem:State(0),"") )
RETURN

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

PROCEDURE Main
 	LOCAL oForm
	LOCAL nEvent := 0, mp1 := NIL, mp2 := NIL, oXbp := NIL
	LOCAL oFaceTree
	LOCAL oItem
	LOCAL oItems
	LOCAL oTreeCube

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

	oTreeCube := XbpActiveXControl():new( oForm:drawingArea )
	oTreeCube:CLSID  := "Exontrol.TreeCube.1" /*{13A5B44B-DBB7-42F2-AE2B-943A6CF6C8B9}*/
	oTreeCube:create(,, {10,60},{610,370} )

		oTreeCube:FaceTreeStateChanged := {|Tree,Item,Column| OnFaceTreeStateChanged(oTreeCube,Tree,Item,Column)} /*Notifies that a cell changes its state into a face of tree type.*/

		oTreeCube:TexturePicturePath := ""
		oFaceTree := oTreeCube:FrontFace():CreateTree()
			oFaceTree:HeaderVisible := .F.
			oFaceTree:ItemPadding := 16
			oFaceTree:DrawGridLines := 0/*exNoLines*/
			oFaceTree:Columns():Add("Check"):Alignment := 0/*LeftAlignment*/
			oItems := oFaceTree:Items()
				oItems:Add("Check <b>1"):SetProperty("HasCheckBox",0,.T.)
				oItems:Add("Check <b>2"):SetProperty("HasCheckBox",0,.T.)
				oItem := oItems:Add("Check <b>3")
					oItem:SetProperty("HasCheckBox",0,.T.)
					oItem:SetProperty("State",0,1)
				oItems:Add("Check <b>4"):SetProperty("HasCheckBox",0,.T.)

	oForm:Show()
	DO WHILE nEvent != xbeP_Quit
		nEvent := AppEvent( @mp1, @mp2, @oXbp )
		oXbp:handleEvent( nEvent, mp1, mp2 )
	ENDDO 
RETURN
98
How do I get the selected caption

PROCEDURE OnFaceTreeSelectionChanged(oTreeCube,Tree)
	DevOut( "Value" )
	DevOut( Transform(oTreeCube:FrontFace:FaceTree():Value(),"") )
	DevOut( "Caption" )
	DevOut( oTreeCube:FrontFace:FaceTree():Caption() )
RETURN

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

PROCEDURE Main
 	LOCAL oForm
	LOCAL nEvent := 0, mp1 := NIL, mp2 := NIL, oXbp := NIL
	LOCAL oFace
	LOCAL oFaceTree
	LOCAL oTreeCube

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

	oTreeCube := XbpActiveXControl():new( oForm:drawingArea )
	oTreeCube:CLSID  := "Exontrol.TreeCube.1" /*{13A5B44B-DBB7-42F2-AE2B-943A6CF6C8B9}*/
	oTreeCube:create(,, {10,60},{610,370} )

		oTreeCube:FaceTreeSelectionChanged := {|Tree| OnFaceTreeSelectionChanged(oTreeCube,Tree)} /*Notifies that the user selects a new item/column into a face of tree type.*/

		oTreeCube:TexturePicturePath := ""
		oFace := oTreeCube:FrontFace()
			oFaceTree := oFace:CreateTree()
				oFaceTree:ItemPadding := 20
				oFaceTree:Columns():Count := 5
				oFaceTree:HeaderVisible := .F.
				oFaceTree:Items():Count := oTreeCube:FrontFace():FaceTree():VisibleItemsCount()
				oFaceTree:Columns:Item(0):FormatColumn := "(0:=(1989 + 5 * (0 index ``))) = 2016 ? `<b><sha ;;0>` + =:0 + `</b>` : =:0"
				oFaceTree:Columns:Item(1):FormatColumn := "(0:=(1990 + 5 * (0 index ``))) = 2016 ? `<b><sha ;;0>` + =:0 + `</b>` : =:0"
				oFaceTree:Columns:Item(2):FormatColumn := "(0:=(1991 + 5 * (0 index ``))) = 2016 ? `<b><sha ;;0>` + =:0 + `</b>` : =:0"
				oFaceTree:Columns:Item(3):FormatColumn := "(0:=(1992 + 5 * (0 index ``))) = 2016 ? `<b><sha ;;0>` + =:0 + `</b>` : =:0"
				oFaceTree:Columns:Item(4):FormatColumn := "(0:=(1993 + 5 * (0 index ``))) = 2016 ? `<b><sha ;;0>` + =:0 + `</b>` : =:0"

	oForm:Show()
	DO WHILE nEvent != xbeP_Quit
		nEvent := AppEvent( @mp1, @mp2, @oXbp )
		oXbp:handleEvent( nEvent, mp1, mp2 )
	ENDDO 
RETURN
97
How do I get the selected value

PROCEDURE OnFaceTreeSelectionChanged(oTreeCube,Tree)
	DevOut( "Value" )
	DevOut( Transform(oTreeCube:FrontFace:FaceTree():Value(),"") )
	DevOut( "Caption" )
	DevOut( oTreeCube:FrontFace:FaceTree():Caption() )
RETURN

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

PROCEDURE Main
 	LOCAL oForm
	LOCAL nEvent := 0, mp1 := NIL, mp2 := NIL, oXbp := NIL
	LOCAL oFace
	LOCAL oFaceTree
	LOCAL oTreeCube

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

	oTreeCube := XbpActiveXControl():new( oForm:drawingArea )
	oTreeCube:CLSID  := "Exontrol.TreeCube.1" /*{13A5B44B-DBB7-42F2-AE2B-943A6CF6C8B9}*/
	oTreeCube:create(,, {10,60},{610,370} )

		oTreeCube:FaceTreeSelectionChanged := {|Tree| OnFaceTreeSelectionChanged(oTreeCube,Tree)} /*Notifies that the user selects a new item/column into a face of tree type.*/

		oTreeCube:TexturePicturePath := ""
		oFace := oTreeCube:FrontFace()
			oFaceTree := oFace:CreateTree()
				oFaceTree:ItemPadding := 20
				oFaceTree:Columns():Count := 5
				oFaceTree:HeaderVisible := .F.
				oFaceTree:Items():Count := oTreeCube:FrontFace():FaceTree():VisibleItemsCount()
				oFaceTree:Columns:Item(0):FormatColumn := "(0:=(1989 + 5 * (0 index ``))) = 2016 ? `<b><sha ;;0>` + =:0 + `</b>` : =:0"
				oFaceTree:Columns:Item(1):FormatColumn := "(0:=(1990 + 5 * (0 index ``))) = 2016 ? `<b><sha ;;0>` + =:0 + `</b>` : =:0"
				oFaceTree:Columns:Item(2):FormatColumn := "(0:=(1991 + 5 * (0 index ``))) = 2016 ? `<b><sha ;;0>` + =:0 + `</b>` : =:0"
				oFaceTree:Columns:Item(3):FormatColumn := "(0:=(1992 + 5 * (0 index ``))) = 2016 ? `<b><sha ;;0>` + =:0 + `</b>` : =:0"
				oFaceTree:Columns:Item(4):FormatColumn := "(0:=(1993 + 5 * (0 index ``))) = 2016 ? `<b><sha ;;0>` + =:0 + `</b>` : =:0"

	oForm:Show()
	DO WHILE nEvent != xbeP_Quit
		nEvent := AppEvent( @mp1, @mp2, @oXbp )
		oXbp:handleEvent( nEvent, mp1, mp2 )
	ENDDO 
RETURN
96
How can I add buttons on the face

PROCEDURE OnFaceTreeButtonClick(oTreeCube,Tree,Item,Column)
	DevOut( Transform(Item,"") )
	DevOut( Transform(Column,"") )
RETURN

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

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

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

	oTreeCube := XbpActiveXControl():new( oForm:drawingArea )
	oTreeCube:CLSID  := "Exontrol.TreeCube.1" /*{13A5B44B-DBB7-42F2-AE2B-943A6CF6C8B9}*/
	oTreeCube:create(,, {10,60},{610,370} )

		oTreeCube:FaceTreeButtonClick := {|Tree,Item,Column| OnFaceTreeButtonClick(oTreeCube,Tree,Item,Column)} /*Notifies that a cell of button's type has been clicked.*/

		oTreeCube:TexturePicturePath := ""
		oFaceTree := oTreeCube:FrontFace():CreateTree()
			oFaceTree:DrawGridLines := 0/*exNoLines*/
			oFaceTree:ItemPadding := 16
			oColumn := oFaceTree:Columns():Add("Buttons")
				oColumn:FormatColumn := "1 index `A-Z`"
				oColumn:SetProperty("Def",2/*exCellHasButton*/,.T.)
			oFaceTree:Items():Count := 4

	oForm:Show()
	DO WHILE nEvent != xbeP_Quit
		nEvent := AppEvent( @mp1, @mp2, @oXbp )
		oXbp:handleEvent( nEvent, mp1, mp2 )
	ENDDO 
RETURN
95
How do I programmatically selects a date (method 2)
#include "AppEvent.ch"
#include "ActiveX.ch"

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

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

	oTreeCube := XbpActiveXControl():new( oForm:drawingArea )
	oTreeCube:CLSID  := "Exontrol.TreeCube.1" /*{13A5B44B-DBB7-42F2-AE2B-943A6CF6C8B9}*/
	oTreeCube:create(,, {10,60},{610,370} )

		oFaceCalendar := oTreeCube:FrontFace():CreateCalendar()
			oFaceCalendar:Value := "Jan 21"

	oForm:Show()
	DO WHILE nEvent != xbeP_Quit
		nEvent := AppEvent( @mp1, @mp2, @oXbp )
		oXbp:handleEvent( nEvent, mp1, mp2 )
	ENDDO 
RETURN
94
How do I programmatically selects a date (method 1)
#include "AppEvent.ch"
#include "ActiveX.ch"

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

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

	oTreeCube := XbpActiveXControl():new( oForm:drawingArea )
	oTreeCube:CLSID  := "Exontrol.TreeCube.1" /*{13A5B44B-DBB7-42F2-AE2B-943A6CF6C8B9}*/
	oTreeCube:create(,, {10,60},{610,370} )

		oFaceCalendar := oTreeCube:FrontFace():CreateCalendar()
			oFaceCalendar:Date := "01/01/2001"
			oFaceCalendar:SelDate := oFaceCalendar:Date()

	oForm:Show()
	DO WHILE nEvent != xbeP_Quit
		nEvent := AppEvent( @mp1, @mp2, @oXbp )
		oXbp:handleEvent( nEvent, mp1, mp2 )
	ENDDO 
RETURN
93
How can I display a hyperlink element
PROCEDURE OnAnchorClick(oTreeCube,Face,AnchorID,Options)
	DevOut( Transform(Face,"") )
	DevOut( Transform(AnchorID,"") )
	DevOut( Transform(Options,"") )
RETURN

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

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

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

	oTreeCube := XbpActiveXControl():new( oForm:drawingArea )
	oTreeCube:CLSID  := "Exontrol.TreeCube.1" /*{13A5B44B-DBB7-42F2-AE2B-943A6CF6C8B9}*/
	oTreeCube:create(,, {10,60},{610,370} )

		oTreeCube:AnchorClick := {|Face,AnchorID,Options| OnAnchorClick(oTreeCube,Face,AnchorID,Options)} /*Occurs when an anchor element is clicked.*/

		oFaceTree := oTreeCube:FrontFace():CreateTree()
			oFaceTree:ShowSelection := .F.
			oFaceTree:HeaderVisible := .F.
			oFaceTree:DrawGridLines := 0/*exNoLines*/
			oFaceTree:Items():ToString := "<a A1\;options1>Item 1</a>,<a A2\;options2>Item 2</a>"

	oForm:Show()
	DO WHILE nEvent != xbeP_Quit
		nEvent := AppEvent( @mp1, @mp2, @oXbp )
		oXbp:handleEvent( nEvent, mp1, mp2 )
	ENDDO 
RETURN
92
Can I display image and multiple-lines items

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

PROCEDURE Main
 	LOCAL oForm
	LOCAL nEvent := 0, mp1 := NIL, mp2 := NIL, oXbp := NIL
	LOCAL oFace
	LOCAL oFaceTree
	LOCAL oItem,oItem1,oItem10,oItem11,oItem12,oItem13,oItem14,oItem15,oItem16,oItem17,oItem2,oItem3,oItem4,oItem5,oItem6,oItem7,oItem8,oItem9
	LOCAL oItems
	LOCAL oTreeCube
	LOCAL s

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

	oTreeCube := XbpActiveXControl():new( oForm:drawingArea )
	oTreeCube:CLSID  := "Exontrol.TreeCube.1" /*{13A5B44B-DBB7-42F2-AE2B-943A6CF6C8B9}*/
	oTreeCube:create(,, {10,60},{610,370} )

		oTreeCube:BeginUpdate()
		oTreeCube:TexturePicturePath := ""
		oTreeCube:SetProperty("HTMLPicture","DriveC","c:\exontrol\images\zipdisk.gif")
		oTreeCube:SetProperty("HTMLPicture","DriveD","c:\exontrol\images\auction.gif")
		oTreeCube:SetProperty("HTMLPicture","DriveE","c:\exontrol\images\colorize.gif")
		oFace := oTreeCube:TopFace()
			oFace:RelativeMargins := "0,32,0,0"
			oFaceTree := oFace:CreateTree()
				oFaceTree:HasLines := 0/*exNoLine*/
				oFaceTree:DrawGridLines := 0/*exNoLines*/
				oFaceTree:ItemPadding := 24
				oFaceTree:HeaderVisible := .F.
				oFaceTree:ShowSelection := .T.
				oFaceTree:SetProperty("SelBackColor",AutomationTranslateColor( GraMakeRGBColor  ( { 240,240,240 } )  , .F. ))
				oFaceTree:Columns():Add("Default"):Alignment := 0/*LeftAlignment*/
				oItems := oFaceTree:Items()
					oItem := oItems:Add("Storage")
						oItem:Divider := 0
						oItem:Bold := .T.
						oItem:Selectable := .F.
					oItem1 := oItems:Add("Choose a drive to see what's taking up space.")
						oItem1:Selectable := .F.
						oItem1:SetProperty("SingleLine",0,.F.)
						oItem2 := oItem1:Items():Add("<img>DriveC:64</img>")
							oItem2:Height := 68
							oItem2:SetProperty("BackgroundExt",0,"none[(76,4,100%-76,100%-8)](client[text=``],bottom[16,back=RGB(204,204,204)](left[0%,back=RGB(0,120,215)]))")
							oItem2:SetProperty("BackgroundExtValue",0,2/*exIndexExt2*/,5/*exTextExtWordWrap*/,.T.)
							oItem2:SetProperty("BackgroundExtValue",0,2/*exIndexExt2*/,4/*exTextExt*/,"<fgcolor=000000>LROG (C:)<br>58.7 GB used out of 150 GB")
							oItem2:SetProperty("BackgroundExtValue",0,4/*exIndexExt4*/,2/*exClientExt*/,"39%")
						oItem3 := oItem1:Items():Add("<img>DriveD:64</img>")
							oItem3:Height := 68
							oItem3:SetProperty("BackgroundExt",0,"none[(76,4,100%-76,100%-8)](client[text=``],bottom[16,back=RGB(204,204,204)](left[0%,back=RGB(0,120,215)]))")
							oItem3:SetProperty("BackgroundExtValue",0,2/*exIndexExt2*/,5/*exTextExtWordWrap*/,.T.)
							oItem3:SetProperty("BackgroundExtValue",0,2/*exIndexExt2*/,4/*exTextExt*/,"<fgcolor=000000>System (D:)<br>112 MB used out of 144 GB")
							oItem3:SetProperty("BackgroundExtValue",0,4/*exIndexExt4*/,2/*exClientExt*/,"1%")
						oItem4 := oItem1:Items():Add("<img>DriveD:64</img>")
							oItem4:Height := 68
							oItem4:SetProperty("BackgroundExt",0,"none[(76,4,100%-76,100%-8)](client[text=``],bottom[16,back=RGB(204,204,204)](left[0%,back=RGB(0,120,215)]))")
							oItem4:SetProperty("BackgroundExtValue",0,2/*exIndexExt2*/,5/*exTextExtWordWrap*/,.T.)
							oItem4:SetProperty("BackgroundExtValue",0,2/*exIndexExt2*/,4/*exTextExt*/,"<fgcolor=000000>Work (E:)<br>53.0 GB used out of 635 GB")
							oItem4:SetProperty("BackgroundExtValue",0,4/*exIndexExt4*/,2/*exClientExt*/,"8%")
						oItem5 := oItem1:Items():Add("<img>DriveE:64</img>")
							oItem5:Height := 68
							oItem5:SetProperty("BackgroundExt",0,"none[(76,4,100%-76,100%-8)](client[text=``],bottom[16,back=RGB(204,204,204)](left[0%,back=RGB(0,120,215)]))")
							oItem5:SetProperty("BackgroundExtValue",0,2/*exIndexExt2*/,5/*exTextExtWordWrap*/,.T.)
							oItem5:SetProperty("BackgroundExtValue",0,2/*exIndexExt2*/,4/*exTextExt*/,"<fgcolor=000000>DVD RW Drive (G:)<br>0.0 GB used out of 0.0 GB")
							oItem5:SetProperty("BackgroundExtValue",0,4/*exIndexExt4*/,2/*exClientExt*/,"0%")
						oItem1:Expanded := .T.
					oItem6 := oItems:Add("Save Locations")
						oItem6:Divider := 0
						oItem6:Bold := .T.
						oItem6:Selectable := .F.
					oItem7 := oItems:Add("Change where your apps, documents, music, pictures and videos are saved by default.")
						oItem7:Selectable := .F.
						oItem7:SetProperty("SingleLine",0,.F.)
						oItem8 := oItem7:Items():Add("New apps will save to:")
							oItem8:Selectable := .F.
							oItem9 := oItem8:Items():Add("Drive C")
								oItem9:Selectable := .F.
								oItem9:Height := 24
								oItem9:SetProperty("HasRadioButton",0,.T.)
								oItem9:SetProperty("RadioGroup",0,1234)
								oItem9:SetProperty("State",0,1)
								s := oItem9:SplitCell(0)
								oItem9:SetProperty("Value",s,"Drive D")
								oItem9:SetProperty("HasRadioButton",s,.T.)
								oItem9:SetProperty("RadioGroup",s,1234)
								s := oItem9:SplitCell(s)
								oItem9:SetProperty("Value",s,"Drive E")
								oItem9:SetProperty("HasRadioButton",s,.T.)
								oItem9:SetProperty("RadioGroup",s,1234)
							oItem8:Expanded := .T.
						oItem10 := oItem7:Items():Add("New documents will save to:")
							oItem10:Selectable := .F.
							oItem11 := oItem10:Items():Add("Drive C")
								oItem11:Selectable := .F.
								oItem11:Height := 24
								oItem11:SetProperty("HasRadioButton",0,.T.)
								oItem11:SetProperty("RadioGroup",0,1235)
								s := oItem11:SplitCell(0)
								oItem11:SetProperty("Value",s,"Drive D")
								oItem11:SetProperty("HasRadioButton",s,.T.)
								oItem11:SetProperty("RadioGroup",s,1235)
								oItem11:SetProperty("State",s,1)
								s := oItem11:SplitCell(s)
								oItem11:SetProperty("Value",s,"Drive E")
								oItem11:SetProperty("HasRadioButton",s,.T.)
								oItem11:SetProperty("RadioGroup",s,1235)
							oItem10:Expanded := .T.
						oItem12 := oItem7:Items():Add("New music will save to:")
							oItem12:Selectable := .F.
							oItem13 := oItem12:Items():Add("Drive C")
								oItem13:Selectable := .F.
								oItem13:Height := 24
								oItem13:SetProperty("HasRadioButton",0,.T.)
								oItem13:SetProperty("RadioGroup",0,1236)
								s := oItem13:SplitCell(0)
								oItem13:SetProperty("Value",s,"Drive D")
								oItem13:SetProperty("HasRadioButton",s,.T.)
								oItem13:SetProperty("RadioGroup",s,1236)
								oItem13:SetProperty("State",s,1)
								s := oItem13:SplitCell(s)
								oItem13:SetProperty("Value",s,"Drive E")
								oItem13:SetProperty("HasRadioButton",s,.T.)
								oItem13:SetProperty("RadioGroup",s,1236)
							oItem12:Expanded := .T.
						oItem14 := oItem7:Items():Add("New pictures will save to:")
							oItem14:Selectable := .F.
							oItem15 := oItem14:Items():Add("Drive C")
								oItem15:Selectable := .F.
								oItem15:Height := 24
								oItem15:SetProperty("HasRadioButton",0,.T.)
								oItem15:SetProperty("RadioGroup",0,1237)
								s := oItem15:SplitCell(0)
								oItem15:SetProperty("Value",s,"Drive D")
								oItem15:SetProperty("HasRadioButton",s,.T.)
								oItem15:SetProperty("RadioGroup",s,1237)
								oItem15:SetProperty("State",s,1)
								s := oItem15:SplitCell(s)
								oItem15:SetProperty("Value",s,"Drive E")
								oItem15:SetProperty("HasRadioButton",s,.T.)
								oItem15:SetProperty("RadioGroup",s,1237)
							oItem14:Expanded := .T.
						oItem16 := oItem7:Items():Add("New videos will save to:")
							oItem16:Selectable := .F.
							oItem17 := oItem16:Items():Add("Drive C")
								oItem17:Selectable := .F.
								oItem17:Height := 24
								oItem17:SetProperty("HasRadioButton",0,.T.)
								oItem17:SetProperty("RadioGroup",0,1238)
								s := oItem17:SplitCell(0)
								oItem17:SetProperty("Value",s,"Drive D")
								oItem17:SetProperty("HasRadioButton",s,.T.)
								oItem17:SetProperty("RadioGroup",s,1238)
								oItem17:SetProperty("State",s,1)
								s := oItem17:SplitCell(s)
								oItem17:SetProperty("Value",s,"Drive E")
								oItem17:SetProperty("HasRadioButton",s,.T.)
								oItem17:SetProperty("RadioGroup",s,1238)
							oItem16:Expanded := .T.
						oItem7:Expanded := .T.
				oFaceTree:EnsureVisibleItem(0)
		oTreeCube:EnsureVisibleFaceMargin := 0
		oTreeCube:EnsureVisibleFace(4/*exTopFace*/)
		oTreeCube:AlwaysEnsureVisibleFace := 1/*exFitToEnsureFace*/
		oTreeCube:EndUpdate()

	oForm:Show()
	DO WHILE nEvent != xbeP_Quit
		nEvent := AppEvent( @mp1, @mp2, @oXbp )
		oXbp:handleEvent( nEvent, mp1, mp2 )
	ENDDO 
RETURN
91
How can I use the BackgroundExt/BackgroundExtValue properties

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

PROCEDURE Main
 	LOCAL oForm
	LOCAL nEvent := 0, mp1 := NIL, mp2 := NIL, oXbp := NIL
	LOCAL oFace
	LOCAL oFaceTree
	LOCAL oItem,oItem1,oItem2,oItem3,oItem4,oItem5,oItem6,oItem7,oItem8,oItem9
	LOCAL oItems
	LOCAL oTreeCube

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

	oTreeCube := XbpActiveXControl():new( oForm:drawingArea )
	oTreeCube:CLSID  := "Exontrol.TreeCube.1" /*{13A5B44B-DBB7-42F2-AE2B-943A6CF6C8B9}*/
	oTreeCube:create(,, {10,60},{610,370} )

		oTreeCube:BeginUpdate()
		oTreeCube:TexturePicturePath := ""
		oFace := oTreeCube:BottomFace()
			oFace:RelativeMargins := "0,32,0,0"
			oFace:SetProperty("Title",0/*exTitleFaceCaption*/,"<c><font ;18>Battery Saver")
			oFace:SetProperty("Title",11/*exTitleFaceBackgroundExt*/,"bottom[2],bottom[4,back=RGB(0,0,0)]")
			oFaceTree := oFace:CreateTree()
				oFaceTree:HasLines := 0/*exNoLine*/
				oFaceTree:DrawGridLines := 0/*exNoLines*/
				oFaceTree:ItemPadding := 24
				oFaceTree:HeaderVisible := .F.
				oFaceTree:ShowSelection := .F.
				oFaceTree:Columns():Add("Default"):Alignment := 0/*LeftAlignment*/
				oItems := oFaceTree:Items()
					oItem := oItems:Add("Overview")
						oItem:Divider := 0
						oItem:Bold := .T.
					oItem1 := oItems:Add("Batter level (charging):")
						oItem1:SetProperty("SingleLine",0,.F.)
						oItem2 := oItem1:Items():Add("")
							oItem2:SetProperty("BackgroundExt",0,"none[(2,2,100%-4,100%-4)](top[24,text=`10%`],bottom[6,back=RGB(204,204,204)](left[10%,back=RGB(0,120,215)]))")
							oItem2:SetProperty("BackgroundExtValue",0,4/*exIndexExt4*/,2/*exClientExt*/,"65%")
							oItem2:SetProperty("BackgroundExtValue",0,2/*exIndexExt2*/,4/*exTextExt*/,oItem2:BackgroundExtValue(0,4/*exIndexExt4*/,2/*exClientExt*/))
						oItem1:Expanded := .T.
					oItem3 := oItems:Add("Estimated time to full charge:")
						oItem4 := oItem3:Items():Add(0.15125)
							oItem4:SetProperty("FormatCell",0,"((1:=int(0:= (value))) != 0 ? (=:1 + ' day(s)') : '') + (=:1 ? ' ' : '' ) + ((1:=int(0:=((=:0 - =:1 + 1/24/60/60/2)*24))) != 0 ? =:1 + ' hour(s)' : '' ) + (=:1 ? ' ' : '' ) + ((1:=round((=:0 - =:1)*60)) != 0 ? =:1 + ' min(s)' : '')")
							oItem4:Height := 24
						oItem3:Expanded := .T.
					oItem5 := oItems:Add("Battery Saver")
						oItem5:Divider := 0
						oItem5:Bold := .T.
					oItem6 := oItems:Add("Extends battery life by limiting background activity and push notifications. ")
						oItem6:SetProperty("SingleLine",0,.F.)
					oItem7 := oItems:Add("Batter saver is currently:")
						oItem7:Enabled := .F.
						oItem7:SetProperty("SingleLine",0,.F.)
						oItem8 := oItem7:Items():Add("")
							oItem8:Height := 24
							oItem8:SetProperty("HasCheckBox",0,.T.)
							oItem8:SetProperty("State",0,2)
							oItem8:SetProperty("FormatCell",0,"state = 1 ? `On` : `Off`")
							oItem8:Enabled := .F.
						oItem7:Expanded := .T.
					oItems:Add("Battery Saver is off while charging.  Choose, when battery saver turns on automatically and how it affects your system."):SetProperty("SingleLine",0,.F.)
					oItem9 := oItems:Add("<c>Battery Saver Settings")
						oItem9:SetProperty("SingleLine",0,.F.)
						oItem9:SetProperty("HasButton",0,.T.)
		oTreeCube:EnsureVisibleFaceMargin := 0
		oTreeCube:EnsureVisibleFace(1/*exBottomFace*/)
		oTreeCube:AlwaysEnsureVisibleFace := 1/*exFitToEnsureFace*/
		oTreeCube:EndUpdate()

	oForm:Show()
	DO WHILE nEvent != xbeP_Quit
		nEvent := AppEvent( @mp1, @mp2, @oXbp )
		oXbp:handleEvent( nEvent, mp1, mp2 )
	ENDDO 
RETURN
90
How can I change the visual appearance for check and radio buttons

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

PROCEDURE Main
 	LOCAL oForm
	LOCAL nEvent := 0, mp1 := NIL, mp2 := NIL, oXbp := NIL
	LOCAL oAppearance,oAppearance1
	LOCAL oFace
	LOCAL oFaceTree
	LOCAL oItem,oItem1,oItem10,oItem11,oItem2,oItem3,oItem4,oItem5,oItem6,oItem7,oItem8,oItem9
	LOCAL oItems
	LOCAL oTreeCube

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

	oTreeCube := XbpActiveXControl():new( oForm:drawingArea )
	oTreeCube:CLSID  := "Exontrol.TreeCube.1" /*{13A5B44B-DBB7-42F2-AE2B-943A6CF6C8B9}*/
	oTreeCube:create(,, {10,60},{610,370} )

		oTreeCube:BeginUpdate()
		oTreeCube:TexturePicturePath := ""
		oTreeCube:CheckBoxWidth := 44
		oTreeCube:CheckBoxHeight := 20
		oAppearance := oTreeCube:VisualAppearance()
			oAppearance:Add(1,"gBFLBCJwBAEHhEJAADhABJACg6AADACAxRDAMgBQKAAzQFAYaBsHCGAAGMZRZgmFgAQhFcZQSKUOQTDKMIziaQAGgkNQwCSLIxDFIsBxPFKCQChEZBUjKAwyDBIUzSDIUBhZBIKI7hGa3NBwJAAUTRch0j4iCRQGiYZyHKcxMYgIYCUBkERtMw0GyERQhGb4DoGA4IBhFZQVVLsRBIDh2bbuG4LSrWdJ3OyaN5EbbgZz9P7AMBwLA8EwXBqHYIUGJGbhlbTnR7HMhvDIsPDnFqIZhmOZZXjlfh7T7KNByO6LcI3AiDagtWpNTpjf5dV7YNh2LY9UzXNq3bI1W5aUqyAZ9QQpeB0LILYDbRp/FzyO5NNrHG6dZ7oOh1doOUItlaP5lgcPA7hEJ47H8SD0l4LwfhOSJ9nOIh9DefBREMKYMDaX59nsVhvlKdBpCGfgIl+L43lGG5lH+YAGlWZw/EYOAVH8ZQXncdBJDwIJGkiGYDlmUh2BKABhEgVJpgW" +;
		"X4BA4BxcAeWB1H8KJiAaSJJgiWZWAmVA0CEWIln8JYikWfZpCIXARE0fw3GMRpJnaCRYBGWg6gqI5HgoJxfkYCQFlkX5PhkFYyBAJIImGABpGOWQ1k8OxlAWfZ6BGJA1noRQ+GQeQmEoX4kkkOheG2JQDjYUh+iMGJODUbBjHkbAzg6BxpH4bhsmOdZ6EEGAbmIAR/gSCZWkmfYShwYJYlOH5mnoBYvCSaBFnyDYhlcKAll2AwPAaSggCiWZaD6AogiEc4mBmBpYnePZxGMHw3lUeoGGUN5aH8NJpDoBgDgERg6GGFICh2d4GiWK5cngDgvHqWInG0cIfFyBwpjqLArkcTZVHWV5nGaNhxA6VoVicahajaNo9gUHI2nIdRwBwJoOkSMJlFmKpWjWWY2HwPYwm2SxJHIe5sGsYpiGcXpHj6XYxA6NBFAkQBAIC")
			oAppearance:Add(2,"gBFLBCJwBAEHhEJAADhABB4Cg6AADACAxRDAMgBQKAAzQFAYaBsHCGAAGMZRZgmFgAQhFcZQSKUOQTDKMIziaQAGgkNQwCSLIxDFIsBxPFKCQChEZBUjKAwyDBIUzSDIUBhZBIKI7hGa3NBwJAAUTRch0j4iCRQGiYZyHKcxMYgIYCUBkERtMw0GyERQhGb4DoGA4IBhFZQVVLsRBIDh2bbuG4LSrWdJ3Oy3KKiQy5cABPq/b6wDA8CwXAaHYRiGDYThmF4dRQAG6RcTLWrPFqVZheGYua4CLBxRrINA0LD9DyHJKnaZkDgpUQGN5dTS4GwPQCN3xRWzUyBaQzJfAZV7Lbw3PadX4XRLHcLwfAXFqWaaNZLneh5DouDz3P5YMuaRBicQ4nl6bpuBwKYRnuUY2jsfg9B0b43hOH5KjucQPnwOpMi+A4pnab5qB0a4znuf57n4f5gAeeJqC4R42mEcg5AoIRBnUfggkgLJiCaRA4AYEoEl+Y4AhcDpaFO" +;
		"GIrBgDYyBwHICmIB5djge4hEilY8g0MotiUZICkMYB6AEIgYDYIh0g+Q5cm+CYjgOfJ6DuDZ2hSWggkESI6DCDJjCkFZDg0Yx4mYJYOmOVoiD8BQhlgfhEgwZRGBoJISy0IgqGoIpDhCJAVCUWQaFMY5fAkYgBD+D5TmyYAlENPBnCsRhFkoYYcmYMAAmkLRHDmGZ9h2Rw4BkeBnFmeZWHSGIYHeQZuHoHonjGboamaVwYmIJwEEYbZNiCaRKAmdx1hyNZChWIQpjcKZYHAKQ6FqHIoh0Vp6hkcBqgoAodikKgmi2LYnmsCohkAXoXkqMojgMIpKh2Gw6lEFAlAEgIA==")
		oTreeCube:SetProperty("Background",70/*exCheckBoxState0*/,0x1000000)
		oTreeCube:SetProperty("Background",71/*exCheckBoxState1*/,0x2000000)
		oTreeCube:SetProperty("Background",72/*exCheckBoxState2*/,0x1f0f0f0)
		oTreeCube:RadioButtonWidth := 23
		oTreeCube:RadioButtonHeight := 23
		oAppearance1 := oTreeCube:VisualAppearance()
			oAppearance1:Add(3,"gBFLBCJwBAEHhEJAADhABNoCg6AADACAxRDAMgBQKAAzQFAYaBsHCGAAGMZRZgmFgAQhFcZQSKUOQTDKMIziaQIRDINQlSTJcQjKKEUQTFiXIyAKQobh2A42SDAcgSFIADRfFoWmxTdAcYSCGSZZrGOiQADIM40R7UAABPBNKR1BKmHZDQRAApqXIjVDAYIQSSBUlkHScRijDICXSIIQmbajIZoJCiVZ3VaGETnRQlJQuEgOHZwDAsBwPBqBPziLp4WzmGqhR5ichYHI8RYVTKXYy3DxZW7OO4PQjQM7hHL8fwlfTuagyGpZOxjP5cdrYHw2J7NUzJeDxbhrTb6Zh7ILVX7TNIwXAdD4PIKmNryORsC4XG5pZ7oOh6Lo3G4rhWZI2nOL4eBON4LkeRJvHWDxvB6G5Lmac56D0OY3hMU5bm6bRoiAeA9DMX5riydJ+D8P4vEeO4xkEcQfCYBZrHKXgzlme4BmCB4eAUZRbAaAZeGsDg4EYCYEmERoaBE" +;
		"OJaiMIY2EIXo2FYFYHmIBp1j8OoQhcYZNDiIgIiYE4Jl2BAlj0agOmiKgyH6Xo2jECYGE8WJmDODpehgFgZEIXI3DyfoQmQSQWEaEZkgkJhKhKZA2hmSxCEyGREnSFJkkkVhWwCCAthFKRjiIXhpiXOhihGYwJESSRCFuIxqGoPomkmDhuhWT45kSXYcl8UxdAkbgPBaMhTD0JApj4foRBoaJ5iqAxdmadhzDcWxpgIf4bhsY4Gg6GYYDcegNGUYg6VMIsBBmNg8CmRwuCOJBgBaAgXh6JQzl6JocE+OQQn+KpqkqNouivgQiiaLJPHaMZYHwQAHHIdRrA6ep2jMbYqx2RxzmqBpajOLxOnacYPHcHZnHGOlynmbo0jSbRLFaJoJlyNpplyKArhcGZcgMWpGjCXo4liM4ukiHpngkeJojiTZphmLIDG2Nwak2N4vEaAJsj2bpLgWFxlGGExOn4dgvHOMpxGgbwkAyaxEFCFAEICA=")
			oAppearance1:Add(4,"gBFLBCJwBAEHhEJAADhABCEMACAADACAxRDAMgBQKAAzQFAYaBsHCGAAGMZRZgmFgAQhFcZQSKUOQTDKMIziaQIRDINQlSTJcQjKKEUQTFiXIyAKQobh2A42SDAcgSFIADRfFoWmxTdAcYSCGSZZrGOiQADINI0R7UAABPBIMSjAamHZDQRAApqXIjVaAhySQKksg6TiMUYZAbaRBCEzbUZDNBIopUQLVU5ABbUEqBIipIrEQLHNwPBaEYZiOIYW5re4cfzIMhyLI8Ob3CqHZhleTwTjWGYvSp1dBbTQ2QyVRanMDqOjsKxmW5Gbh5NhfHY8dxnDKcZ5jGSudrjEZ9VpmG74JzeEbjRj8chxT4PDxnBK/YDSWgdLo8VzXBpcG2MY4maXxzFKQRxHgOQeC8H4TkuZhzHoNR9kaXpNnONZsGGMo9B4A5bmuFZ7n4Pw/i+XpFmSVB/mAB41hsQJfBYOJXgGXAHm4CoCmCtYAHqXRWBGWB/F2Z5UnaAxZFO" +;
		"aJ2DuTpzHCOQ5gwcg8veDBjlCaA0mGBg6BYapcEONZiHYHADg4MoKE+U4QkEIINAISAig4Y44moPIPA4EpoHSBoOngNgyDiW5jCGShCF+VouA2EQNhKHBMg+Y5pFYPYVmOQxYiAD4kEgNZRHSTokCWax4A4KA2DaDglGkUhYhoZRph4DYZB6NAllEbwOmgKhEhqJ4JjIa4ek8c48mGAoflcAQJhITxaBYCoHEuGZmHuIooioIgKgWJIUCWXh4hkNhImkM4JloMh6iaJRzhySAkCkVhFhUd4QhMJomD0KtvBCCJMGocouh6KIKiifoKlodAmAAOgrgYVoVD7Y5AlMJhDAqPoLh6D4DkCYosicSoYkkQhcmMapOD6LQKkqHgkCwKhwmILpHFqSJ7jaTZbHYBw1lCFwwnEcAqgOUoUGSa5DxkLQGHsVhWhQRJKkmFYkBuaI1lgdBtlMdZKi6LoKnSZQwggOp+kGJpjiufIDiyGQXCiYZCmyJxeAQYQi0YYI" +;
		"+lieoqmmKwpHIdoskIGQGFWSg8DIBx6GCQ4AAYXhHjlo5fCqNpPjYRJ/kucwMkcMpM9GMwqk2Tx3AGa4AnIVpkm2N5cAgcJvk2XIsjGeYlF53hKk2dAnEGJR7nCdxlgYc4ajmEplk4NYNGcWpKiYRx5k4dYhC0RxggsTpXAGQA3jaBoEmuUIuFuCo4DoNoDHqShwCKXYPCSXYzmOMx6lwOwZoawrgkE0HwBY1xegdE2MMWQhBOhoEUBIQAgCAgA==")
		oTreeCube:SetProperty("Background",73/*exRadioButtonState0*/,0x3000000)
		oTreeCube:SetProperty("Background",74/*exRadioButtonState1*/,0x4000000)
		oFace := oTreeCube:RightFace()
			oFace:RelativeMargins := "0,32,0,0"
			oFace:SetProperty("Title",0/*exTitleFaceCaption*/,"<c><font ;18>Table mode")
			oFace:SetProperty("Title",11/*exTitleFaceBackgroundExt*/,"bottom[2],bottom[4,back=RGB(0,0,0)]")
			oFaceTree := oFace:CreateTree()
				oFaceTree:HasLines := 0/*exNoLine*/
				oFaceTree:DrawGridLines := 0/*exNoLines*/
				oFaceTree:ItemPadding := 24
				oFaceTree:HeaderVisible := .F.
				oFaceTree:ShowSelection := .F.
				oFaceTree:Columns():Add("Default"):Alignment := 0/*LeftAlignment*/
				oItems := oFaceTree:Items()
					oItem := oItems:Add("Make windows more touch-friendly when using your device as a table")
						oItem:SetProperty("SingleLine",0,.F.)
						oItem1 := oItem:Items():Add("")
							oItem1:Height := 24
							oItem1:SetProperty("HasCheckBox",0,.T.)
							oItem1:SetProperty("State",0,0)
							oItem1:SetProperty("FormatCell",0,"state = 0 ? `Off` : `On`")
						oItem:Expanded := .T.
					oItem2 := oItems:Add("When I sign in")
						oItem2:SetProperty("SingleLine",0,.F.)
						oItem3 := oItem2:Items():Add("Automatically swicth to table mode")
							oItem3:Height := 24
							oItem3:SetProperty("HasRadioButton",0,.T.)
							oItem3:SetProperty("RadioGroup",0,1234)
						oItem4 := oItem2:Items():Add("Go to the desktop")
							oItem4:Height := 24
							oItem4:SetProperty("HasRadioButton",0,.T.)
							oItem4:SetProperty("RadioGroup",0,1234)
						oItem5 := oItem2:Items():Add("Remember what I used last")
							oItem5:Height := 24
							oItem5:SetProperty("HasRadioButton",0,.T.)
							oItem5:SetProperty("RadioGroup",0,1234)
							oItem5:SetProperty("State",0,1)
						oItem2:Expanded := .T.
					oItem6 := oItems:Add("When this device automatically switches table mode on or off")
						oItem6:SetProperty("SingleLine",0,.F.)
						oItem7 := oItem6:Items():Add("Don't ask me and dont' switch")
							oItem7:Height := 24
							oItem7:SetProperty("HasRadioButton",0,.T.)
							oItem7:SetProperty("RadioGroup",0,1235)
						oItem8 := oItem6:Items():Add("Always ask me before switching")
							oItem8:Height := 24
							oItem8:SetProperty("HasRadioButton",0,.T.)
							oItem8:SetProperty("RadioGroup",0,1235)
							oItem8:SetProperty("State",0,1)
						oItem9 := oItem6:Items():Add("Don't ask me and always' switch")
							oItem9:Height := 24
							oItem9:SetProperty("HasRadioButton",0,.T.)
							oItem9:SetProperty("RadioGroup",0,1235)
						oItem6:Expanded := .T.
					oItem10 := oItems:Add("Hide app icons on the taskbar in table mode")
						oItem10:SetProperty("SingleLine",0,.F.)
						oItem11 := oItem10:Items():Add("")
							oItem11:Height := 24
							oItem11:SetProperty("HasCheckBox",0,.T.)
							oItem11:SetProperty("State",0,0)
							oItem11:SetProperty("FormatCell",0,"state = 0 ? `Off` : `On`")
						oItem10:Expanded := .T.
		oTreeCube:EnsureVisibleFaceMargin := 0
		oTreeCube:EnsureVisibleFace(2/*exRightFace*/)
		oTreeCube:AlwaysEnsureVisibleFace := 1/*exFitToEnsureFace*/
		oTreeCube:EndUpdate()

	oForm:Show()
	DO WHILE nEvent != xbeP_Quit
		nEvent := AppEvent( @mp1, @mp2, @oXbp )
		oXbp:handleEvent( nEvent, mp1, mp2 )
	ENDDO 
RETURN
89
How can I display more group of radio-buttons

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

PROCEDURE Main
 	LOCAL oForm
	LOCAL nEvent := 0, mp1 := NIL, mp2 := NIL, oXbp := NIL
	LOCAL oFace
	LOCAL oFaceTree
	LOCAL oItem,oItem1,oItem10,oItem11,oItem12,oItem13,oItem2,oItem3,oItem4,oItem5,oItem6,oItem7,oItem8,oItem9
	LOCAL oItems
	LOCAL oTreeCube

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

	oTreeCube := XbpActiveXControl():new( oForm:drawingArea )
	oTreeCube:CLSID  := "Exontrol.TreeCube.1" /*{13A5B44B-DBB7-42F2-AE2B-943A6CF6C8B9}*/
	oTreeCube:create(,, {10,60},{610,370} )

		oTreeCube:BeginUpdate()
		oTreeCube:TexturePicturePath := ""
		oFace := oTreeCube:LeftFace()
			oFace:RelativeMargins := "0,32,0,0"
			oFace:SetProperty("Title",0/*exTitleFaceCaption*/,"<c><font ;18>Multitasking")
			oFace:SetProperty("Title",11/*exTitleFaceBackgroundExt*/,"bottom[2],bottom[4,back=RGB(0,0,0)]")
			oFaceTree := oFace:CreateTree()
				oFaceTree:HasLines := 0/*exNoLine*/
				oFaceTree:DrawGridLines := 0/*exNoLines*/
				oFaceTree:ItemPadding := 24
				oFaceTree:HeaderVisible := .F.
				oFaceTree:ShowSelection := .F.
				oFaceTree:Columns():Add("Default"):Alignment := 0/*LeftAlignment*/
				oItems := oFaceTree:Items()
					oItem := oItems:Add("Snap")
						oItem:Divider := 0
						oItem:Bold := .T.
					oItem1 := oItems:Add("Arrange windows automatically by dragging them to the sides of corners of the scree")
						oItem1:SetProperty("SingleLine",0,.F.)
						oItem2 := oItem1:Items():Add("")
							oItem2:Height := 24
							oItem2:SetProperty("HasCheckBox",0,.T.)
							oItem2:SetProperty("State",0,1)
							oItem2:SetProperty("FormatCell",0,"state = 0 ? `Off` : `On`")
						oItem1:Expanded := .T.
					oItem3 := oItems:Add("When I snap more than one window, automatically adjust the size of the windows")
						oItem3:SetProperty("SingleLine",0,.F.)
						oItem4 := oItem3:Items():Add("")
							oItem4:Height := 24
							oItem4:SetProperty("HasCheckBox",0,.T.)
							oItem4:SetProperty("State",0,1)
							oItem4:SetProperty("FormatCell",0,"state = 0 ? `Off` : `On`")
						oItem3:Expanded := .T.
					oItem5 := oItems:Add("When I snap a window, show what I can snap next to it")
						oItem5:SetProperty("SingleLine",0,.F.)
						oItem6 := oItem5:Items():Add("")
							oItem6:Height := 24
							oItem6:SetProperty("HasCheckBox",0,.T.)
							oItem6:SetProperty("FormatCell",0,"state = 0 ? `Off` : `On`")
						oItem5:Expanded := .T.
					oItem7 := oItems:Add("Virtual desktops")
						oItem7:Divider := 0
						oItem7:Bold := .T.
					oItem8 := oItems:Add("On the taskbar, show windows that are open on:")
						oItem8:SetProperty("SingleLine",0,.F.)
						oItem9 := oItem8:Items():Add("Only the desktop I'm using")
							oItem9:Height := 24
							oItem9:SetProperty("HasRadioButton",0,.T.)
							oItem9:SetProperty("RadioGroup",0,1234)
							oItem9:SetProperty("State",0,1)
						oItem10 := oItem8:Items():Add("All desktops")
							oItem10:Height := 24
							oItem10:SetProperty("HasRadioButton",0,.T.)
							oItem10:SetProperty("RadioGroup",0,1234)
						oItem8:Expanded := .T.
					oItem11 := oItems:Add("Pressing ALT+TAB, show windows that are open on:")
						oItem11:SetProperty("SingleLine",0,.F.)
						oItem12 := oItem11:Items():Add("Only the desktop I'm using")
							oItem12:Height := 24
							oItem12:SetProperty("HasRadioButton",0,.T.)
							oItem12:SetProperty("RadioGroup",0,1235)
							oItem12:SetProperty("State",0,1)
						oItem13 := oItem11:Items():Add("All desktops")
							oItem13:Height := 24
							oItem13:SetProperty("HasRadioButton",0,.T.)
							oItem13:SetProperty("RadioGroup",0,1235)
						oItem11:Expanded := .T.
		oTreeCube:EnsureVisibleFaceMargin := 0
		oTreeCube:EnsureVisibleFace(3/*exLeftFace*/)
		oTreeCube:AlwaysEnsureVisibleFace := 1/*exFitToEnsureFace*/
		oTreeCube:EndUpdate()

	oForm:Show()
	DO WHILE nEvent != xbeP_Quit
		nEvent := AppEvent( @mp1, @mp2, @oXbp )
		oXbp:handleEvent( nEvent, mp1, mp2 )
	ENDDO 
RETURN
88
How can I use images with the control

PROCEDURE OnFaceTreeButtonClick(oTreeCube,Tree,Item,Column)
	DevOut( "FaceTreeButtonClick" )
RETURN

PROCEDURE OnFaceTreeStateChanged(oTreeCube,Tree,Item,Column)
	DevOut( "FaceTreeStateChanged" )
RETURN

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

PROCEDURE Main
 	LOCAL oForm
	LOCAL nEvent := 0, mp1 := NIL, mp2 := NIL, oXbp := NIL
	LOCAL oFace
	LOCAL oFaceTree
	LOCAL oItem,oItem1,oItem10,oItem11,oItem2,oItem3,oItem4,oItem5,oItem6,oItem7,oItem8,oItem9
	LOCAL oItems
	LOCAL oTreeCube
	LOCAL s

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

	oTreeCube := XbpActiveXControl():new( oForm:drawingArea )
	oTreeCube:CLSID  := "Exontrol.TreeCube.1" /*{13A5B44B-DBB7-42F2-AE2B-943A6CF6C8B9}*/
	oTreeCube:create(,, {10,60},{610,370} )

		oTreeCube:FaceTreeButtonClick := {|Tree,Item,Column| OnFaceTreeButtonClick(oTreeCube,Tree,Item,Column)} /*Notifies that a cell of button's type has been clicked.*/
		oTreeCube:FaceTreeStateChanged := {|Tree,Item,Column| OnFaceTreeStateChanged(oTreeCube,Tree,Item,Column)} /*Notifies that a cell changes its state into a face of tree type.*/

		oTreeCube:BeginUpdate()
		oTreeCube:TexturePicturePath := ""
		oTreeCube:SetProperty("HTMLPicture","P1","c:\exontrol\images\zipdisk.gif")
		oTreeCube:SetProperty("HTMLPicture","P2","c:\exontrol\images\auction.gif")
		oTreeCube:SetProperty("HTMLPicture","P3","c:\exontrol\images\colorize.gif")
		oTreeCube:SetProperty("HTMLPicture","P4","c:\exontrol\images\auction.gif")
		oFace := oTreeCube:FrontFace()
			oFace:RelativeMargins := "0,32,0,0"
			oFace:SetProperty("Title",0/*exTitleFaceCaption*/,"<c><font ;18>Notifications")
			oFace:SetProperty("Title",11/*exTitleFaceBackgroundExt*/,"bottom[2],bottom[4,back=RGB(0,0,0)]")
			oFaceTree := oFace:CreateTree()
				oFaceTree:HasLines := 0/*exNoLine*/
				oFaceTree:DrawGridLines := 0/*exNoLines*/
				oFaceTree:ItemPadding := 24
				oFaceTree:HeaderVisible := .F.
				oFaceTree:ShowSelection := .F.
				oFaceTree:Columns():Add("Default"):Alignment := 0/*LeftAlignment*/
				oItems := oFaceTree:Items()
					oItem := oItems:Add("Choose your quick actions")
						oItem:SetProperty("SingleLine",0,.F.)
						oItem1 := oItem:Items():Add("")
							oItem1:Height := 48
							s := 0
							oItem1:SetProperty("Value",s,"<c><img>P1</img>")
							oItem1:SetProperty("CellWidth",s,48)
							oItem1:SetProperty("HasButton",s,.T.)
							s := oItem1:SplitCell(s)
							oItem1:SetProperty("Value",s,"<c><img>P2</img>")
							oItem1:SetProperty("CellWidth",s,48)
							oItem1:SetProperty("HasButton",s,.T.)
							s := oItem1:SplitCell(s)
							oItem1:SetProperty("Value",s,"<c><img>P3</img>")
							oItem1:SetProperty("CellWidth",s,48)
							oItem1:SetProperty("HasButton",s,.T.)
							s := oItem1:SplitCell(s)
							oItem1:SetProperty("Value",s,"<c><img>P4</img>")
							oItem1:SetProperty("CellWidth",s,48)
							oItem1:SetProperty("HasButton",s,.T.)
							s := oItem1:SplitCell(s)
						oItem:Expanded := .T.
					oItem2 := oItems:Add("Show me tips about Windows")
						oItem2:SetProperty("SingleLine",0,.F.)
						oItem3 := oItem2:Items():Add("")
							oItem3:Height := 24
							oItem3:SetProperty("HasCheckBox",0,.T.)
							oItem3:SetProperty("State",0,1)
							oItem3:SetProperty("FormatCell",0,"state = 0 ? `Off` : `On`")
						oItem2:Expanded := .T.
					oItem4 := oItems:Add("Show app notifications	")
						oItem4:SetProperty("SingleLine",0,.F.)
						oItem5 := oItem4:Items():Add("")
							oItem5:Height := 24
							oItem5:SetProperty("HasCheckBox",0,.T.)
							oItem5:SetProperty("State",0,1)
							oItem5:SetProperty("FormatCell",0,"state = 0 ? `Off` : `On`")
						oItem4:Expanded := .T.
					oItem6 := oItems:Add("Show notifications on lock screen")
						oItem6:SetProperty("SingleLine",0,.F.)
						oItem7 := oItem6:Items():Add("")
							oItem7:Height := 24
							oItem7:SetProperty("HasCheckBox",0,.T.)
							oItem7:SetProperty("FormatCell",0,"state = 0 ? `Off` : `On`")
						oItem6:Expanded := .T.
					oItem8 := oItems:Add("Show alarms, reminders and incomming VOIP calls on the lock screen")
						oItem8:SetProperty("SingleLine",0,.F.)
						oItem9 := oItem8:Items():Add("")
							oItem9:Height := 24
							oItem9:SetProperty("HasCheckBox",0,.T.)
							oItem9:SetProperty("State",0,1)
							oItem9:SetProperty("FormatCell",0,"state = 0 ? `Off` : `On`")
						oItem8:Expanded := .T.
					oItem10 := oItems:Add("Hide notications while presentation")
						oItem10:SetProperty("SingleLine",0,.F.)
						oItem11 := oItem10:Items():Add("")
							oItem11:Height := 24
							oItem11:SetProperty("HasCheckBox",0,.T.)
							oItem11:SetProperty("State",0,0)
							oItem11:SetProperty("FormatCell",0,"state = 0 ? `Off` : `On`")
						oItem10:Expanded := .T.
		oTreeCube:EnsureVisibleFaceMargin := 0
		oTreeCube:EnsureVisibleFace(0/*exFrontFace*/)
		oTreeCube:AlwaysEnsureVisibleFace := 1/*exFitToEnsureFace*/
		oTreeCube:EndUpdate()

	oForm:Show()
	DO WHILE nEvent != xbeP_Quit
		nEvent := AppEvent( @mp1, @mp2, @oXbp )
		oXbp:handleEvent( nEvent, mp1, mp2 )
	ENDDO 
RETURN
87
How do I display a progress bar

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

PROCEDURE Main
 	LOCAL oForm
	LOCAL nEvent := 0, mp1 := NIL, mp2 := NIL, oXbp := NIL
	LOCAL oColumn
	LOCAL oFaceTree
	LOCAL oItem,oItem1,oItem2,oItem3,oItem4
	LOCAL oItems
	LOCAL oTreeCube

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

	oTreeCube := XbpActiveXControl():new( oForm:drawingArea )
	oTreeCube:CLSID  := "Exontrol.TreeCube.1" /*{13A5B44B-DBB7-42F2-AE2B-943A6CF6C8B9}*/
	oTreeCube:create(,, {10,60},{610,370} )

		oTreeCube:TexturePicturePath := ""
		oFaceTree := oTreeCube:FrontFace():CreateTree()
			oFaceTree:ItemPadding := 16
			oColumn := oFaceTree:Columns():Add("Pos")
				oColumn:FormatColumn := "1 pos ``"
				oColumn:Width := 8
			oFaceTree:Columns():Add("Progress"):Alignment := 0/*LeftAlignment*/
			oItems := oFaceTree:Items()
				oItem := oItems:Add("")
					oItem:SetProperty("BackgroundExt",1,"none[(2,2,100%-4,100%-4)](top[24,text=`10%`],bottom[6,back=RGB(204,204,204)](left[10%,back=RGB(0,120,215)]))")
					oItem:SetProperty("BackgroundExtValue",1,4/*exIndexExt4*/,2/*exClientExt*/,"25%")
					oItem:SetProperty("BackgroundExtValue",1,2/*exIndexExt2*/,4/*exTextExt*/,oItem:BackgroundExtValue(1,4/*exIndexExt4*/,2/*exClientExt*/))
				oItem1 := oItems:Add("")
					oItem1:SetProperty("BackgroundExt",1,"none[(2,2,100%-4,100%-4)](top[24,text=`10%`],bottom[6,back=RGB(204,204,204)](left[10%,back=RGB(0,120,215)]))")
					oItem1:SetProperty("BackgroundExtValue",1,4/*exIndexExt4*/,2/*exClientExt*/,"15%")
					oItem1:SetProperty("BackgroundExtValue",1,2/*exIndexExt2*/,4/*exTextExt*/,oItem1:BackgroundExtValue(1,4/*exIndexExt4*/,2/*exClientExt*/))
					oItem1:SetProperty("BackgroundExtValue",1,4/*exIndexExt4*/,1/*exBackColorExt*/,65280)
				oItem2 := oItems:Add("")
					oItem2:SetProperty("BackgroundExt",1,"none[(2,2,100%-4,100%-4)](top[24,text=`10%`],bottom[6,back=RGB(204,204,204)](left[10%,back=RGB(0,120,215)]))")
					oItem2:SetProperty("BackgroundExtValue",1,4/*exIndexExt4*/,2/*exClientExt*/,"75%")
					oItem2:SetProperty("BackgroundExtValue",1,2/*exIndexExt2*/,4/*exTextExt*/,oItem2:BackgroundExtValue(1,4/*exIndexExt4*/,2/*exClientExt*/))
				oItem3 := oItems:Add("")
					oItem3:SetProperty("BackgroundExt",1,"none[(2,2,100%-4,100%-4)](top[24,text=`10%`],bottom[6,back=RGB(204,204,204)](left[10%,back=RGB(0,120,215)]))")
					oItem3:SetProperty("BackgroundExtValue",1,4/*exIndexExt4*/,2/*exClientExt*/,"85%")
					oItem3:SetProperty("BackgroundExtValue",1,2/*exIndexExt2*/,4/*exTextExt*/,oItem3:BackgroundExtValue(1,4/*exIndexExt4*/,2/*exClientExt*/))
				oItem4 := oItems:Add("")
					oItem4:SetProperty("BackgroundExt",1,"none[(2,2,100%-4,100%-4)](top[24,text=`10%`],bottom[6,back=RGB(204,204,204)](left[10%,back=RGB(0,120,215)]))")
					oItem4:SetProperty("BackgroundExtValue",1,4/*exIndexExt4*/,2/*exClientExt*/,"5%")
					oItem4:SetProperty("BackgroundExtValue",1,2/*exIndexExt2*/,4/*exTextExt*/,oItem4:BackgroundExtValue(1,4/*exIndexExt4*/,2/*exClientExt*/))
					oItem4:SetProperty("BackgroundExtValue",1,4/*exIndexExt4*/,1/*exBackColorExt*/,255)

	oForm:Show()
	DO WHILE nEvent != xbeP_Quit
		nEvent := AppEvent( @mp1, @mp2, @oXbp )
		oXbp:handleEvent( nEvent, mp1, mp2 )
	ENDDO 
RETURN
86
I have a column of check box type, the question if I can automatically display on/off when user changes the check's state

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

PROCEDURE Main
 	LOCAL oForm
	LOCAL nEvent := 0, mp1 := NIL, mp2 := NIL, oXbp := NIL
	LOCAL oAppearance
	LOCAL oColumn
	LOCAL oFaceTree
	LOCAL oItem,oItem1
	LOCAL oTreeCube

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

	oTreeCube := XbpActiveXControl():new( oForm:drawingArea )
	oTreeCube:CLSID  := "Exontrol.TreeCube.1" /*{13A5B44B-DBB7-42F2-AE2B-943A6CF6C8B9}*/
	oTreeCube:create(,, {10,60},{610,370} )

		oTreeCube:BeginUpdate()
		oTreeCube:TexturePicturePath := ""
		oTreeCube:CheckBoxWidth := 32
		oTreeCube:CheckBoxHeight := 29
		oAppearance := oTreeCube:VisualAppearance()
			oAppearance:Add(1,"gBFLBCJwBAEHhEJAADhABQACg6AADACAxRDAMgBQKAAzQFAYaBsHCGAAGMZRZgmFgAQhFcZQSKUOQTDKMIziaQAGgkNQwCSLIwjNIsBxPFIYRoAmCYZRnAYZIpjOZ5BiKAwgQiHMbwTLjfyMACjH7nnJEEigNIxToOU4jFDGIAWArAZBEbTENBtBIUIRoCA6CgOCAYRa4AJTdL1Er2ex2G7WMpWURkHTUJgGN4BVbdeoxPi/b6wDA8CwXAaHXpfbaKYQ7brYaikchyLI8Tq9bDNIgADLoYADJIoCRqEyudKQcrXJakaZqOoaXo+W5VVzWLpDVo0XBdTiLAAzKDgA6bRqBSjgMjuIpcbABazPJTwPJcXxnGyMehyWJ47KoKZOkoNRTiIRoCDgCZXm+eA6m0dQQj8MRInCUY7CIVoCEAFZonefApC2BQglWHIKAAPx/D4FoyHgTZsAIXwYAWYR8kMR5YAAP4PmOdZ7H8X54AoDhziASAaAiAoeAecZ+CQ" +;
		"IAID4GhwGEF5eBOAphHgZgbgiWQYHYB4CGICA2CSCpPnMYIjgEYZoiIFYDCGCIyCsNgKCCRgSgyHZ4FoKoNiGOJgDKDphEidg0giJEnDiDojBkFZXg+IxZCYGoLgMOQSCmFBlCgOJZCmA4jDiCYJmSZw6FCEglheRhbA4ZZpgIV4ZCYV4+GeGhhniTghhsYAps+HBkGmTh0hmChpiId4PCSeQeHuHwnmmKhyg+aA3gYdohh2cxUhwCJNBIRZuiIXoDGiJwOkyWR9nkPwoiKFA2G2YBznaHIlB0cxGBiAYfAONJUCgIBmlAFg6k0AhaioJ5OkMTIdi0axzEyHmEBIYJpDMCJanyDowiwQwyq0LBbB6Sowg6KwYmoMxI26GwIBwU4Mj0GpgCOCI6BmG4mmYX4mG2a4GmCOAmhuFhfjmAALiKao5m6S4ml8bpNmKQBQgkFpzjSbg1koc44lYKQviKFp9j+TRrnsAZADALAXASQZwDwJp8xQc4uiSQ5xAwRw" +;
		"SkSYhDi0ERCFAECAg")
			oAppearance:Add(2,"gBFLBCJwBAEHhEJAADhABZ8MACAADACAxRDAMgBQKAAzQFAYaBsHCGAAGMZRZgmFgAQhFcZQSKUOQTDKMIziaQAGgkNQwCSLIwjNIsBxPFIYRoAmCYZRnAYZIpjOZ5BiKAwgQiHMbwTLjfyMACjH7nnJEEigNIxToOU4jFDGIAWArAZBEbTENBtBIUIRoCA6CgOCAYRa4AJTdL1Er2ex2G7WMpWURkHTUJgGN4BVbdeoxPi/b6wDA8CwXAaHXpfbaKYQ7brYaikchyLI8Tq9bDNIgADLoYADJIoCRqEyudKQcrXJakaZqOoaXo+W5VVzWLpDVo0XBdTiLAAzKDgA6bRqBSjgMjuIpcbABazPJTwPJcXxnGyMehyWJ47KoKZOkoNRTiIRoCDgCZXm+eA6m0dQQj8MRInCUY7CIVoCEAFZonePwfA6fx7n2MIkBqM4REAB5vnOQpWCeAhnjACR9B4IoEC0OQMAGSZ0H2AxHmQAA/g+Y51n6AAgCgEZLDa" +;
		"ChgmCUQkACAw8g4AJgjKEgNH6IQIEmYB/mAEhCAOBYZDMZIlA2TQSEQCheAGiwKDmTBiAWYYDCCaIWBOChijiMJ/DYXx4loNINBsQBdkWDpiCidgRg+YRYFoRANCMEAuEcXhlHiVISAMTgSlwXh1mOSISE+CZhEiKgLCiQw5FYWYaleFpQBiA4PhOSJhHMJgYD4Yx3mKn5fDYCgwkiUQkiUaRigIYhoEkZZUASTRiHAIodCSWYKCaHgmFkBh0CiAwZn6AYhGaUhcBiEhmkoEJQCOQBTiiTQjlwGZwDOE4oncXh5hmHIzGCIgMCkah0lMJYBFeMAHiyQRqmKMomiCY5wnoPUzFyuIMmIJh2ioXJqi6Ehkg0coEC6H7zHSUgkkCaxA42ToDmydw7GCahygODQNCIVASgoGQ7GyWAyEeaA9n2GQkAsBgGjQKBqGmwxNiKHA7HATxjiSTgzGwaY6h2J5AGOiwfFkM4UkEHQPiWQhQisD5zFyHwKimcAWgZhp" +;
		"rBQAA6AyAgVleHILlucAAj+KA5joDhjg0VhOBEPpwjkBgQD+H5wh2bACBmYBBlwAQPGOKJRH0DwTHiNpHjICgSjiLYkCUGrzk4ApUFoNRJjCBxBGQTwjgCOpPBsWRnDGK4DAiMxDlKXp3ECRpFiuKgOh8AZODKcBqH0NR9GGdA+A6YxplMdRlHmPY4DsTRig2YXfECDg2lmJAjnCeQ8meOANwYwSBXEsDUeQZxdDxDgGwbY3QjjmHiKUcIwQnBfGADYZowR7B6E6E4MI2g1AUAsOkFwCwOhmECC0ZYkxzhhFME4egXQThHGkPUDoPwqtkE6E8LQaQJiHDiK4KYaBCiwFwOkaYVROhqXoIcdw9BzAcCKNAZg3Qbg2BsD0cY+BvBPEWOUfIHgziVHMOMYwWQEAACGAEZYgg7gaGKCUXQ6hoD7F2JwW5txIhPHYBQTwwQljzD6AYW4zx6h9B+F8bo9h/AfDONUZwkhziJF8FwHALBaCTAwIEG4CASDfC4Fw" +;
		"AIRRHuhBAOUUwAxoAQH6C0eACgDAeAMGoGgGREDPAiKAAIVwBgYA2AUZ4QgEAOEGMANwCwIjWCIEgJIASAg==")
			oAppearance:Add(3,"gBFLBCJwBAEHhEJAADhABT0MACAADACAxRDAMgBQKAAzQFAYaBsHCGAAGMZRZgmFgAQhFcZQSKUOQTDKMIziaQAGgkNQwCSLIwjNIsBxPFIYRoAmCYZRnAYZIpjOZ5BiKAwgQiHMbwTLjfyMACjH7nnJEEigNIxToOU4jFDGIAWArAZBEbTENBtBIUIRoCA6CgOCAYRa4AJTdL1Er2ex2G7WMpWURkHTUJgGN4BVbdeoxPi/b6wDA8CwXAaHXpfbaKYQ7brYaikchyLI8Tq9bDNIgADLoYADJIoCRqEyudKQcrXJakaZqOoaXo+W5VVzWLpDVo0XBdTiLAAzKDgA6bRqBSjgMjuIpcbABazPJTwPJcXxnGyMehyWJ47KoKZOkoNRTiIRoCDgCZXm+eA6m0dQQj8MRInCUY7CIVoCEAFZonePR+D6d57GESA1GcIoAA+X5fgW2oJh6QAlnMdZHlgFIogGXw3lQNB+AAA54n4PxflefgBgCXIyBIFgZmG" +;
		"AYOBqAhKEgLZ5gOIQHgGfoAAkCAKBQZJIDiJBogqRwYjYGAZksGJFmGAogkiAgRgkIhohyfwgiOSIsGiCxkAGRBwhCRgZBYM4HGMWA+DeBJhEIBhOg+JAZEYQAaGUQhyFYdZjEgfhKgiIQohWc4TggGRCFKGJkCkDBehmTpJiWTIWGCWRtl+CJkkcfIAhyZgphIdoLEaWZkHeHpmjkIhaggZp5HYORzCcMgCHWFIkDGQBviKZx4jQZIjkuKhFkENgKDCThJiAHR5kIXhykeeh2geFBGmqBBmiiaI6hQb4diiGYcF4PgqkYTJXCgApDDiCYbGmBw6hqIJZCGeo6hUBoZlgaovmOY5CkIPQsEqKoJh2J4RjQeYylkM5cm0NgMhGegNH8JZImGE4BEeWpygiEJhiGDIGjeXATgaYgXG4SweGQGRugKOpqGSThTAQdA+hcCQuhsP5HjuVoPBkJQqhaZAXEsO52hkNYNGEcwCjmJAaCaew5HCBhOA8PpvJQDg" +;
		"/iyMZmiMGYGv4dw4jGB5MlKRpwCEcwEhAKhcE4OhRisdwEhmSZHGyJwjGQTRMjcHZHmKXBUGuJxHniHwlkqXpzG8Oo+moWRKmgGRKC0BZzk2c/FmiUZkFGBohBuJQhH8TgxjUB4ElUJwCDMRIRHuNBYhyd5WmuTJKECQYuEuCJhHWTYShQNhtm0M5zFmSpvFGbgvkgKI9DgXw8jcRwwm0GoCgEAxhoAWB0MwgQWi7EmOcMIpgnDwC4CcA4wh4gcB+BUYYcROBPA0GkCYhw4iuCmDgEg1wWAwDmBQJwlw9ifD4OsTAcQLhDBmHQbg1gzBvCWNMegnQnhNGqHUDoXwujWHqAYLICAAAbCKDAOQ4BMD9GaFUUo2QYjzFcLcTovBIhODuBoYoJxEBSHwP4JIrRyB5D8FcTI5x8jeEeJsco7xSC5HEG8S4DgEjnHaNQWIfRJheDaH8BgTgoB8EqFYMoFxPg/CeMUeovAMDBGKJkBgXxGgLHsH4R4QQpj7EyP8" +;
		"ZI1hEChBQAggI")
		oTreeCube:SetProperty("Background",70/*exCheckBoxState0*/,0x1000000)
		oTreeCube:SetProperty("Background",71/*exCheckBoxState1*/,0x2000000)
		oTreeCube:SetProperty("Background",72/*exCheckBoxState2*/,0x3000000)
		oFaceTree := oTreeCube:FrontFace():CreateTree()
			oFaceTree:HasLines := 2/*exThinLine*/
			oFaceTree:ShowSelection := .F.
			oFaceTree:DrawGridLines := -2/*exRowLines*/
			oFaceTree:ItemPadding := 16
			oColumn := oFaceTree:Columns():Add("<c><b>Partial Check")
				oColumn:Alignment := 0/*LeftAlignment*/
				oColumn:SetProperty("Def",0/*exCellHasCheckBox*/,.T.)
				oColumn:FormatColumn := "`Check <b>` + 1 rpos `` + '</b> ' + (state=0 ? `<off 4>(off)` : (state=1 ? `<off 4>(on)` : ``))"
				oColumn:PartialCheck := .T.
			oFaceTree:Items():Count := oTreeCube:FrontFace():FaceTree():VisibleItemsCount()
			oItem := oFaceTree:ItemByIndex(1)
				oItem:Items():Count := 3
				oItem:Expanded := .T.
				oItem:SetProperty("State",0,1)
			oItem1 := oFaceTree:ItemByIndex(2)
				oItem1:Items():Count := 3
				oItem1:Expanded := .T.
				oItem1:Items():Item(1):SetProperty("State",0,1)
		oTreeCube:EndUpdate()

	oForm:Show()
	DO WHILE nEvent != xbeP_Quit
		nEvent := AppEvent( @mp1, @mp2, @oXbp )
		oXbp:handleEvent( nEvent, mp1, mp2 )
	ENDDO 
RETURN
85
How do I print the control

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

PROCEDURE Main
 	LOCAL oForm
	LOCAL nEvent := 0, mp1 := NIL, mp2 := NIL, oXbp := NIL
	LOCAL oPrint
	LOCAL oFaceCalendar
	LOCAL oTreeCube

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

	oTreeCube := XbpActiveXControl():new( oForm:drawingArea )
	oTreeCube:CLSID  := "Exontrol.TreeCube.1" /*{13A5B44B-DBB7-42F2-AE2B-943A6CF6C8B9}*/
	oTreeCube:create(,, {10,60},{610,370} )

		oFaceCalendar := oTreeCube:FrontFace():CreateCalendar()
			oFaceCalendar:AutoSize := 1/*exFitClient*/
			oFaceCalendar:MaxMonthX := 1
			oFaceCalendar:MaxMonthY := 1
		oPrint := CreateObject("Exontrol.Print")
			oPrint:PrintExt := oTreeCube
			oPrint:Preview()

	oForm:Show()
	DO WHILE nEvent != xbeP_Quit
		nEvent := AppEvent( @mp1, @mp2, @oXbp )
		oXbp:handleEvent( nEvent, mp1, mp2 )
	ENDDO 
RETURN
84
How can I get the caption from the point

PROCEDURE OnMouseMove(oTreeCube,Button,Shift,X,Y)
	DevOut( oTreeCube:FrontFace:FaceTree():CaptionFromPoint(-1,-1) )
RETURN

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

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

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

	oTreeCube := XbpActiveXControl():new( oForm:drawingArea )
	oTreeCube:CLSID  := "Exontrol.TreeCube.1" /*{13A5B44B-DBB7-42F2-AE2B-943A6CF6C8B9}*/
	oTreeCube:create(,, {10,60},{610,370} )

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

		oTreeCube:TexturePicturePath := "C:\Program Files\Exontrol\ExTreeCube\Sample\Texture\Chapel"
		oFaceTree := oTreeCube:FrontFace():CreateTree()
			oFaceTree:ItemPadding := 16
			oFaceTree:HeaderVisible := .F.
			oFaceTree:SetProperty("ForeColor",AutomationTranslateColor( GraMakeRGBColor  ( { 255,255,255 } )  , .F. ))
			oFaceTree:Items():ToString := "<sha \;\;0><font \;18>Place <b>A,<sha \;\;0><font \;18>Place <b>B,<sha \;\;0><font \;18>Place <b>C,<sha \;\;0><font \;18>Place <b>D,<sha \;\;0><font \;18>Place <b>E"

	oForm:Show()
	DO WHILE nEvent != xbeP_Quit
		nEvent := AppEvent( @mp1, @mp2, @oXbp )
		oXbp:handleEvent( nEvent, mp1, mp2 )
	ENDDO 
RETURN
83
How can I get the value from the point

PROCEDURE OnMouseMove(oTreeCube,Button,Shift,X,Y)
	DevOut( Transform(oTreeCube:FrontFace:FaceTree():ValueFromPoint(-1,-1),"") )
RETURN

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

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

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

	oTreeCube := XbpActiveXControl():new( oForm:drawingArea )
	oTreeCube:CLSID  := "Exontrol.TreeCube.1" /*{13A5B44B-DBB7-42F2-AE2B-943A6CF6C8B9}*/
	oTreeCube:create(,, {10,60},{610,370} )

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

		oTreeCube:TexturePicturePath := "C:\Program Files\Exontrol\ExTreeCube\Sample\Texture\Chapel"
		oFaceTree := oTreeCube:FrontFace():CreateTree()
			oFaceTree:ItemPadding := 16
			oFaceTree:HeaderVisible := .F.
			oFaceTree:SetProperty("ForeColor",AutomationTranslateColor( GraMakeRGBColor  ( { 255,255,255 } )  , .F. ))
			oFaceTree:Items():ToString := "<sha \;\;0><font \;18>Place <b>A,<sha \;\;0><font \;18>Place <b>B,<sha \;\;0><font \;18>Place <b>C,<sha \;\;0><font \;18>Place <b>D,<sha \;\;0><font \;18>Place <b>E"

	oForm:Show()
	DO WHILE nEvent != xbeP_Quit
		nEvent := AppEvent( @mp1, @mp2, @oXbp )
		oXbp:handleEvent( nEvent, mp1, mp2 )
	ENDDO 
RETURN
82
How can I get the column from the point
PROCEDURE OnMouseMove(oTreeCube,Button,Shift,X,Y)
	DevOut( Transform(oTreeCube:FrontFace:FaceTree():ColumnFromPoint(-1,-1),"") )
RETURN

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

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

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

	oTreeCube := XbpActiveXControl():new( oForm:drawingArea )
	oTreeCube:CLSID  := "Exontrol.TreeCube.1" /*{13A5B44B-DBB7-42F2-AE2B-943A6CF6C8B9}*/
	oTreeCube:create(,, {10,60},{610,370} )

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

		oFaceTree := oTreeCube:FrontFace():CreateTree()
			oFaceTree:FullRowSelect := .T.
			oFaceTree:DrawGridLines := -2/*exRowLines*/
			oFaceTree:Columns():Add("A"):FormatColumn := "0 pos `A-Z`"
			oFaceTree:Columns():Add("B"):FormatColumn := "0 pos `B-Z`"
			oFaceTree:Columns():Add("C"):FormatColumn := "0 pos `C-Z`"
			oFaceTree:Columns():Add("D"):FormatColumn := "0 pos `D-Z`"
			oFaceTree:Items():Count := 4

	oForm:Show()
	DO WHILE nEvent != xbeP_Quit
		nEvent := AppEvent( @mp1, @mp2, @oXbp )
		oXbp:handleEvent( nEvent, mp1, mp2 )
	ENDDO 
RETURN
81
How can I get the item from the point
PROCEDURE OnMouseMove(oTreeCube,Button,Shift,X,Y)
	DevOut( Transform(oTreeCube:FrontFace:FaceTree():ItemFromPoint(-1,-1),"") )
RETURN

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

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

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

	oTreeCube := XbpActiveXControl():new( oForm:drawingArea )
	oTreeCube:CLSID  := "Exontrol.TreeCube.1" /*{13A5B44B-DBB7-42F2-AE2B-943A6CF6C8B9}*/
	oTreeCube:create(,, {10,60},{610,370} )

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

		oFaceTree := oTreeCube:FrontFace():CreateTree()
			oFaceTree:FullRowSelect := .T.
			oFaceTree:DrawGridLines := -2/*exRowLines*/
			oFaceTree:Columns():Add("A"):FormatColumn := "0 pos `A-Z`"
			oFaceTree:Columns():Add("B"):FormatColumn := "0 pos `B-Z`"
			oFaceTree:Columns():Add("C"):FormatColumn := "0 pos `C-Z`"
			oFaceTree:Columns():Add("D"):FormatColumn := "0 pos `D-Z`"
			oFaceTree:Items():Count := 4

	oForm:Show()
	DO WHILE nEvent != xbeP_Quit
		nEvent := AppEvent( @mp1, @mp2, @oXbp )
		oXbp:handleEvent( nEvent, mp1, mp2 )
	ENDDO 
RETURN
80
How can I get the value from the point (calendar's date)
PROCEDURE OnMouseMove(oTreeCube,Button,Shift,X,Y)
	DevOut( "Date:" )
	DevOut( Transform(oTreeCube:FrontFace:FaceCalendar():ValueFromPoint(-1,-1),"") )
RETURN

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

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

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

	oTreeCube := XbpActiveXControl():new( oForm:drawingArea )
	oTreeCube:CLSID  := "Exontrol.TreeCube.1" /*{13A5B44B-DBB7-42F2-AE2B-943A6CF6C8B9}*/
	oTreeCube:create(,, {10,60},{610,370} )

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

		oFaceCalendar := oTreeCube:FrontFace():CreateCalendar()
			oFaceCalendar:AutoSize := 1/*exFitClient*/
			oFaceCalendar:MaxMonthX := 1
			oFaceCalendar:MaxMonthY := 1

	oForm:Show()
	DO WHILE nEvent != xbeP_Quit
		nEvent := AppEvent( @mp1, @mp2, @oXbp )
		oXbp:handleEvent( nEvent, mp1, mp2 )
	ENDDO 
RETURN
79
How can I get the date from the point (calendar's date)
PROCEDURE OnMouseMove(oTreeCube,Button,Shift,X,Y)
	DevOut( "Date:" )
	DevOut( Transform(oTreeCube:FrontFace:FaceCalendar():DateFromPoint(-1,-1),"") )
RETURN

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

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

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

	oTreeCube := XbpActiveXControl():new( oForm:drawingArea )
	oTreeCube:CLSID  := "Exontrol.TreeCube.1" /*{13A5B44B-DBB7-42F2-AE2B-943A6CF6C8B9}*/
	oTreeCube:create(,, {10,60},{610,370} )

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

		oFaceCalendar := oTreeCube:FrontFace():CreateCalendar()
			oFaceCalendar:AutoSize := 1/*exFitClient*/
			oFaceCalendar:MaxMonthX := 1
			oFaceCalendar:MaxMonthY := 1

	oForm:Show()
	DO WHILE nEvent != xbeP_Quit
		nEvent := AppEvent( @mp1, @mp2, @oXbp )
		oXbp:handleEvent( nEvent, mp1, mp2 )
	ENDDO 
RETURN
78
How can I get the face from the point

PROCEDURE OnMouseMove(oTreeCube,Button,Shift,X,Y)
	DevOut( "Face:" )
	DevOut( Transform(oTreeCube:FaceFromPoint(-1,-1),"") )
RETURN

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

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

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

	oTreeCube := XbpActiveXControl():new( oForm:drawingArea )
	oTreeCube:CLSID  := "Exontrol.TreeCube.1" /*{13A5B44B-DBB7-42F2-AE2B-943A6CF6C8B9}*/
	oTreeCube:create(,, {10,60},{610,370} )

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

		oTreeCube:IdentifyFace := 1/*exIdentifyFaceCaption*/

	oForm:Show()
	DO WHILE nEvent != xbeP_Quit
		nEvent := AppEvent( @mp1, @mp2, @oXbp )
		oXbp:handleEvent( nEvent, mp1, mp2 )
	ENDDO 
RETURN
77
Does your control support partial-check feature

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

PROCEDURE Main
 	LOCAL oForm
	LOCAL nEvent := 0, mp1 := NIL, mp2 := NIL, oXbp := NIL
	LOCAL oAppearance
	LOCAL oColumn
	LOCAL oFaceTree
	LOCAL oItem,oItem1
	LOCAL oTreeCube

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

	oTreeCube := XbpActiveXControl():new( oForm:drawingArea )
	oTreeCube:CLSID  := "Exontrol.TreeCube.1" /*{13A5B44B-DBB7-42F2-AE2B-943A6CF6C8B9}*/
	oTreeCube:create(,, {10,60},{610,370} )

		oTreeCube:BeginUpdate()
		oTreeCube:TexturePicturePath := ""
		oTreeCube:CheckBoxWidth := 32
		oTreeCube:CheckBoxHeight := 29
		oAppearance := oTreeCube:VisualAppearance()
			oAppearance:Add(1,"gBFLBCJwBAEHhEJAADhABQACg6AADACAxRDAMgBQKAAzQFAYaBsHCGAAGMZRZgmFgAQhFcZQSKUOQTDKMIziaQAGgkNQwCSLIwjNIsBxPFIYRoAmCYZRnAYZIpjOZ5BiKAwgQiHMbwTLjfyMACjH7nnJEEigNIxToOU4jFDGIAWArAZBEbTENBtBIUIRoCA6CgOCAYRa4AJTdL1Er2ex2G7WMpWURkHTUJgGN4BVbdeoxPi/b6wDA8CwXAaHXpfbaKYQ7brYaikchyLI8Tq9bDNIgADLoYADJIoCRqEyudKQcrXJakaZqOoaXo+W5VVzWLpDVo0XBdTiLAAzKDgA6bRqBSjgMjuIpcbABazPJTwPJcXxnGyMehyWJ47KoKZOkoNRTiIRoCDgCZXm+eA6m0dQQj8MRInCUY7CIVoCEAFZonefApC2BQglWHIKAAPx/D4FoyHgTZsAIXwYAWYR8kMR5YAAP4PmOdZ7H8X54AoDhziASAaAiAoeAecZ+CQ" +;
		"IAID4GhwGEF5eBOAphHgZgbgiWQYHYB4CGICA2CSCpPnMYIjgEYZoiIFYDCGCIyCsNgKCCRgSgyHZ4FoKoNiGOJgDKDphEidg0giJEnDiDojBkFZXg+IxZCYGoLgMOQSCmFBlCgOJZCmA4jDiCYJmSZw6FCEglheRhbA4ZZpgIV4ZCYV4+GeGhhniTghhsYAps+HBkGmTh0hmChpiId4PCSeQeHuHwnmmKhyg+aA3gYdohh2cxUhwCJNBIRZuiIXoDGiJwOkyWR9nkPwoiKFA2G2YBznaHIlB0cxGBiAYfAONJUCgIBmlAFg6k0AhaioJ5OkMTIdi0axzEyHmEBIYJpDMCJanyDowiwQwyq0LBbB6Sowg6KwYmoMxI26GwIBwU4Mj0GpgCOCI6BmG4mmYX4mG2a4GmCOAmhuFhfjmAALiKao5m6S4ml8bpNmKQBQgkFpzjSbg1koc44lYKQviKFp9j+TRrnsAZADALAXASQZwDwJp8xQc4uiSQ5xAwRw" +;
		"SkSYhDi0ERCFAECAg")
			oAppearance:Add(2,"gBFLBCJwBAEHhEJAADhABZ8MACAADACAxRDAMgBQKAAzQFAYaBsHCGAAGMZRZgmFgAQhFcZQSKUOQTDKMIziaQAGgkNQwCSLIwjNIsBxPFIYRoAmCYZRnAYZIpjOZ5BiKAwgQiHMbwTLjfyMACjH7nnJEEigNIxToOU4jFDGIAWArAZBEbTENBtBIUIRoCA6CgOCAYRa4AJTdL1Er2ex2G7WMpWURkHTUJgGN4BVbdeoxPi/b6wDA8CwXAaHXpfbaKYQ7brYaikchyLI8Tq9bDNIgADLoYADJIoCRqEyudKQcrXJakaZqOoaXo+W5VVzWLpDVo0XBdTiLAAzKDgA6bRqBSjgMjuIpcbABazPJTwPJcXxnGyMehyWJ47KoKZOkoNRTiIRoCDgCZXm+eA6m0dQQj8MRInCUY7CIVoCEAFZonePwfA6fx7n2MIkBqM4REAB5vnOQpWCeAhnjACR9B4IoEC0OQMAGSZ0H2AxHmQAA/g+Y51n6AAgCgEZLDa" +;
		"ChgmCUQkACAw8g4AJgjKEgNH6IQIEmYB/mAEhCAOBYZDMZIlA2TQSEQCheAGiwKDmTBiAWYYDCCaIWBOChijiMJ/DYXx4loNINBsQBdkWDpiCidgRg+YRYFoRANCMEAuEcXhlHiVISAMTgSlwXh1mOSISE+CZhEiKgLCiQw5FYWYaleFpQBiA4PhOSJhHMJgYD4Yx3mKn5fDYCgwkiUQkiUaRigIYhoEkZZUASTRiHAIodCSWYKCaHgmFkBh0CiAwZn6AYhGaUhcBiEhmkoEJQCOQBTiiTQjlwGZwDOE4oncXh5hmHIzGCIgMCkah0lMJYBFeMAHiyQRqmKMomiCY5wnoPUzFyuIMmIJh2ioXJqi6Ehkg0coEC6H7zHSUgkkCaxA42ToDmydw7GCahygODQNCIVASgoGQ7GyWAyEeaA9n2GQkAsBgGjQKBqGmwxNiKHA7HATxjiSTgzGwaY6h2J5AGOiwfFkM4UkEHQPiWQhQisD5zFyHwKimcAWgZhp" +;
		"rBQAA6AyAgVleHILlucAAj+KA5joDhjg0VhOBEPpwjkBgQD+H5wh2bACBmYBBlwAQPGOKJRH0DwTHiNpHjICgSjiLYkCUGrzk4ApUFoNRJjCBxBGQTwjgCOpPBsWRnDGK4DAiMxDlKXp3ECRpFiuKgOh8AZODKcBqH0NR9GGdA+A6YxplMdRlHmPY4DsTRig2YXfECDg2lmJAjnCeQ8meOANwYwSBXEsDUeQZxdDxDgGwbY3QjjmHiKUcIwQnBfGADYZowR7B6E6E4MI2g1AUAsOkFwCwOhmECC0ZYkxzhhFME4egXQThHGkPUDoPwqtkE6E8LQaQJiHDiK4KYaBCiwFwOkaYVROhqXoIcdw9BzAcCKNAZg3Qbg2BsD0cY+BvBPEWOUfIHgziVHMOMYwWQEAACGAEZYgg7gaGKCUXQ6hoD7F2JwW5txIhPHYBQTwwQljzD6AYW4zx6h9B+F8bo9h/AfDONUZwkhziJF8FwHALBaCTAwIEG4CASDfC4Fw" +;
		"AIRRHuhBAOUUwAxoAQH6C0eACgDAeAMGoGgGREDPAiKAAIVwBgYA2AUZ4QgEAOEGMANwCwIjWCIEgJIASAg==")
			oAppearance:Add(3,"gBFLBCJwBAEHhEJAADhABT0MACAADACAxRDAMgBQKAAzQFAYaBsHCGAAGMZRZgmFgAQhFcZQSKUOQTDKMIziaQAGgkNQwCSLIwjNIsBxPFIYRoAmCYZRnAYZIpjOZ5BiKAwgQiHMbwTLjfyMACjH7nnJEEigNIxToOU4jFDGIAWArAZBEbTENBtBIUIRoCA6CgOCAYRa4AJTdL1Er2ex2G7WMpWURkHTUJgGN4BVbdeoxPi/b6wDA8CwXAaHXpfbaKYQ7brYaikchyLI8Tq9bDNIgADLoYADJIoCRqEyudKQcrXJakaZqOoaXo+W5VVzWLpDVo0XBdTiLAAzKDgA6bRqBSjgMjuIpcbABazPJTwPJcXxnGyMehyWJ47KoKZOkoNRTiIRoCDgCZXm+eA6m0dQQj8MRInCUY7CIVoCEAFZonePR+D6d57GESA1GcIoAA+X5fgW2oJh6QAlnMdZHlgFIogGXw3lQNB+AAA54n4PxflefgBgCXIyBIFgZmG" +;
		"AYOBqAhKEgLZ5gOIQHgGfoAAkCAKBQZJIDiJBogqRwYjYGAZksGJFmGAogkiAgRgkIhohyfwgiOSIsGiCxkAGRBwhCRgZBYM4HGMWA+DeBJhEIBhOg+JAZEYQAaGUQhyFYdZjEgfhKgiIQohWc4TggGRCFKGJkCkDBehmTpJiWTIWGCWRtl+CJkkcfIAhyZgphIdoLEaWZkHeHpmjkIhaggZp5HYORzCcMgCHWFIkDGQBviKZx4jQZIjkuKhFkENgKDCThJiAHR5kIXhykeeh2geFBGmqBBmiiaI6hQb4diiGYcF4PgqkYTJXCgApDDiCYbGmBw6hqIJZCGeo6hUBoZlgaovmOY5CkIPQsEqKoJh2J4RjQeYylkM5cm0NgMhGegNH8JZImGE4BEeWpygiEJhiGDIGjeXATgaYgXG4SweGQGRugKOpqGSThTAQdA+hcCQuhsP5HjuVoPBkJQqhaZAXEsO52hkNYNGEcwCjmJAaCaew5HCBhOA8PpvJQDg" +;
		"/iyMZmiMGYGv4dw4jGB5MlKRpwCEcwEhAKhcE4OhRisdwEhmSZHGyJwjGQTRMjcHZHmKXBUGuJxHniHwlkqXpzG8Oo+moWRKmgGRKC0BZzk2c/FmiUZkFGBohBuJQhH8TgxjUB4ElUJwCDMRIRHuNBYhyd5WmuTJKECQYuEuCJhHWTYShQNhtm0M5zFmSpvFGbgvkgKI9DgXw8jcRwwm0GoCgEAxhoAWB0MwgQWi7EmOcMIpgnDwC4CcA4wh4gcB+BUYYcROBPA0GkCYhw4iuCmDgEg1wWAwDmBQJwlw9ifD4OsTAcQLhDBmHQbg1gzBvCWNMegnQnhNGqHUDoXwujWHqAYLICAAAbCKDAOQ4BMD9GaFUUo2QYjzFcLcTovBIhODuBoYoJxEBSHwP4JIrRyB5D8FcTI5x8jeEeJsco7xSC5HEG8S4DgEjnHaNQWIfRJheDaH8BgTgoB8EqFYMoFxPg/CeMUeovAMDBGKJkBgXxGgLHsH4R4QQpj7EyP8" +;
		"ZI1hEChBQAggI")
		oTreeCube:SetProperty("Background",70/*exCheckBoxState0*/,0x1000000)
		oTreeCube:SetProperty("Background",71/*exCheckBoxState1*/,0x2000000)
		oTreeCube:SetProperty("Background",72/*exCheckBoxState2*/,0x3000000)
		oFaceTree := oTreeCube:FrontFace():CreateTree()
			oFaceTree:HasLines := 2/*exThinLine*/
			oFaceTree:ShowSelection := .F.
			oFaceTree:DrawGridLines := -2/*exRowLines*/
			oFaceTree:ItemPadding := 16
			oColumn := oFaceTree:Columns():Add("<c><b>Partial Check")
				oColumn:Alignment := 0/*LeftAlignment*/
				oColumn:SetProperty("Def",0/*exCellHasCheckBox*/,.T.)
				oColumn:FormatColumn := "`Check <b>` + 1 rpos ``"
				oColumn:PartialCheck := .T.
			oFaceTree:Items():Count := oTreeCube:FrontFace():FaceTree():VisibleItemsCount()
			oItem := oFaceTree:ItemByIndex(1)
				oItem:Items():Count := 3
				oItem:Expanded := .T.
				oItem:SetProperty("State",0,1)
			oItem1 := oFaceTree:ItemByIndex(2)
				oItem1:Items():Count := 3
				oItem1:Expanded := .T.
				oItem1:Items():Item(1):SetProperty("State",0,1)
		oTreeCube:EndUpdate()

	oForm:Show()
	DO WHILE nEvent != xbeP_Quit
		nEvent := AppEvent( @mp1, @mp2, @oXbp )
		oXbp:handleEvent( nEvent, mp1, mp2 )
	ENDDO 
RETURN
76
I am using the Items.ToString, just wondering if I can use it for multiple columns

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

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

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

	oTreeCube := XbpActiveXControl():new( oForm:drawingArea )
	oTreeCube:CLSID  := "Exontrol.TreeCube.1" /*{13A5B44B-DBB7-42F2-AE2B-943A6CF6C8B9}*/
	oTreeCube:create(,, {10,60},{610,370} )

		oTreeCube:TexturePicturePath := ""
		oFaceTree := oTreeCube:FrontFace():CreateTree()
			oFaceTree:DrawGridLines := 0/*exNoLines*/
			oFaceTree:HeaderVisible := .F.
			oFaceTree:Columns():Count := 4
			oFaceTree:Items():ToString := "1;2;3;4,5;6;7;8,9;10;11;12,13;14;15;16,17;18;29;20,21;22;23;24,25;26;27;28,29;30;31;32"

	oForm:Show()
	DO WHILE nEvent != xbeP_Quit
		nEvent := AppEvent( @mp1, @mp2, @oXbp )
		oXbp:handleEvent( nEvent, mp1, mp2 )
	ENDDO 
RETURN
75
How can I show the item on multiple-lines

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

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

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

	oTreeCube := XbpActiveXControl():new( oForm:drawingArea )
	oTreeCube:CLSID  := "Exontrol.TreeCube.1" /*{13A5B44B-DBB7-42F2-AE2B-943A6CF6C8B9}*/
	oTreeCube:create(,, {10,60},{610,370} )

		oTreeCube:BeginUpdate()
		oTreeCube:TexturePicturePath := ""
		oFaceTree := oTreeCube:FrontFace():CreateTree()
			oFaceTree:DrawGridLines := -2/*exRowLines*/
			oFaceTree:ItemPadding := 12
			oColumn := oFaceTree:Columns():Add("<c><b>Items")
				oColumn:Alignment := 0/*LeftAlignment*/
				oColumn:SetProperty("Def",16/*exCellSingleLine*/,.F.)
			oItems := oFaceTree:Items()
				oItems:Add("Short")
				oItems:Add("The eXTreeCube library provides fish-eye representation / cube map texturing of different components such as calendar, multiple - columns tree view and so on. Cube map texturing is a form of environment texture mapping that uses a viewing direction (3D vector) to map into a view plane the six 2D textures arranged like the faces of a cube. ")
				oItems:Add("Short")
		oTreeCube:EndUpdate()

	oForm:Show()
	DO WHILE nEvent != xbeP_Quit
		nEvent := AppEvent( @mp1, @mp2, @oXbp )
		oXbp:handleEvent( nEvent, mp1, mp2 )
	ENDDO 
RETURN
74
How can I change the visual appearance for the control's radio buttons

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

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

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

	oTreeCube := XbpActiveXControl():new( oForm:drawingArea )
	oTreeCube:CLSID  := "Exontrol.TreeCube.1" /*{13A5B44B-DBB7-42F2-AE2B-943A6CF6C8B9}*/
	oTreeCube:create(,, {10,60},{610,370} )

		oTreeCube:BeginUpdate()
		oTreeCube:TexturePicturePath := ""
		oTreeCube:RadioButtonWidth := 23
		oTreeCube:RadioButtonHeight := 23
		oAppearance := oTreeCube:VisualAppearance()
			oAppearance:Add(1,"gBFLBCJwBAEHhEJAADhABNoCg6AADACAxRDAMgBQKAAzQFAYaBsHCGAAGMZRZgmFgAQhFcZQSKUOQTDKMIziaQIRDINQlSTJcQjKKEUQTFiXIyAKQobh2A42SDAcgSFIADRfFoWmxTdAcYSCGSZZrGOiQADIM40R7UAABPBNKR1BKmHZDQRAApqXIjVDAYIQSSBUlkHScRijDICXSIIQmbajIZoJCiVZ3VaGETnRQlJQuEgOHZwDAsBwPBqBPziLp4WzmGqhR5ichYHI8RYVTKXYy3DxZW7OO4PQjQM7hHL8fwlfTuagyGpZOxjP5cdrYHw2J7NUzJeDxbhrTb6Zh7ILVX7TNIwXAdD4PIKmNryORsC4XG5pZ7oOh6Lo3G4rhWZI2nOL4eBON4LkeRJvHWDxvB6G5Lmac56D0OY3hMU5bm6bRoiAeA9DMX5riydJ+D8P4vEeO4xkEcQfCYBZrHKXgzlme4BmCB4eAUZRbAaAZeGsDg4EYCYEmERoaBE" +;
		"OJaiMIY2EIXo2FYFYHmIBp1j8OoQhcYZNDiIgIiYE4Jl2BAlj0agOmiKgyH6Xo2jECYGE8WJmDODpehgFgZEIXI3DyfoQmQSQWEaEZkgkJhKhKZA2hmSxCEyGREnSFJkkkVhWwCCAthFKRjiIXhpiXOhihGYwJESSRCFuIxqGoPomkmDhuhWT45kSXYcl8UxdAkbgPBaMhTD0JApj4foRBoaJ5iqAxdmadhzDcWxpgIf4bhsY4Gg6GYYDcegNGUYg6VMIsBBmNg8CmRwuCOJBgBaAgXh6JQzl6JocE+OQQn+KpqkqNouivgQiiaLJPHaMZYHwQAHHIdRrA6ep2jMbYqx2RxzmqBpajOLxOnacYPHcHZnHGOlynmbo0jSbRLFaJoJlyNpplyKArhcGZcgMWpGjCXo4liM4ukiHpngkeJojiTZphmLIDG2Nwak2N4vEaAJsj2bpLgWFxlGGExOn4dgvHOMpxGgbwkAyaxEFCFAEICA=")
			oAppearance:Add(2,"gBFLBCJwBAEHhEJAADhABCEMACAADACAxRDAMgBQKAAzQFAYaBsHCGAAGMZRZgmFgAQhFcZQSKUOQTDKMIziaQIRDINQlSTJcQjKKEUQTFiXIyAKQobh2A42SDAcgSFIADRfFoWmxTdAcYSCGSZZrGOiQADINI0R7UAABPBIMSjAamHZDQRAApqXIjVaAhySQKksg6TiMUYZAbaRBCEzbUZDNBIopUQLVU5ABbUEqBIipIrEQLHNwPBaEYZiOIYW5re4cfzIMhyLI8Ob3CqHZhleTwTjWGYvSp1dBbTQ2QyVRanMDqOjsKxmW5Gbh5NhfHY8dxnDKcZ5jGSudrjEZ9VpmG74JzeEbjRj8chxT4PDxnBK/YDSWgdLo8VzXBpcG2MY4maXxzFKQRxHgOQeC8H4TkuZhzHoNR9kaXpNnONZsGGMo9B4A5bmuFZ7n4Pw/i+XpFmSVB/mAB41hsQJfBYOJXgGXAHm4CoCmCtYAHqXRWBGWB/F2Z5UnaAxZFO" +;
		"aJ2DuTpzHCOQ5gwcg8veDBjlCaA0mGBg6BYapcEONZiHYHADg4MoKE+U4QkEIINAISAig4Y44moPIPA4EpoHSBoOngNgyDiW5jCGShCF+VouA2EQNhKHBMg+Y5pFYPYVmOQxYiAD4kEgNZRHSTokCWax4A4KA2DaDglGkUhYhoZRph4DYZB6NAllEbwOmgKhEhqJ4JjIa4ek8c48mGAoflcAQJhITxaBYCoHEuGZmHuIooioIgKgWJIUCWXh4hkNhImkM4JloMh6iaJRzhySAkCkVhFhUd4QhMJomD0KtvBCCJMGocouh6KIKiifoKlodAmAAOgrgYVoVD7Y5AlMJhDAqPoLh6D4DkCYosicSoYkkQhcmMapOD6LQKkqHgkCwKhwmILpHFqSJ7jaTZbHYBw1lCFwwnEcAqgOUoUGSa5DxkLQGHsVhWhQRJKkmFYkBuaI1lgdBtlMdZKi6LoKnSZQwggOp+kGJpjiufIDiyGQXCiYZCmyJxeAQYQi0YYI" +;
		"+lieoqmmKwpHIdoskIGQGFWSg8DIBx6GCQ4AAYXhHjlo5fCqNpPjYRJ/kucwMkcMpM9GMwqk2Tx3AGa4AnIVpkm2N5cAgcJvk2XIsjGeYlF53hKk2dAnEGJR7nCdxlgYc4ajmEplk4NYNGcWpKiYRx5k4dYhC0RxggsTpXAGQA3jaBoEmuUIuFuCo4DoNoDHqShwCKXYPCSXYzmOMx6lwOwZoawrgkE0HwBY1xegdE2MMWQhBOhoEUBIQAgCAgA==")
		oTreeCube:SetProperty("Background",73/*exRadioButtonState0*/,0x1000000)
		oTreeCube:SetProperty("Background",74/*exRadioButtonState1*/,0x2000000)
		oFaceTree := oTreeCube:FrontFace():CreateTree()
			oFaceTree:ShowSelection := .F.
			oFaceTree:DrawGridLines := -2/*exRowLines*/
			oFaceTree:ItemPadding := 12
			oColumn := oFaceTree:Columns():Add("<c><b>Radio")
				oColumn:Alignment := 0/*LeftAlignment*/
				oColumn:SetProperty("Def",1/*exCellHasRadioButton*/,.T.)
			oFaceTree:Items():ToString := "Radio 1,Radio 2,Radio 3,Radio 4"
			oFaceTree:ItemByIndex(1):SetProperty("State",0,1)
		oTreeCube:EndUpdate()

	oForm:Show()
	DO WHILE nEvent != xbeP_Quit
		nEvent := AppEvent( @mp1, @mp2, @oXbp )
		oXbp:handleEvent( nEvent, mp1, mp2 )
	ENDDO 
RETURN
73
How can I change the visual appearance for the control's check boxes (6)

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

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

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

	oTreeCube := XbpActiveXControl():new( oForm:drawingArea )
	oTreeCube:CLSID  := "Exontrol.TreeCube.1" /*{13A5B44B-DBB7-42F2-AE2B-943A6CF6C8B9}*/
	oTreeCube:create(,, {10,60},{610,370} )

		oTreeCube:BeginUpdate()
		oTreeCube:TexturePicturePath := ""
		oTreeCube:CheckBoxWidth := 16
		oTreeCube:CheckBoxHeight := 16
		oAppearance := oTreeCube:VisualAppearance()
			oAppearance:Add(1,"gBFLBCJwBAEHhEJAADhABKMGACAADACAxRDAMgBQKAAzQFAYaBsHCGAAGMZRZgmFgAQhFcZQSKUOQTDKMIziaQIRDINQlSTJcQjKKEUQTFiXIyAKQobh2A42SDAcgSFIACxfFoWRrnaA5QoGM4EDTRYADCKsaQ/J0LcI1FLUEyUf6sAArB74XiCIAIQiUBomGahajkMoYZAAaDCCI2a4aDZCIoVHalKgxC5oKSqCJqbptMZ/HrgJQYGRuC4NQ7CcDKDATbr9MZ9ZBCNZoPimEYtS7MMLyRB8QpyAytaBhRaaGwmSr3U7Oc50d69FYTIxcYZoCq1XBOGYMZLcNR3La9YYnBqMbRAeJYNped6NSDVcKxLgaa4fTrOZZzHL9HpviMWYBnWOr+kwJ4zlqY53CAZQ/B4GZzmab5qHyT4cDeDInkwPp8DCTI/h+Iw7nMZZhj4B5eGKL57gYGAgAadZoG8soBgYfxKjcSRYCCYJGGYDoDmCQgNh0ZIZAaSB2gW" +;
		"YJ2F4FwdhsJpuBQfRiAWdQJDqUQUCUASAgA==")
			oAppearance:Add(2,"gBFLBCJwBAEHhEJAADhABV0GACAADACAxRDAMgBQKAAzQFAYaBsHCGAAGMZRZgmFgAQhFcZQSKUOQTDKMIziaQIRDINQlSTJcQjKKEUQTFiXIyAKQobh2A42SDAcgSFIACxfFoWRrnaA5QoGM4EDTRYADCKsaQ/J0LcI1FLUEyUf6sAArB74XiCIAIQiUBomGahajkMoYZAAaDCCI2a4aDZCIoVHalKgxC5oKSqCJqbptMZ/HrgJQYGRuC4NQ7CcDKDATbr9MZ9ZBCNZoPimEYtS7MMLQXK8QpyAytaBhRaaGwmSr3U7Oc50d69FYQXqvYZoCq1XBOGYMZLcNR3La9YYnBqMbRAeJYNpedy2YbkFC5LStHwbCrBVpxWotDxQjWVgrHYGI9iybhbiGUo+jafA6DKZxjkoVgxHoHR+iqXx2jMA52l8XJ/CMJ5TkaCp7nmOwHk+XovmECR8BWMYyAIHAgEOBgGFaSo4CWeQVgoSA0lOA5fEGEZQBSYRGBi" +;
		"eYFlWMhiBoPZhkabI3geYIzDYIoHA8dxAH2CZYGMLgqHeW4zAYLgWCMB4gGIeoOjcQgJCqWBhgIOhvGKRhAn2D5blcWBaB+JBGi2EhWAgOQlhmEpYgiHB9DwJQCloUgWmUQoOFaEZXlaSB2haZJGF4WwdhsJRslmGJGDmFhYg8ZoHBiZYalCE4tBEQhQBAgI=")
		oTreeCube:SetProperty("Background",70/*exCheckBoxState0*/,0x1000000)
		oTreeCube:SetProperty("Background",71/*exCheckBoxState1*/,0x2000000)
		oFaceTree := oTreeCube:FrontFace():CreateTree()
			oFaceTree:ShowSelection := .F.
			oFaceTree:DrawGridLines := -2/*exRowLines*/
			oFaceTree:ItemPadding := 16
			oColumn := oFaceTree:Columns():Add("<c><b>Check")
				oColumn:Alignment := 0/*LeftAlignment*/
				oColumn:SetProperty("Def",0/*exCellHasCheckBox*/,.T.)
			oFaceTree:Items():ToString := "Check A,Check B,Check C,Check D"
			oFaceTree:ItemByIndex(1):SetProperty("State",0,1)
		oTreeCube:EndUpdate()

	oForm:Show()
	DO WHILE nEvent != xbeP_Quit
		nEvent := AppEvent( @mp1, @mp2, @oXbp )
		oXbp:handleEvent( nEvent, mp1, mp2 )
	ENDDO 
RETURN
72
How can I change the visual appearance for the control's check boxes (5)

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

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

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

	oTreeCube := XbpActiveXControl():new( oForm:drawingArea )
	oTreeCube:CLSID  := "Exontrol.TreeCube.1" /*{13A5B44B-DBB7-42F2-AE2B-943A6CF6C8B9}*/
	oTreeCube:create(,, {10,60},{610,370} )

		oTreeCube:BeginUpdate()
		oTreeCube:TexturePicturePath := ""
		oTreeCube:CheckBoxWidth := 24
		oTreeCube:CheckBoxHeight := 24
		oAppearance := oTreeCube:VisualAppearance()
			oAppearance:Add(1,"gBFLBCJwBAEHhEJAADhABO8GACAADACAxRDAMgBQKAAzQFAYaBsHCGAAGMZRZgmFgAQhFcZQSKUOQTDKMIziaQIRDINQlSTJcQjKKEUQTFiXIyAKQobh2A42SDAcgSFIADRfFoWmxTdAcYSCGSZZrGOiQADIM40R7UAABPBNKR1DZ+KxAB76cheIIgAhCJQGSYZaDqOQyRhkBTqEIITZsRoNUIiRStayuDCLTwoSooXayfjHYAwOBYHgmC4NQ7EMRxLAmOw1ZKPQjgDDvDilM4tS7MMxzLK8cx3FjqaAyWhQTgePZNU7UNLwPRMCb3LqvbBsOxbHqma5tWjVYDwPZ9cz3Pq9biAG57fwnC59YLheK5Li9Q4jLbMdByXLMDxHiuRJpnWOw7k6RxrjuM5pj+PA+C8H4TkuZpznoPQ+H8B4rlubp3nsfYfA+H5Tl2cp6n4Pw+C+P5rnucx/B+aAFmqAAgCgFZlHSVZICYCoCmCSA2A6A5hAgPZTGWIQYFY" +;
		"FoFmCVsjj2YZIHYHoHmICIGCKCJiEiCZBGMTJjiIKoJGKSI2C6CBOjiRYSEITp4lWIgyhiOJmDqDpYHiIYgDqEITi0ERCFAECAg==")
			oAppearance:Add(2,"gBFLBCJwBAEHhEJAADhABA4Cg6AADACAxRDAMgBQKAAzQFAYaBsHCGAAGMZRZgmFgAQhFcZQSKUOQTDKMIziaQIRDINQlSTJcQjKKEUQTFiXIyAKQobh2A42SDAcgSFIADRfFoWmxTdAcYSCGSZZrGOiQADIM40R7UAABPBNKR1DZ+KxAB76cheIIgAhCJQGSYZaDqOQyRhkBTqEIITZsRoNUIiRStayuDCLTwoSooXayfjHYAwOBYHgmC4NQ7EMRxLAmOw1ZKPQjgDDvDilM4tS7MMxzLK8cx3FjqaAyWhQTgePZNU7UNLwPRMCb3LqvbBsOxbHqma5tWjVYDwPZ9cz3Pq9biAG57fq7ZLEYziOR4Hg+JzFbDVKq0aYjA5RlCU5mm8OR6l6Q53pqaAkgQXgBBMeRmGabhtjsTAeGuaZsm+aQMDwfwvAuJYch2dBsj0XJWkqHIZnMCIOEMBICHiXwHFWVx+A+V5pj4eRGGefJvDcC4WjyXArEWF4OAy" +;
		"AgghYCYsDAT5oHYHoHmGU5sncPANGKAA+HiXJyi4IA/g8U4klQfAeDeVIdgqYxIlWaoNGMQ5gnAOIOHMIIQg4IZonSEIBB0OIInCEAjGgaY6GCJIJDYQIRiEOBVmEN5LEGHhOggIx5F4WoKmKWI9lOCgdAkahZhaZhIH4QoRAMCQaE2GJmFmFhQgUJQZgoShwiSSY2HaBxllmFZqFcJ5JnYfofmgCgGgKIJoCeKYWiEKIKCaCogBqd4oneI5pAoRoSiSaRKFaFolmkVwFg0M4OgodoYieagKgaFA6moRhJAkO5qgaCJKGKapKjaLhhmmNoAmoQhOjQRQJEAQCAg==")
		oTreeCube:SetProperty("Background",70/*exCheckBoxState0*/,0x1000000)
		oTreeCube:SetProperty("Background",71/*exCheckBoxState1*/,0x2000000)
		oFaceTree := oTreeCube:FrontFace():CreateTree()
			oFaceTree:ShowSelection := .F.
			oFaceTree:DrawGridLines := -2/*exRowLines*/
			oFaceTree:ItemPadding := 16
			oColumn := oFaceTree:Columns():Add("<c><b>Check")
				oColumn:Alignment := 0/*LeftAlignment*/
				oColumn:SetProperty("Def",0/*exCellHasCheckBox*/,.T.)
			oFaceTree:Items():ToString := "Check A,Check B,Check C,Check D"
			oFaceTree:ItemByIndex(1):SetProperty("State",0,1)
		oTreeCube:EndUpdate()

	oForm:Show()
	DO WHILE nEvent != xbeP_Quit
		nEvent := AppEvent( @mp1, @mp2, @oXbp )
		oXbp:handleEvent( nEvent, mp1, mp2 )
	ENDDO 
RETURN
71
How can I change the visual appearance for the control's check boxes (4)

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

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

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

	oTreeCube := XbpActiveXControl():new( oForm:drawingArea )
	oTreeCube:CLSID  := "Exontrol.TreeCube.1" /*{13A5B44B-DBB7-42F2-AE2B-943A6CF6C8B9}*/
	oTreeCube:create(,, {10,60},{610,370} )

		oTreeCube:BeginUpdate()
		oTreeCube:TexturePicturePath := ""
		oTreeCube:CheckBoxWidth := 32
		oTreeCube:CheckBoxHeight := 32
		oAppearance := oTreeCube:VisualAppearance()
			oAppearance:Add(1,"gBFLBCJwBAEHhEJAADhABfICg6AADACAxRDAMgBQKAAzQFAYaBsHCGAAGMZRZgmFgAQhFcZQSKUOQTDKMIziaQAGgkNQwCSLIwjNIsBxPFKVQChEYxSjKA40SJNUgyj6CCY+QLIE5PfQgAL9I6eJABCCSQKkYx0HScRijDIAbAZAYhCZqaKhWgkKI/WBQIABRDVLx5ESiLRtKy7Mq2bpvXBcNxXHalaztO68LxvKyqHb5fJ/PpgL4YHgmC4NQ7EMRwF6rfbyfZ7Xg/ORPTijZ4sdzMHTzJyscx3HqfaBoOaZU5eMLceTUMofHIndxCcasPbsOatVqjG5sYjcGC3La9cz3Pq/bpuDCbMxuaK1TrYXr1TTrcofBDldAxXRKDxRDWVhLnYOw9i6XxzjuXprCaOoKB6EwbiCZZCGOdZYlcT4xHmbhMnwNxtn+G5bmqdZ7n4Pw/i+X5zm+dQ9g4CAFjsfAJheOI8HsDoWDWTB/lwSAQkmA5PEgRYoDyDwYFY" +;
		"FoFmGCBmBqBphDgRJ0gOTIYBGRB/lyRh0iSCZbjYWJzgWDwIjYLoLmMCJGDKDJjBgWgqG6YhyhGHRzA2aJ1mCABOAiOJvhCZBJBYRoRmSCQmEqEQimkAZgg8TZnDCV4UkmCUmBKZYJGYWoWCUUhiFMNZckNUh2GENoaGaGZmgmJhqhqZpGGIEx2GYIxSGGGJdggWJth2Z4JmYeoemeSZ2H6H4hGmQhihyTRHGYLg7CiCgmgqIpokoNoOiOaJ4jqAochqaZGgaCxpAoZoaiaaJqEmWIcGgShcnCJwqEqFoR3YOoFlgchflqNouiuawHmWSYqGkWZQhcatzmaOoumuSp2j6L5bBaKo0GQKRnGGCxqiyCwmkqMpsksNpOGUGI7A0ew1G0Rxlg0PptgsZuDG2Sx2l6N5tnYNZZjUDRXDCVo5l2FoymqOpukuNpujubwLjmWY5k0ZwxkaFxYlWdp6j6b5Lnafo/nABQdg2FxcUsY5BkmXAkmeQpckwNRrkKTh" +;
		"8CSHZBk4NwyC4KxxgMDwakOMZDn8GgwnGAo2C4cwthMcwmCcMoHBMHRehwTIghySYNksZwcH4HBMEsHx5hyPItiweYxnwSZEH4Mozn0fR+DMAo7EYJ50gkdZelKdNql2UgJn0GIukwH4HicQRai2GI4mSVpNl0dZGledgNgcYpYDWUx3FsOQi5YV5anaTY3G6W53A2RxylydxFjiaxEFCCgBBAQ==")
			oAppearance:Add(2,"gBFLBCJwBAEHhEJAADhABcoFg6AADACAxRDAMgBQKAAzQFAYaBsHCGAAGMZRZgmFgAQhFcZQSKUOQTDKMIziaQAGgkNQwCSLIwjNIsBxPFKVQChEYxSjKA40SJNUgyj6CCY+QLIE5PfQgAL9I6eJABCCSQKkYx0HScRijDIAbAZAYhCZqaKhWgkKI/WBQIABRDVLx5ESiLRtKy7Mq2bpvXBcNxXHalaztO68LxvKyqHb5fJ/PpgL4YHgmC4NQ7EMRwF6rfbyfZ7Xg/ORPTijZ4sdzMHTzJyscx3HqfaBoOaZU5eMLceTUMofHIndxCcasPbsLpOS5LNKsaxmWLYdhFdTxQi6LpvfA8BwXC6JY7heRYRbFbYxRjGNi1TS7G4nGKd5WGuL4UHwI4VkaYxii8V4pgQMgVBQdQ5iCTYGi8T4vlWbJ3nuPg+l+H5AlSCg6ByPBoE8Ap3jqYxhBido5g0OgOGOGI4CsSpCCAcgcAuEokiEN5NCKfJ9DyTRjnS" +;
		"cg1CEYxOBmBpPCgagdgcIZoHoGIFA4AxQkCAxKAgKBwgGSpIBCZhjF2E5UnQPQMiMCJBCIBwxkSQgsgo+JtDKT4ziiQw+k6EwAnsOgLnkHI+yCQ4iEuE4klkPhShEJBpAoPgymOMoaDgHBjFMBgyD0HYTiCZSZhIIIGC4ChiHSew5kwM5omILZPiOBI0hwZw5kodIdA+M4Uj4PxOmMSJ9DuTQzmyZgviceZagaHVfj4awwmaAh2GUIYmCOEZZDaDRDFGdwcg4EwyHMN4LBOaJbCoaZqgKH8qkMfIyD8DozDyfA7A0Coui0OpMmOZJdCsahKg6NooioChwmEMxLEoXJbDUTRXGSUgykyMgQG0GpPHMdI3D4TRCgSeQ0kmaw+lGNAtCOZJVCiT5DhyRQwAqMg0EoDBBGEGAsASC5yiSCw+k4Mp6lWNQuksTpRjMTxDGzJwGmGMpDDKXYTECSAxl6Q5olkK4PgMMIVkASRMBMBgzEkaZEjsNALhIZA6AeQB" +;
		"gk0ZJEgAAJ0CIAgODMNIsD6DRih9uYwFyAwfCUb5ijmbI+gwdxkk8MZMGeMpPCkDxzBiC5MHMPJLDSSROFMLIoBEQogEMFJPnENYQGgE4DCOaJfC7tYkhGTQ0kyWwykuXpMiyRpKjKR4wngM4JmOWJACCdYtHMWw+Eych4nINYLAEYA8AgdAEEsQZajaQoog4GxPiMVIolcdxNG8XZVkmNoRwWRVBlFeFEeAZQJgnFiHgHwcAhjhHgGMSI5xki2CyA4EQsA3i0HkBsLwKRFgAHcPkHopBJBcBeDUYI7xyDOHqKkWo2hLCsDIBIY4qQ5A8DoMMYwOAqCSBGKgU4yB2iDBwIgB4hxQgAAWNgBoAgsBdEcBUQ4sQ9A/HqD0JI8RpBzH2OYVgahLBHFiJQJweQiDhDUE4SAARQAzFsG0EQwA6AOWSBkFgVAIBCHeGERQFQiCQHeFkC4vkiB8DyB4F4QxVDvGMNEOQexMjlBeOAKQiQLgfDA7QEAaRiBdEkH8" +;
		"TI7AZiFBAGYBIABWjYBiGACioQ4C1A+AMMgWhfgxHgPsT4URIB0COKgPgjRwiAB8AYUArxBgCF6J4GY5hrAOCAPAAoGRRCsCIMEXATXfgAF8BMJwURuEQDgD4Q4OBoAeHGFgLIwQrC2D0JoSQ+QvhrHoHERggR4A2GKMQH4FwBD0CgAgAAkAFhAEwEYAoYAiBeEUBEAYEBRI8EUCIcAVAEDQG0PcZYIBVgSHEAEGojB4j1AeFkHQ+wsBDBQGQTwyBdDREMAwNAjQhh+BoMYZA1wNhjEIG8QwwROAmEGCgBQCBgBQHKBoUYDQqiNEGNgGgowQjZA0MMHAZwWBgGsD4I4QBqAfDGJAMgrhAiRBGKQQgPRJAyB8EkJIWQUglGOBgZYFgGBYAIDsACmRgjgH0B4EYnQljIBiJwOwRh8DZA2CIGAOwDhRGEDQQwLAulGACJwZYOQ2gtDKMQWglwpDeC6AoUIJgPBiGAAACgggoBDAUPEHgJwShIGwDsEYtBnA" +;
		"JHiBoEQxRgCqAoCkeAbBUAhE2C8EwxBcibBkO0TgjxQjIBkIMIATwDCuGAB0QQEAJAtEKDgUQHgBi0DsJ0SI9AygkAwM0KQ4wIBcAUOEfQPRDgSB8BoZIrg1jNFSP0G4KACCzA4GMHgWqnjwHYAMDATgDhDHYMATokhpA9AaEAYoFwhDkHmAcHIogUBHAANsDIpR+B0EoEEbIRxUgAH+KMegihIDSB0E2X44BNgRFmAEZINhYhYBQIQYoDgUCFHsIgG1hQZhmDgIwCIoRwA7CQGMdYTxniVCAD4OQGhOiHDAJ4BowQSAFAIIAGAcxHBBGGEwRYVB3gfBmDAOoURIi0BsAYQA0KlA0DMA0IImQrhqH6F4VgFRHCxCtLYKwxgyhYYGFgNYjQQidCCICllpJUjVAUOwLwxQ2gwEwDUcwmBrh6H4F4BY6A02kAaNjMYYADBrH6IkF4FVPiDGgEgAYWwkUIGAGIYoWQpDuDkMUVARwCjgDMMMAIoRBAuAKIkN" +;
		"gHQyBEEIJACBAQA==")
			oAppearance:Add(3,"gBFLBCJwBAEHhEJAADhABQ4Fg6AADACAxRDAMgBQKAAzQFAYaBsHCGAAGMZRZgmFgAQhFcZQSKUOQTDKMIziaQAGgkNQwCSLIwjNIsBxPFKVQChEYxSjKA40SJNUgyj6CCY+QLIE5PfQgAL9I6eJABCCSQKkYx0HScRijDIAbAZAYhCZqaKhWgkKI/WBQIABRDVLx5ESiLRtKy7Mq2bpvXBcNxXHalaztO68LxvKyqHb5fJ/PpgL4YHgmC4NQ7EMRwF6rfbyfZ7Xg/ORPTijZ4sdzMHTzJyscx3HqfaBoOaZU5eMLceTUMofHIndxCcasPbsLpOS5LNKsaxmWLYdhFdTxQi6LpvfA8BwXC6JY7heRYRbFbYxRjGNi1TS7G4nGKd5WGuL4UHwI4VkaYxii8V4pgQMgVBQdQ5iCTYGi8T4vlWbJ3nuPg+l+H5AlSCg6ByPBoE8Ap3jqYxhBido5g0OgOGOGI4CsSpCCAcgcAuEosiYN5NHMOJ+D4TpTnS" +;
		"eQ7CEY4uBmBpPhgagdgcIZoHibIEyUBJZDQIJShoCgcCAcoyAQOYYlcZJ1D0DxDCiQgwEiAZMHEMJLFKPJ9D2DoDnidQ4k+Y5QmKEROBkIhKD0JIZDIS4TGUCQuEeEJjnOIg8CuY4RkYNgwGMM5RllGpThDRYIGKZIpCkJFUH0PINyWcQ3CaaZCG+HBnEOTJhD8Tx4GoeQ/GcaZSHOH5nCmQhshoZhihYYwhiYA4RlkNoNEMUZ3ByDjwEsPxOnMaJ9DuDR6F6GYmCmKh0nANtMioP4Gg8aoSiIO5NhodociqaY6GaFYkEyOg8lsNRNTaUgykyMgQG0GpPiONJbD8DpDEyfA6k0KwOkWMQsGsAJU0SagwkoJQJDIPISCQCJTGSUwyGaM4KkmMgtksHpFjAZ4TGCBAbgaSpcksdhNAMIJHHsD5TjSWWMAMOpwjyLwbk6cAz0KRJiDkDYzESCwiggcgcgYIQwCIEINCMCITj6TVxkMXp2j0cQLlCTo7E2F4" +;
		"ymkMZdhMPJHDGHpLAyVg+k4UwrCCSIyByDJ8DuDY8CiWY0kiXAXC6QJwFKGIjCeJpjgyezjlyDw6klHx5myRoMGwZwbkcToTEiew4kwbQfEmUgPkOKJUD4DpTHSHQmgkXI/ASTA1g0XIEDMTBimyfI7jSLYHEiUoPk0Fw/kadAsHGao8A0A5smEMJ2mNyg5gzJZwDgCpChyIZVyIZwFCMJEPASRkBqE+IcHInRcDxA2H4bIsx0AtDsIBpwZwYicD6BscwDwUBgHCIYaIfgtiVH2O4WgUwJjEFeAEQA7y4hMCiBMS4aRdB9A4CYE4LxljyBMHcDItBxinDCLcTYmgejBFQ9UTg9gFBOEmAQTI7A4iZGMGkQAWQ7jYA2HIL8BRAjDG4HcCwARbjZHiNoDw1nLDnGyNINQ+wjCpBMEgcovQUgICQJEcgWRuBvAyJ4d4ugpCUAINcHogxIgnDiM4N4axzD3F2JMTY/hRqYF6FsWIxhYAGGoAALQYgYirBwBE" +;
		"BwpAjBEAAIEIYsA2gOHCMAGgXAACIDmMITAUgFABH0D0I4WwvhNFGMAOIvxRD2GKNcMA8gjAPDCPwBogRPAxA8PgRwZRICYDED8RAXQEghEAN8DIgwIBdB4JYWwMgtiQHoFQKAiRFguFKGwGQhglDsEOVwEQQRkCKBwOIHgSREDRBYHEXQcQdD7GIGARQHRxipBrMobgewDCUCADsEYWAzgMHKHQDQxxsDzA6EMfAeQHB4GQDkUYPA0iECiKoGgRhcDdA2GMQA8AOCjDSPgHI4QnApAKBICwHg1A+BcAwcYsgbjGGQNkCIgRsA6EcBEWANADjsB0B8YYzQQDIGSBcEYZBCCPEkFIHQSgkgZAwG4IwBAbAYGGAgL4Ch4g8BOCQuFFBaDOASPcAALgChUDyB4cYtgiiOEyCcEopRCCvEsFIKomQEjnB4L8YgQBfgWEEMgPADhojaDsEcaIlBFiDBqEcRgQQ4ArEOPAfYQhUjmCsMsHIYwShmDmAoDYsRqj" +;
		"xAUAkHwPwDjYH2DsEopA9AaECIoFwhRkjmAcHIUAUBHABFsDMJY+B0goEGLIOozhoj/B2CcPg7hPATGdduAALgiiEBsBkd4Fg2iUCEPsG4RxKDDEoMIGARhDiAHaBcZ4rbeBUBQPkYo+gFAdE+AwKAEQhjGEUE8aQ1QYBQFCJwTgww1BDEaAEVQMwjBgGoBkSghhIjSBUEkJI6QagpFIHQPgZgojaBsDgIw8BvBgHYAG3QeAUhFFSMQfonwxg2D6E8ZQcwnjLG6DYCgjoAitB0IEKIyxigUA8DQZoq5tgiBICoIoUQXDjDgG4BouhFZdBQJEDYQw0BsEsMEawRAkBJACQEA==")
		oTreeCube:SetProperty("Background",70/*exCheckBoxState0*/,0x1000000)
		oTreeCube:SetProperty("Background",71/*exCheckBoxState1*/,0x2000000)
		oTreeCube:SetProperty("Background",72/*exCheckBoxState2*/,0x3000000)
		oFaceTree := oTreeCube:FrontFace():CreateTree()
			oFaceTree:ShowSelection := .F.
			oFaceTree:DrawGridLines := -2/*exRowLines*/
			oFaceTree:ItemPadding := 16
			oColumn := oFaceTree:Columns():Add("<c><b>Check")
				oColumn:Alignment := 0/*LeftAlignment*/
				oColumn:SetProperty("Def",0/*exCellHasCheckBox*/,.T.)
			oFaceTree:Items():ToString := "Check A,Check B,Check C,Check D"
			oFaceTree:ItemByIndex(1):SetProperty("State",0,1)
		oTreeCube:EndUpdate()

	oForm:Show()
	DO WHILE nEvent != xbeP_Quit
		nEvent := AppEvent( @mp1, @mp2, @oXbp )
		oXbp:handleEvent( nEvent, mp1, mp2 )
	ENDDO 
RETURN
70
How can I change the visual appearance for the control's check boxes (3)

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

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

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

	oTreeCube := XbpActiveXControl():new( oForm:drawingArea )
	oTreeCube:CLSID  := "Exontrol.TreeCube.1" /*{13A5B44B-DBB7-42F2-AE2B-943A6CF6C8B9}*/
	oTreeCube:create(,, {10,60},{610,370} )

		oTreeCube:BeginUpdate()
		oTreeCube:TexturePicturePath := ""
		oTreeCube:CheckBoxWidth := 32
		oTreeCube:CheckBoxHeight := 29
		oAppearance := oTreeCube:VisualAppearance()
			oAppearance:Add(1,"gBFLBCJwBAEHhEJAADhABQACg6AADACAxRDAMgBQKAAzQFAYaBsHCGAAGMZRZgmFgAQhFcZQSKUOQTDKMIziaQAGgkNQwCSLIwjNIsBxPFIYRoAmCYZRnAYZIpjOZ5BiKAwgQiHMbwTLjfyMACjH7nnJEEigNIxToOU4jFDGIAWArAZBEbTENBtBIUIRoCA6CgOCAYRa4AJTdL1Er2ex2G7WMpWURkHTUJgGN4BVbdeoxPi/b6wDA8CwXAaHXpfbaKYQ7brYaikchyLI8Tq9bDNIgADLoYADJIoCRqEyudKQcrXJakaZqOoaXo+W5VVzWLpDVo0XBdTiLAAzKDgA6bRqBSjgMjuIpcbABazPJTwPJcXxnGyMehyWJ47KoKZOkoNRTiIRoCDgCZXm+eA6m0dQQj8MRInCUY7CIVoCEAFZonefApC2BQglWHIKAAPx/D4FoyHgTZsAIXwYAWYR8kMR5YAAP4PmOdZ7H8X54AoDhziASAaAiAoeAecZ+CQ" +;
		"IAID4GhwGEF5eBOAphHgZgbgiWQYHYB4CGICA2CSCpPnMYIjgEYZoiIFYDCGCIyCsNgKCCRgSgyHZ4FoKoNiGOJgDKDphEidg0giJEnDiDojBkFZXg+IxZCYGoLgMOQSCmFBlCgOJZCmA4jDiCYJmSZw6FCEglheRhbA4ZZpgIV4ZCYV4+GeGhhniTghhsYAps+HBkGmTh0hmChpiId4PCSeQeHuHwnmmKhyg+aA3gYdohh2cxUhwCJNBIRZuiIXoDGiJwOkyWR9nkPwoiKFA2G2YBznaHIlB0cxGBiAYfAONJUCgIBmlAFg6k0AhaioJ5OkMTIdi0axzEyHmEBIYJpDMCJanyDowiwQwyq0LBbB6Sowg6KwYmoMxI26GwIBwU4Mj0GpgCOCI6BmG4mmYX4mG2a4GmCOAmhuFhfjmAALiKao5m6S4ml8bpNmKQBQgkFpzjSbg1koc44lYKQviKFp9j+TRrnsAZADALAXASQZwDwJp8xQc4uiSQ5xAwRw" +;
		"SkSYhDi0ERCFAECAg")
			oAppearance:Add(2,"gBFLBCJwBAEHhEJAADhABZ8MACAADACAxRDAMgBQKAAzQFAYaBsHCGAAGMZRZgmFgAQhFcZQSKUOQTDKMIziaQAGgkNQwCSLIwjNIsBxPFIYRoAmCYZRnAYZIpjOZ5BiKAwgQiHMbwTLjfyMACjH7nnJEEigNIxToOU4jFDGIAWArAZBEbTENBtBIUIRoCA6CgOCAYRa4AJTdL1Er2ex2G7WMpWURkHTUJgGN4BVbdeoxPi/b6wDA8CwXAaHXpfbaKYQ7brYaikchyLI8Tq9bDNIgADLoYADJIoCRqEyudKQcrXJakaZqOoaXo+W5VVzWLpDVo0XBdTiLAAzKDgA6bRqBSjgMjuIpcbABazPJTwPJcXxnGyMehyWJ47KoKZOkoNRTiIRoCDgCZXm+eA6m0dQQj8MRInCUY7CIVoCEAFZonePwfA6fx7n2MIkBqM4REAB5vnOQpWCeAhnjACR9B4IoEC0OQMAGSZ0H2AxHmQAA/g+Y51n6AAgCgEZLDa" +;
		"ChgmCUQkACAw8g4AJgjKEgNH6IQIEmYB/mAEhCAOBYZDMZIlA2TQSEQCheAGiwKDmTBiAWYYDCCaIWBOChijiMJ/DYXx4loNINBsQBdkWDpiCidgRg+YRYFoRANCMEAuEcXhlHiVISAMTgSlwXh1mOSISE+CZhEiKgLCiQw5FYWYaleFpQBiA4PhOSJhHMJgYD4Yx3mKn5fDYCgwkiUQkiUaRigIYhoEkZZUASTRiHAIodCSWYKCaHgmFkBh0CiAwZn6AYhGaUhcBiEhmkoEJQCOQBTiiTQjlwGZwDOE4oncXh5hmHIzGCIgMCkah0lMJYBFeMAHiyQRqmKMomiCY5wnoPUzFyuIMmIJh2ioXJqi6Ehkg0coEC6H7zHSUgkkCaxA42ToDmydw7GCahygODQNCIVASgoGQ7GyWAyEeaA9n2GQkAsBgGjQKBqGmwxNiKHA7HATxjiSTgzGwaY6h2J5AGOiwfFkM4UkEHQPiWQhQisD5zFyHwKimcAWgZhp" +;
		"rBQAA6AyAgVleHILlucAAj+KA5joDhjg0VhOBEPpwjkBgQD+H5wh2bACBmYBBlwAQPGOKJRH0DwTHiNpHjICgSjiLYkCUGrzk4ApUFoNRJjCBxBGQTwjgCOpPBsWRnDGK4DAiMxDlKXp3ECRpFiuKgOh8AZODKcBqH0NR9GGdA+A6YxplMdRlHmPY4DsTRig2YXfECDg2lmJAjnCeQ8meOANwYwSBXEsDUeQZxdDxDgGwbY3QjjmHiKUcIwQnBfGADYZowR7B6E6E4MI2g1AUAsOkFwCwOhmECC0ZYkxzhhFME4egXQThHGkPUDoPwqtkE6E8LQaQJiHDiK4KYaBCiwFwOkaYVROhqXoIcdw9BzAcCKNAZg3Qbg2BsD0cY+BvBPEWOUfIHgziVHMOMYwWQEAACGAEZYgg7gaGKCUXQ6hoD7F2JwW5txIhPHYBQTwwQljzD6AYW4zx6h9B+F8bo9h/AfDONUZwkhziJF8FwHALBaCTAwIEG4CASDfC4Fw" +;
		"AIRRHuhBAOUUwAxoAQH6C0eACgDAeAMGoGgGREDPAiKAAIVwBgYA2AUZ4QgEAOEGMANwCwIjWCIEgJIASAg==")
			oAppearance:Add(3,"gBFLBCJwBAEHhEJAADhABT0MACAADACAxRDAMgBQKAAzQFAYaBsHCGAAGMZRZgmFgAQhFcZQSKUOQTDKMIziaQAGgkNQwCSLIwjNIsBxPFIYRoAmCYZRnAYZIpjOZ5BiKAwgQiHMbwTLjfyMACjH7nnJEEigNIxToOU4jFDGIAWArAZBEbTENBtBIUIRoCA6CgOCAYRa4AJTdL1Er2ex2G7WMpWURkHTUJgGN4BVbdeoxPi/b6wDA8CwXAaHXpfbaKYQ7brYaikchyLI8Tq9bDNIgADLoYADJIoCRqEyudKQcrXJakaZqOoaXo+W5VVzWLpDVo0XBdTiLAAzKDgA6bRqBSjgMjuIpcbABazPJTwPJcXxnGyMehyWJ47KoKZOkoNRTiIRoCDgCZXm+eA6m0dQQj8MRInCUY7CIVoCEAFZonePR+D6d57GESA1GcIoAA+X5fgW2oJh6QAlnMdZHlgFIogGXw3lQNB+AAA54n4PxflefgBgCXIyBIFgZmG" +;
		"AYOBqAhKEgLZ5gOIQHgGfoAAkCAKBQZJIDiJBogqRwYjYGAZksGJFmGAogkiAgRgkIhohyfwgiOSIsGiCxkAGRBwhCRgZBYM4HGMWA+DeBJhEIBhOg+JAZEYQAaGUQhyFYdZjEgfhKgiIQohWc4TggGRCFKGJkCkDBehmTpJiWTIWGCWRtl+CJkkcfIAhyZgphIdoLEaWZkHeHpmjkIhaggZp5HYORzCcMgCHWFIkDGQBviKZx4jQZIjkuKhFkENgKDCThJiAHR5kIXhykeeh2geFBGmqBBmiiaI6hQb4diiGYcF4PgqkYTJXCgApDDiCYbGmBw6hqIJZCGeo6hUBoZlgaovmOY5CkIPQsEqKoJh2J4RjQeYylkM5cm0NgMhGegNH8JZImGE4BEeWpygiEJhiGDIGjeXATgaYgXG4SweGQGRugKOpqGSThTAQdA+hcCQuhsP5HjuVoPBkJQqhaZAXEsO52hkNYNGEcwCjmJAaCaew5HCBhOA8PpvJQDg" +;
		"/iyMZmiMGYGv4dw4jGB5MlKRpwCEcwEhAKhcE4OhRisdwEhmSZHGyJwjGQTRMjcHZHmKXBUGuJxHniHwlkqXpzG8Oo+moWRKmgGRKC0BZzk2c/FmiUZkFGBohBuJQhH8TgxjUB4ElUJwCDMRIRHuNBYhyd5WmuTJKECQYuEuCJhHWTYShQNhtm0M5zFmSpvFGbgvkgKI9DgXw8jcRwwm0GoCgEAxhoAWB0MwgQWi7EmOcMIpgnDwC4CcA4wh4gcB+BUYYcROBPA0GkCYhw4iuCmDgEg1wWAwDmBQJwlw9ifD4OsTAcQLhDBmHQbg1gzBvCWNMegnQnhNGqHUDoXwujWHqAYLICAAAbCKDAOQ4BMD9GaFUUo2QYjzFcLcTovBIhODuBoYoJxEBSHwP4JIrRyB5D8FcTI5x8jeEeJsco7xSC5HEG8S4DgEjnHaNQWIfRJheDaH8BgTgoB8EqFYMoFxPg/CeMUeovAMDBGKJkBgXxGgLHsH4R4QQpj7EyP8" +;
		"ZI1hEChBQAggI")
		oTreeCube:SetProperty("Background",70/*exCheckBoxState0*/,0x1000000)
		oTreeCube:SetProperty("Background",71/*exCheckBoxState1*/,0x2000000)
		oTreeCube:SetProperty("Background",72/*exCheckBoxState2*/,0x3000000)
		oFaceTree := oTreeCube:FrontFace():CreateTree()
			oFaceTree:ShowSelection := .F.
			oFaceTree:DrawGridLines := -2/*exRowLines*/
			oFaceTree:ItemPadding := 16
			oColumn := oFaceTree:Columns():Add("<c><b>Check")
				oColumn:Alignment := 0/*LeftAlignment*/
				oColumn:SetProperty("Def",0/*exCellHasCheckBox*/,.T.)
			oFaceTree:Items():ToString := "Check A,Check B,Check C,Check D"
			oFaceTree:ItemByIndex(1):SetProperty("State",0,1)
		oTreeCube:EndUpdate()

	oForm:Show()
	DO WHILE nEvent != xbeP_Quit
		nEvent := AppEvent( @mp1, @mp2, @oXbp )
		oXbp:handleEvent( nEvent, mp1, mp2 )
	ENDDO 
RETURN
69
How can I change the visual appearance for the control's check boxes (2)

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

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

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

	oTreeCube := XbpActiveXControl():new( oForm:drawingArea )
	oTreeCube:CLSID  := "Exontrol.TreeCube.1" /*{13A5B44B-DBB7-42F2-AE2B-943A6CF6C8B9}*/
	oTreeCube:create(,, {10,60},{610,370} )

		oTreeCube:BeginUpdate()
		oTreeCube:TexturePicturePath := ""
		oTreeCube:CheckBoxWidth := 44
		oTreeCube:CheckBoxHeight := 20
		oAppearance := oTreeCube:VisualAppearance()
			oAppearance:Add(1,"gBFLBCJwBAEHhEJAADhABJACg6AADACAxRDAMgBQKAAzQFAYaBsHCGAAGMZRZgmFgAQhFcZQSKUOQTDKMIziaQAGgkNQwCSLIxDFIsBxPFKCQChEZBUjKAwyDBIUzSDIUBhZBIKI7hGa3NBwJAAUTRch0j4iCRQGiYZyHKcxMYgIYCUBkERtMw0GyERQhGb4DoGA4IBhFZQVVLsRBIDh2bbuG4LSrWdJ3OyaN5EbbgZz9P7AMBwLA8EwXBqHYIUGJGbhlbTnR7HMhvDIsPDnFqIZhmOZZXjlfh7T7KNByO6LcI3AiDagtWpNTpjf5dV7YNh2LY9UzXNq3bI1W5aUqyAZ9QQpeB0LILYDbRp/FzyO5NNrHG6dZ7oOh1doOUItlaP5lgcPA7hEJ47H8SD0l4LwfhOSJ9nOIh9DefBREMKYMDaX59nsVhvlKdBpCGfgIl+L43lGG5lH+YAGlWZw/EYOAVH8ZQXncdBJDwIJGkiGYDlmUh2BKABhEgVJpgW" +;
		"X4BA4BxcAeWB1H8KJiAaSJJgiWZWAmVA0CEWIln8JYikWfZpCIXARE0fw3GMRpJnaCRYBGWg6gqI5HgoJxfkYCQFlkX5PhkFYyBAJIImGABpGOWQ1k8OxlAWfZ6BGJA1noRQ+GQeQmEoX4kkkOheG2JQDjYUh+iMGJODUbBjHkbAzg6BxpH4bhsmOdZ6EEGAbmIAR/gSCZWkmfYShwYJYlOH5mnoBYvCSaBFnyDYhlcKAll2AwPAaSggCiWZaD6AogiEc4mBmBpYnePZxGMHw3lUeoGGUN5aH8NJpDoBgDgERg6GGFICh2d4GiWK5cngDgvHqWInG0cIfFyBwpjqLArkcTZVHWV5nGaNhxA6VoVicahajaNo9gUHI2nIdRwBwJoOkSMJlFmKpWjWWY2HwPYwm2SxJHIe5sGsYpiGcXpHj6XYxA6NBFAkQBAIC")
			oAppearance:Add(2,"gBFLBCJwBAEHhEJAADhABB4Cg6AADACAxRDAMgBQKAAzQFAYaBsHCGAAGMZRZgmFgAQhFcZQSKUOQTDKMIziaQAGgkNQwCSLIxDFIsBxPFKCQChEZBUjKAwyDBIUzSDIUBhZBIKI7hGa3NBwJAAUTRch0j4iCRQGiYZyHKcxMYgIYCUBkERtMw0GyERQhGb4DoGA4IBhFZQVVLsRBIDh2bbuG4LSrWdJ3Oy3KKiQy5cABPq/b6wDA8CwXAaHYRiGDYThmF4dRQAG6RcTLWrPFqVZheGYua4CLBxRrINA0LD9DyHJKnaZkDgpUQGN5dTS4GwPQCN3xRWzUyBaQzJfAZV7Lbw3PadX4XRLHcLwfAXFqWaaNZLneh5DouDz3P5YMuaRBicQ4nl6bpuBwKYRnuUY2jsfg9B0b43hOH5KjucQPnwOpMi+A4pnab5qB0a4znuf57n4f5gAeeJqC4R42mEcg5AoIRBnUfggkgLJiCaRA4AYEoEl+Y4AhcDpaFO" +;
		"GIrBgDYyBwHICmIB5djge4hEilY8g0MotiUZICkMYB6AEIgYDYIh0g+Q5cm+CYjgOfJ6DuDZ2hSWggkESI6DCDJjCkFZDg0Yx4mYJYOmOVoiD8BQhlgfhEgwZRGBoJISy0IgqGoIpDhCJAVCUWQaFMY5fAkYgBD+D5TmyYAlENPBnCsRhFkoYYcmYMAAmkLRHDmGZ9h2Rw4BkeBnFmeZWHSGIYHeQZuHoHonjGboamaVwYmIJwEEYbZNiCaRKAmdx1hyNZChWIQpjcKZYHAKQ6FqHIoh0Vp6hkcBqgoAodikKgmi2LYnmsCohkAXoXkqMojgMIpKh2Gw6lEFAlAEgIA==")
		oTreeCube:SetProperty("Background",70/*exCheckBoxState0*/,0x1000000)
		oTreeCube:SetProperty("Background",71/*exCheckBoxState1*/,0x2000000)
		oFaceTree := oTreeCube:FrontFace():CreateTree()
			oFaceTree:ShowSelection := .F.
			oFaceTree:DrawGridLines := -2/*exRowLines*/
			oFaceTree:ItemPadding := 16
			oColumn := oFaceTree:Columns():Add("<c><b>Check")
				oColumn:Alignment := 0/*LeftAlignment*/
				oColumn:SetProperty("Def",0/*exCellHasCheckBox*/,.T.)
			oFaceTree:Items():ToString := "Check A,Check B,Check C,Check D"
			oFaceTree:ItemByIndex(1):SetProperty("State",0,1)
		oTreeCube:EndUpdate()

	oForm:Show()
	DO WHILE nEvent != xbeP_Quit
		nEvent := AppEvent( @mp1, @mp2, @oXbp )
		oXbp:handleEvent( nEvent, mp1, mp2 )
	ENDDO 
RETURN
68
How can I change the visual appearance for the control's check boxes (1)

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

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

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

	oTreeCube := XbpActiveXControl():new( oForm:drawingArea )
	oTreeCube:CLSID  := "Exontrol.TreeCube.1" /*{13A5B44B-DBB7-42F2-AE2B-943A6CF6C8B9}*/
	oTreeCube:create(,, {10,60},{610,370} )

		oTreeCube:BeginUpdate()
		oTreeCube:TexturePicturePath := ""
		oTreeCube:CheckBoxWidth := 37
		oTreeCube:CheckBoxHeight := 15
		oAppearance := oTreeCube:VisualAppearance()
			oAppearance:Add(1,"gBFLBCJwBAEHhEJAADhABOkGACAADACAxRDAMgBQKAAzQFAYaBsHCGAAGMZRZgmFgAQhFcZQSKUOQTDKMIziaQAGgkNQwCSLIwjQAsTRQFocAChEYxXjKBA1SJNUgyj6WCQPR7CM5OaDgSABIijJDoGAwIgkUBpGKdBynEYoYxAYySQAIIjaYhoNoJChCM7QHQEBwQDCLUgrGbIbCQHDtW5cFr3DaLEzsXi8FwvK67cr2fp/YBgOBYHbdcJ5OxkbouPC7Sa0AKKYywGRNFijV4se7MHzzLKHXxZa6UNJhGhaHomCYkYDILhxfDMGx7GqvbBsOxPXj2DZLW7cNIyDS3NyfLqzcBwOZZdrPC6NPzTdSuHQOC43Tqgcb0PDaVghmOVpnHYOAcE6FxzEuCAAGGOw+C2HhzjuZpRGGAAXj8H4zGWZ53mEPAXgyZ43kWZZ4H4L4ehwRp/muTh2l+F5ll8cpZEeeZYHQIEZEoW5MBgNZ9gGGpzioEoCF+GA0kG" +;
		"ApYlYnY6iAaBtjaBQfAabYpgMIJWgIGx9BmNhiBsNBikiAZwgWIg2DoMRkAyKJWB+C4fAYGg1DKIw2DAAA6lEFAlAEgI=")
			oAppearance:Add(2,"gBFLBCJwBAEHhEJAADhABC4Cg6AADACAxRDAMgBQKAAzQFAYaBsHCGAAGMZRZgmFgAQhFcZQSKUOQTDKMIziaQAGgkNQwCSLIwjQAsTRQFocAChEYxXjKBA1SJNUgyj6WCQPR7CM5OaDgSABIijJDoGAwIgkUBpGKdBynEYoYxAYySQAIIjaYhoNoJChCM7QHQEBwQDCLUgrGbIbCQHDtW5cFr3DaLKI0J5kUBENhjaBafJ+XzfeBYDgmAYNQbDcJxDC8KwWeQjXYTdyXHilZLaADJcqZVChSwzCafZ5oOK6Bodfq0VY2HabNgnYbNbT7bBrLq6UwWTjZTYZMxuHKMVyLJK/b5wOi3axKBBJWjYOR5Li+MbvNLFCRmO6ObpjgWHxsCiS5vleW5dkCOBBHWPA4F4Rw3kuZpYG0NwbjuD4LAyWhUho9BnmueZ4nof5+BwS40E+Nx9jYeaKAWNhulkF41m8fBfDOVJoDWDJCCALw7g0cphngP5OEMBISH8" +;
		"Wg3hI05ckaUYRAAGL8H4PpPgOVJnDUTIiBAKRfkwcZ0BuBAhCeYgVgWXA3AEfRsiGSJlkobIYnAAgYAWDJyEQPgyAgAIFh6CxBjOMJUCyrQckcJxjniahSHMF54gGRoPl4EZsBgOpNAKMhNDGSZnjYOIUmGRo0mwdAAAgFg1hYGIpGiagzgqE5onMOoelgahkgAIZll2U4bCMaZ2AYagnHgbgDFuXQ2GwM4fCiCYtmMapoBgdJaDAaBni2PYiifSR8HQDpqD6AYmEwFxBlIboWnoGoJiUahGHmNonCYZwmGaJwNiKKBriQWRaEmFooA6UxQhsFAdAqDo6iViJYFCLQdCOLQREIUAQICA=")
		oTreeCube:SetProperty("Background",70/*exCheckBoxState0*/,0x1000000)
		oTreeCube:SetProperty("Background",71/*exCheckBoxState1*/,0x2000000)
		oFaceTree := oTreeCube:FrontFace():CreateTree()
			oFaceTree:ShowSelection := .F.
			oFaceTree:DrawGridLines := -2/*exRowLines*/
			oFaceTree:ItemPadding := 12
			oColumn := oFaceTree:Columns():Add("<c><b>Check")
				oColumn:Alignment := 0/*LeftAlignment*/
				oColumn:SetProperty("Def",0/*exCellHasCheckBox*/,.T.)
			oFaceTree:Items():ToString := "Check A,Check B,Check C,Check D"
			oFaceTree:ItemByIndex(1):SetProperty("State",0,1)
		oTreeCube:EndUpdate()

	oForm:Show()
	DO WHILE nEvent != xbeP_Quit
		nEvent := AppEvent( @mp1, @mp2, @oXbp )
		oXbp:handleEvent( nEvent, mp1, mp2 )
	ENDDO 
RETURN
67
How can I display an item to fit the control's width

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

PROCEDURE Main
 	LOCAL oForm
	LOCAL nEvent := 0, mp1 := NIL, mp2 := NIL, oXbp := NIL
	LOCAL oColumn,oColumn1
	LOCAL oFaceTree
	LOCAL oItem,oItem1
	LOCAL oItems,oItems1,oItems2
	LOCAL oTreeCube

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

	oTreeCube := XbpActiveXControl():new( oForm:drawingArea )
	oTreeCube:CLSID  := "Exontrol.TreeCube.1" /*{13A5B44B-DBB7-42F2-AE2B-943A6CF6C8B9}*/
	oTreeCube:create(,, {10,60},{610,370} )

		oTreeCube:BeginUpdate()
		oTreeCube:TexturePicturePath := ""
		oFaceTree := oTreeCube:FrontFace():CreateTree()
			oFaceTree:HasLines := 2/*exThinLine*/
			oFaceTree:ItemPadding := 10
			oFaceTree:DrawGridLines := -2/*exRowLines*/
			oFaceTree:Columns():Add("<c>Default"):Alignment := 0/*LeftAlignment*/
			oColumn := oFaceTree:Columns():Add("Pos")
				oColumn:Position := 0
				oColumn:Alignment := 0/*LeftAlignment*/
				oColumn:FormatColumn := "1 rpos ``"
				oColumn:Width := 24
			oColumn1 := oFaceTree:Columns():Add("Pos")
				oColumn1:Alignment := 0/*LeftAlignment*/
				oColumn1:FormatColumn := "1 rpos ``"
				oColumn1:Width := 24
			oItems := oFaceTree:Items()
				oItem := oItems:Add("<r>Root 1")
					oItem:Bold := .T.
					oItem:Divider := 0
					oItem:SetProperty("BackColor",AutomationTranslateColor( GraMakeRGBColor  ( { 240,240,240 } )  , .F. ))
					oItem:Selectable := .F.
					oItems1 := oItem:Items()
						oItems1:Add("Child 1")
						oItems1:Add("Child 2")
						oItems1:Add("Child 3")
				oItem1 := oItems:Add("<r>Root 2")
					oItem1:Bold := .T.
					oItem1:Divider := 0
					oItem1:SetProperty("BackColor",AutomationTranslateColor( GraMakeRGBColor  ( { 240,240,240 } )  , .F. ))
					oItem1:Selectable := .F.
					oItems2 := oItem1:Items()
						oItems2:Add("Child 1")
						oItems2:Add("Child 2")
						oItems2:Add("Child 3")
				oItems:ExpandAll()
		oTreeCube:EndUpdate()

	oForm:Show()
	DO WHILE nEvent != xbeP_Quit
		nEvent := AppEvent( @mp1, @mp2, @oXbp )
		oXbp:handleEvent( nEvent, mp1, mp2 )
	ENDDO 
RETURN
66
Is it possible to prevent showing the selecting item ( hide )
#include "AppEvent.ch"
#include "ActiveX.ch"

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

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

	oTreeCube := XbpActiveXControl():new( oForm:drawingArea )
	oTreeCube:CLSID  := "Exontrol.TreeCube.1" /*{13A5B44B-DBB7-42F2-AE2B-943A6CF6C8B9}*/
	oTreeCube:create(,, {10,60},{610,370} )

		oTreeCube:BeginUpdate()
		oTreeCube:CheckBoxWidth := 32
		oTreeCube:TexturePicturePath := ""
		oFaceTree := oTreeCube:FrontFace():CreateTree()
			oFaceTree:ShowSelection := .F.
			oFaceTree:DrawGridLines := -2/*exRowLines*/
			oFaceTree:ItemPadding := 10
			oColumn := oFaceTree:Columns():Add("<c><b>Check")
				oColumn:Alignment := 0/*LeftAlignment*/
				oColumn:SetProperty("Def",0/*exCellHasCheckBox*/,.T.)
			oFaceTree:Items():ToString := "Item A,Item B,Item C,Item D"
			oFaceTree:ItemByIndex(1):SetProperty("State",0,1)
		oTreeCube:EndUpdate()

	oForm:Show()
	DO WHILE nEvent != xbeP_Quit
		nEvent := AppEvent( @mp1, @mp2, @oXbp )
		oXbp:handleEvent( nEvent, mp1, mp2 )
	ENDDO 
RETURN
65
Is it possible to provide a few radio-buttons only, not for entire column

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

PROCEDURE Main
 	LOCAL oForm
	LOCAL nEvent := 0, mp1 := NIL, mp2 := NIL, oXbp := NIL
	LOCAL oColumn
	LOCAL oFaceTree
	LOCAL oItem,oItem1,oItem2
	LOCAL oItems
	LOCAL oTreeCube

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

	oTreeCube := XbpActiveXControl():new( oForm:drawingArea )
	oTreeCube:CLSID  := "Exontrol.TreeCube.1" /*{13A5B44B-DBB7-42F2-AE2B-943A6CF6C8B9}*/
	oTreeCube:create(,, {10,60},{610,370} )

		oTreeCube:BeginUpdate()
		oTreeCube:TexturePicturePath := ""
		oFaceTree := oTreeCube:FrontFace():CreateTree()
			oFaceTree:ShowSelection := .F.
			oFaceTree:DrawGridLines := -2/*exRowLines*/
			oFaceTree:ItemPadding := 10
			oColumn := oFaceTree:Columns():Add("<c><b>Def")
				oColumn:Alignment := 0/*LeftAlignment*/
				oColumn:SetProperty("Def",48/*exCellPaddingLeft*/,4)
			oItems := oFaceTree:Items()
				oItems:Add("Item 1")
				oItem := oItems:Add("Radio 1")
					oItem:SetProperty("HasRadioButton",0,.T.)
					oItem:SetProperty("RadioGroup",0,1234)
				oItem1 := oItems:Add("Radio 2")
					oItem1:SetProperty("HasRadioButton",0,.T.)
					oItem1:SetProperty("RadioGroup",0,1234)
					oItem1:SetProperty("State",0,.T.)
				oItem2 := oItems:Add("Radio 3")
					oItem2:SetProperty("HasRadioButton",0,.T.)
					oItem2:SetProperty("RadioGroup",0,1234)
				oItems:Add("Item 1")
		oTreeCube:EndUpdate()

	oForm:Show()
	DO WHILE nEvent != xbeP_Quit
		nEvent := AppEvent( @mp1, @mp2, @oXbp )
		oXbp:handleEvent( nEvent, mp1, mp2 )
	ENDDO 
RETURN
64
Is it possible to provide a few check box only, not for entire column

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

PROCEDURE Main
 	LOCAL oForm
	LOCAL nEvent := 0, mp1 := NIL, mp2 := NIL, oXbp := NIL
	LOCAL oColumn
	LOCAL oFaceTree
	LOCAL oItem
	LOCAL oItems
	LOCAL oTreeCube

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

	oTreeCube := XbpActiveXControl():new( oForm:drawingArea )
	oTreeCube:CLSID  := "Exontrol.TreeCube.1" /*{13A5B44B-DBB7-42F2-AE2B-943A6CF6C8B9}*/
	oTreeCube:create(,, {10,60},{610,370} )

		oTreeCube:BeginUpdate()
		oTreeCube:TexturePicturePath := ""
		oFaceTree := oTreeCube:FrontFace():CreateTree()
			oFaceTree:ShowSelection := .F.
			oFaceTree:DrawGridLines := -2/*exRowLines*/
			oFaceTree:ItemPadding := 10
			oColumn := oFaceTree:Columns():Add("<c><b>Def")
				oColumn:Alignment := 0/*LeftAlignment*/
				oColumn:SetProperty("Def",48/*exCellPaddingLeft*/,4)
			oItems := oFaceTree:Items()
				oItems:Add("Item 1")
				oItems:Add("Check 1"):SetProperty("HasCheckBox",0,.T.)
				oItem := oItems:Add("Check 2")
					oItem:SetProperty("HasCheckBox",0,.T.)
					oItem:SetProperty("State",0,1)
				oItems:Add("Item 1")
		oTreeCube:EndUpdate()

	oForm:Show()
	DO WHILE nEvent != xbeP_Quit
		nEvent := AppEvent( @mp1, @mp2, @oXbp )
		oXbp:handleEvent( nEvent, mp1, mp2 )
	ENDDO 
RETURN
63
How can I show radio-buttons for the entire column

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

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

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

	oTreeCube := XbpActiveXControl():new( oForm:drawingArea )
	oTreeCube:CLSID  := "Exontrol.TreeCube.1" /*{13A5B44B-DBB7-42F2-AE2B-943A6CF6C8B9}*/
	oTreeCube:create(,, {10,60},{610,370} )

		oTreeCube:BeginUpdate()
		oTreeCube:TexturePicturePath := ""
		oFaceTree := oTreeCube:FrontFace():CreateTree()
			oFaceTree:ShowSelection := .F.
			oFaceTree:DrawGridLines := -2/*exRowLines*/
			oFaceTree:ItemPadding := 10
			oColumn := oFaceTree:Columns():Add("<c><b>Radio")
				oColumn:Alignment := 0/*LeftAlignment*/
				oColumn:SetProperty("Def",1/*exCellHasRadioButton*/,.T.)
			oFaceTree:Items():ToString := "Item A,Item B,Item C,Item D"
			oFaceTree:ItemByIndex(1):SetProperty("State",0,1)
		oTreeCube:EndUpdate()

	oForm:Show()
	DO WHILE nEvent != xbeP_Quit
		nEvent := AppEvent( @mp1, @mp2, @oXbp )
		oXbp:handleEvent( nEvent, mp1, mp2 )
	ENDDO 
RETURN
62
How can I show check-boxes for the entire column

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

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

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

	oTreeCube := XbpActiveXControl():new( oForm:drawingArea )
	oTreeCube:CLSID  := "Exontrol.TreeCube.1" /*{13A5B44B-DBB7-42F2-AE2B-943A6CF6C8B9}*/
	oTreeCube:create(,, {10,60},{610,370} )

		oTreeCube:BeginUpdate()
		oTreeCube:TexturePicturePath := ""
		oFaceTree := oTreeCube:FrontFace():CreateTree()
			oFaceTree:ShowSelection := .F.
			oFaceTree:DrawGridLines := -2/*exRowLines*/
			oFaceTree:ItemPadding := 10
			oColumn := oFaceTree:Columns():Add("<c><b>Check")
				oColumn:Alignment := 0/*LeftAlignment*/
				oColumn:SetProperty("Def",0/*exCellHasCheckBox*/,.T.)
			oFaceTree:Items():ToString := "Item A,Item B,Item C,Item D"
			oFaceTree:ItemByIndex(1):SetProperty("State",0,1)
		oTreeCube:EndUpdate()

	oForm:Show()
	DO WHILE nEvent != xbeP_Quit
		nEvent := AppEvent( @mp1, @mp2, @oXbp )
		oXbp:handleEvent( nEvent, mp1, mp2 )
	ENDDO 
RETURN
61
How do I select programmatically a value in the calendar

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

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

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

	oTreeCube := XbpActiveXControl():new( oForm:drawingArea )
	oTreeCube:CLSID  := "Exontrol.TreeCube.1" /*{13A5B44B-DBB7-42F2-AE2B-943A6CF6C8B9}*/
	oTreeCube:create(,, {10,60},{610,370} )

		oTreeCube:TexturePicturePath := "C:\Program Files\Exontrol\ExTreeCube\Sample\Texture\Chapel"
		oTreeCube:SetProperty("Background",21/*exDateHeaderForeColor*/,AutomationTranslateColor( GraMakeRGBColor  ( { 1,0,0 } )  , .F. ))
		oFaceCalendar := oTreeCube:FrontFace():CreateCalendar()
			oFaceCalendar:SetProperty("ForeColor",AutomationTranslateColor( GraMakeRGBColor  ( { 255,255,255 } )  , .F. ))
			oFaceCalendar:NonworkingDays := 0
			oFaceCalendar:Value := "12/31/2016"

	oForm:Show()
	DO WHILE nEvent != xbeP_Quit
		nEvent := AppEvent( @mp1, @mp2, @oXbp )
		oXbp:handleEvent( nEvent, mp1, mp2 )
	ENDDO 
RETURN
60
How do I select programmatically a caption in the list

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

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

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

	oTreeCube := XbpActiveXControl():new( oForm:drawingArea )
	oTreeCube:CLSID  := "Exontrol.TreeCube.1" /*{13A5B44B-DBB7-42F2-AE2B-943A6CF6C8B9}*/
	oTreeCube:create(,, {10,60},{610,370} )

		oTreeCube:TexturePicturePath := "C:\Program Files\Exontrol\ExTreeCube\Sample\Texture\JapanGarden"
		oFaceTree := oTreeCube:FrontFace():CreateTree()
			oFaceTree:ItemPadding := 40
			oFaceTree:HeaderVisible := .F.
			oFaceTree:SetProperty("ForeColor",AutomationTranslateColor( GraMakeRGBColor  ( { 255,255,255 } )  , .F. ))
			oFaceTree:Items():ToString := ",<sha \;\;0><font \;18>Garden <b>A,<sha \;\;0><font \;18>Garden <b>B,<sha \;\;0><font \;18>Garden <b>C,"
			oFaceTree:Caption := "Garden B"

	oForm:Show()
	DO WHILE nEvent != xbeP_Quit
		nEvent := AppEvent( @mp1, @mp2, @oXbp )
		oXbp:handleEvent( nEvent, mp1, mp2 )
	ENDDO 
RETURN
59
How do I select programmatically a value in the list

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

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

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

	oTreeCube := XbpActiveXControl():new( oForm:drawingArea )
	oTreeCube:CLSID  := "Exontrol.TreeCube.1" /*{13A5B44B-DBB7-42F2-AE2B-943A6CF6C8B9}*/
	oTreeCube:create(,, {10,60},{610,370} )

		oTreeCube:TexturePicturePath := "C:\Program Files\Exontrol\ExTreeCube\Sample\Texture\JapanGarden"
		oFaceTree := oTreeCube:FrontFace():CreateTree()
			oFaceTree:ItemPadding := 40
			oFaceTree:HeaderVisible := .F.
			oFaceTree:SetProperty("ForeColor",AutomationTranslateColor( GraMakeRGBColor  ( { 255,255,255 } )  , .F. ))
			oFaceTree:Items():ToString := ",<sha \;\;0><font \;18>Garden <b>A,<sha \;\;0><font \;18>Garden <b>B,<sha \;\;0><font \;18>Garden <b>C,"
			oFaceTree:Value := "<sha ;;0><font ;18>Garden <b>B"

	oForm:Show()
	DO WHILE nEvent != xbeP_Quit
		nEvent := AppEvent( @mp1, @mp2, @oXbp )
		oXbp:handleEvent( nEvent, mp1, mp2 )
	ENDDO 
RETURN
58
How can I show solid lines instead

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

PROCEDURE Main
 	LOCAL oForm
	LOCAL nEvent := 0, mp1 := NIL, mp2 := NIL, oXbp := NIL
	LOCAL oColumn
	LOCAL oFaceTree
	LOCAL oItem
	LOCAL oItems,oItems1,oItems2
	LOCAL oTreeCube

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

	oTreeCube := XbpActiveXControl():new( oForm:drawingArea )
	oTreeCube:CLSID  := "Exontrol.TreeCube.1" /*{13A5B44B-DBB7-42F2-AE2B-943A6CF6C8B9}*/
	oTreeCube:create(,, {10,60},{610,370} )

		oTreeCube:BeginUpdate()
		oTreeCube:TexturePicturePath := ""
		oTreeCube:HasButtons := 1/*exArrow*/
		oFaceTree := oTreeCube:FrontFace():CreateTree()
			oFaceTree:ItemPadding := 10
			oFaceTree:HeaderVisible := .F.
			oFaceTree:HasLines := 1/*exSolidLine*/
			oFaceTree:LinesAtRoot := 2/*exGroupLines*/
			oFaceTree:GridLineStyle := 48/*exGridLinesSolid*/
			oFaceTree:DrawGridLines := -1/*exAllLines*/
			oFaceTree:Columns():Add(""):Alignment := 0/*LeftAlignment*/
			oColumn := oFaceTree:Columns():Add("")
				oColumn:Alignment := 2/*RightAlignment*/
				oColumn:FormatColumn := "lower(%0) right 1"
			oItems := oFaceTree:Items()
				oItem := oItems:Add("Root <b>1")
					oItems1 := oItem:Items()
						oItems1:Add("Child 1")
						oItems1:Add("Child 2")
						oItems1:Add("Child 3")
					oItem:Expanded := .T.
				oItems2 := oItems:Add("Root <b>2"):Items()
					oItems2:Add("Child 1")
					oItems2:Add("Child 2")
					oItems2:Add("Child 3")
		oTreeCube:EndUpdate()

	oForm:Show()
	DO WHILE nEvent != xbeP_Quit
		nEvent := AppEvent( @mp1, @mp2, @oXbp )
		oXbp:handleEvent( nEvent, mp1, mp2 )
	ENDDO 
RETURN
57
How can I select the entire item rather than the column only

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

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

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

	oTreeCube := XbpActiveXControl():new( oForm:drawingArea )
	oTreeCube:CLSID  := "Exontrol.TreeCube.1" /*{13A5B44B-DBB7-42F2-AE2B-943A6CF6C8B9}*/
	oTreeCube:create(,, {10,60},{610,370} )

		oTreeCube:BeginUpdate()
		oFaceTree := oTreeCube:FrontFace():CreateTree()
			oFaceTree:FullRowSelect := .T.
			oFaceTree:Columns():Count := 3
			oColumn := oFaceTree:Columns:Item(0)
				oColumn:Caption := "<b><c>Pos"
				oColumn:Alignment := 0/*LeftAlignment*/
				oColumn:FormatColumn := "0 pos ``"
				oColumn:Width := 64
			oFaceTree:Items():Count := oTreeCube:FrontFace():FaceTree():VisibleItemsCount()
			oFaceTree:SelectItem := 1
		oTreeCube:EnsureVisibleFace(0/*exFrontFace*/)
		oTreeCube:EndUpdate()

	oForm:Show()
	DO WHILE nEvent != xbeP_Quit
		nEvent := AppEvent( @mp1, @mp2, @oXbp )
		oXbp:handleEvent( nEvent, mp1, mp2 )
	ENDDO 
RETURN
56
How can I change the visual appearance of the control's header bar

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

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

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

	oTreeCube := XbpActiveXControl():new( oForm:drawingArea )
	oTreeCube:CLSID  := "Exontrol.TreeCube.1" /*{13A5B44B-DBB7-42F2-AE2B-943A6CF6C8B9}*/
	oTreeCube:create(,, {10,60},{610,370} )

		oTreeCube:BeginUpdate()
		oTreeCube:VisualAppearance():Add(1,"c:\exontrol\images\normal.ebn")
		oFaceTree := oTreeCube:FrontFace():CreateTree()
			oFaceTree:SetProperty("BackColorHeader",0x1000000)
			oFaceTree:Columns():Count := 5
		oTreeCube:EnsureVisibleFace(0/*exFrontFace*/)
		oTreeCube:EndUpdate()

	oForm:Show()
	DO WHILE nEvent != xbeP_Quit
		nEvent := AppEvent( @mp1, @mp2, @oXbp )
		oXbp:handleEvent( nEvent, mp1, mp2 )
	ENDDO 
RETURN
55
How can I add multiple-columns, so the horizontal scroll bar is displayed

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

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

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

	oTreeCube := XbpActiveXControl():new( oForm:drawingArea )
	oTreeCube:CLSID  := "Exontrol.TreeCube.1" /*{13A5B44B-DBB7-42F2-AE2B-943A6CF6C8B9}*/
	oTreeCube:create(,, {10,60},{610,370} )

		oTreeCube:BeginUpdate()
		oFaceTree := oTreeCube:FrontFace():CreateTree()
			oFaceTree:ColumnAutoResize := .F.
			oFaceTree:Columns():Count := 20
		oTreeCube:EnsureVisibleFace(0/*exFrontFace*/)
		oTreeCube:EndUpdate()

	oForm:Show()
	DO WHILE nEvent != xbeP_Quit
		nEvent := AppEvent( @mp1, @mp2, @oXbp )
		oXbp:handleEvent( nEvent, mp1, mp2 )
	ENDDO 
RETURN
54
How can I add multiple-columns

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

PROCEDURE Main
 	LOCAL oForm
	LOCAL nEvent := 0, mp1 := NIL, mp2 := NIL, oXbp := NIL
	LOCAL oColumn
	LOCAL oFaceTree
	LOCAL oItems,oItems1,oItems2
	LOCAL oTreeCube

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

	oTreeCube := XbpActiveXControl():new( oForm:drawingArea )
	oTreeCube:CLSID  := "Exontrol.TreeCube.1" /*{13A5B44B-DBB7-42F2-AE2B-943A6CF6C8B9}*/
	oTreeCube:create(,, {10,60},{610,370} )

		oTreeCube:BeginUpdate()
		oFaceTree := oTreeCube:FrontFace():CreateTree()
			oFaceTree:ItemPadding := 10
			oFaceTree:LinesAtRoot := 2/*exGroupLines*/
			oFaceTree:DrawGridLines := -2/*exRowLines*/
			oFaceTree:Columns():Add("Default"):Alignment := 0/*LeftAlignment*/
			oColumn := oFaceTree:Columns():Add("Pos")
				oColumn:Position := 0
				oColumn:Alignment := 0/*LeftAlignment*/
				oColumn:FormatColumn := "1 rpos ``"
				oColumn:Width := 24
			oItems := oFaceTree:Items()
				oItems1 := oItems:Add("Root 1"):Items()
					oItems1:Add("Child 1")
					oItems1:Add("Child 2")
					oItems1:Add("Child 3")
				oItems2 := oItems:Add("Root 2"):Items()
					oItems2:Add("Child 1")
					oItems2:Add("Child 2")
					oItems2:Add("Child 3")
				oItems:ExpandAll()
		oTreeCube:EndUpdate()

	oForm:Show()
	DO WHILE nEvent != xbeP_Quit
		nEvent := AppEvent( @mp1, @mp2, @oXbp )
		oXbp:handleEvent( nEvent, mp1, mp2 )
	ENDDO 
RETURN
53
How do I add a hierarchy

PROCEDURE OnFaceTreeExpandItem(oTreeCube,Tree,Item)
	DevOut( Transform(Item,"") )
RETURN

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

PROCEDURE Main
 	LOCAL oForm
	LOCAL nEvent := 0, mp1 := NIL, mp2 := NIL, oXbp := NIL
	LOCAL oFaceTree
	LOCAL oItems,oItems1,oItems2
	LOCAL oTreeCube

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

	oTreeCube := XbpActiveXControl():new( oForm:drawingArea )
	oTreeCube:CLSID  := "Exontrol.TreeCube.1" /*{13A5B44B-DBB7-42F2-AE2B-943A6CF6C8B9}*/
	oTreeCube:create(,, {10,60},{610,370} )

		oTreeCube:FaceTreeExpandItem := {|Tree,Item| OnFaceTreeExpandItem(oTreeCube,Tree,Item)} /*Notifies that an item has been expanded/collapsed into a face of tree type.*/

		oTreeCube:BeginUpdate()
		oFaceTree := oTreeCube:FrontFace():CreateTree()
			oFaceTree:ExpandOnDblClick := .T.
			oFaceTree:ItemPadding := 10
			oFaceTree:HeaderVisible := .F.
			oFaceTree:LinesAtRoot := 2/*exGroupLines*/
			oFaceTree:DrawGridLines := -2/*exRowLines*/
			oFaceTree:Columns():Add(""):Alignment := 0/*LeftAlignment*/
			oItems := oFaceTree:Items()
				oItems1 := oItems:Add("Root 1"):Items()
					oItems1:Add("Child 1")
					oItems1:Add("Child 2")
					oItems1:Add("Child 3")
				oItems2 := oItems:Add("Root 2"):Items()
					oItems2:Add("Child 1")
					oItems2:Add("Child 2")
					oItems2:Add("Child 3")
				oItems:ExpandAll()
		oTreeCube:EndUpdate()

	oForm:Show()
	DO WHILE nEvent != xbeP_Quit
		nEvent := AppEvent( @mp1, @mp2, @oXbp )
		oXbp:handleEvent( nEvent, mp1, mp2 )
	ENDDO 
RETURN
52
How can I display a calendar control

PROCEDURE OnFaceCalendarValueChanged(oTreeCube,Calendar)
	DevOut( Transform(Calendar,"") )
RETURN

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

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

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

	oTreeCube := XbpActiveXControl():new( oForm:drawingArea )
	oTreeCube:CLSID  := "Exontrol.TreeCube.1" /*{13A5B44B-DBB7-42F2-AE2B-943A6CF6C8B9}*/
	oTreeCube:create(,, {10,60},{610,370} )

		oTreeCube:FaceCalendarValueChanged := {|Calendar| OnFaceCalendarValueChanged(oTreeCube,Calendar)} /*Notifies that the user selects a new date/value into a face of the calendar type.*/

		oFaceCalendar := oTreeCube:FrontFace():CreateCalendar()
			oFaceCalendar:Value := "01/02/2001"
			oFaceCalendar:MonthNames := oFaceCalendar:LocMonthNames()
			oFaceCalendar:WeekDays := oFaceCalendar:LocWeekDays(2)
			oFaceCalendar:FirstWeekDay := oFaceCalendar:LocFirstWeekDay()
			oFaceCalendar:AutoSize := 1/*exFitClient*/

	oForm:Show()
	DO WHILE nEvent != xbeP_Quit
		nEvent := AppEvent( @mp1, @mp2, @oXbp )
		oXbp:handleEvent( nEvent, mp1, mp2 )
	ENDDO 
RETURN
51
How can I change the picture/texture on the faces

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

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

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

	oTreeCube := XbpActiveXControl():new( oForm:drawingArea )
	oTreeCube:CLSID  := "Exontrol.TreeCube.1" /*{13A5B44B-DBB7-42F2-AE2B-943A6CF6C8B9}*/
	oTreeCube:create(,, {10,60},{610,370} )

		oTreeCube:TexturePicturePath := "C:\Program Files\Exontrol\ExTreeCube\Sample\Texture\Earth"

	oForm:Show()
	DO WHILE nEvent != xbeP_Quit
		nEvent := AppEvent( @mp1, @mp2, @oXbp )
		oXbp:handleEvent( nEvent, mp1, mp2 )
	ENDDO 
RETURN
50
How can I get ride of the default texture

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

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

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

	oTreeCube := XbpActiveXControl():new( oForm:drawingArea )
	oTreeCube:CLSID  := "Exontrol.TreeCube.1" /*{13A5B44B-DBB7-42F2-AE2B-943A6CF6C8B9}*/
	oTreeCube:create(,, {10,60},{610,370} )

		oTreeCube:IdentifyFace := 7/*exIdentifyFaceFrame+exIdentifyFaceName+exIdentifyFaceCaption*/
		oTreeCube:TexturePicturePath := ""

	oForm:Show()
	DO WHILE nEvent != xbeP_Quit
		nEvent := AppEvent( @mp1, @mp2, @oXbp )
		oXbp:handleEvent( nEvent, mp1, mp2 )
	ENDDO 
RETURN
49
How do I get ride of grid lines, and the top border it shows on the tree face

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

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

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

	oTreeCube := XbpActiveXControl():new( oForm:drawingArea )
	oTreeCube:CLSID  := "Exontrol.TreeCube.1" /*{13A5B44B-DBB7-42F2-AE2B-943A6CF6C8B9}*/
	oTreeCube:create(,, {10,60},{610,370} )

		oFaceTree := oTreeCube:FrontFace():CreateTree()
			oFaceTree:ItemPadding := 20
			oFaceTree:HeaderVisible := .F.
			oFaceTree:DrawGridLines := 0/*exNoLines*/
			oItems := oFaceTree:Items()
				oItems:Add("Item A")
				oItems:Add("Item B")
				oItems:Add("Item C")

	oForm:Show()
	DO WHILE nEvent != xbeP_Quit
		nEvent := AppEvent( @mp1, @mp2, @oXbp )
		oXbp:handleEvent( nEvent, mp1, mp2 )
	ENDDO 
RETURN
48
How can I add a list of items (method 2)

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

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

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

	oTreeCube := XbpActiveXControl():new( oForm:drawingArea )
	oTreeCube:CLSID  := "Exontrol.TreeCube.1" /*{13A5B44B-DBB7-42F2-AE2B-943A6CF6C8B9}*/
	oTreeCube:create(,, {10,60},{610,370} )

		oItems := oTreeCube:FrontFace():CreateTree():Items()
			oItems:Add("Item A")
			oItems:Add("Item B")
			oItems:Add("Item C")

	oForm:Show()
	DO WHILE nEvent != xbeP_Quit
		nEvent := AppEvent( @mp1, @mp2, @oXbp )
		oXbp:handleEvent( nEvent, mp1, mp2 )
	ENDDO 
RETURN
47
How can I add a list of items (method 1)

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

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

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

	oTreeCube := XbpActiveXControl():new( oForm:drawingArea )
	oTreeCube:CLSID  := "Exontrol.TreeCube.1" /*{13A5B44B-DBB7-42F2-AE2B-943A6CF6C8B9}*/
	oTreeCube:create(,, {10,60},{610,370} )

		oFaceTree := oTreeCube:FrontFace():CreateTree()
			oFaceTree:Items():ToString := "Item A,Item B,Item C"

	oForm:Show()
	DO WHILE nEvent != xbeP_Quit
		nEvent := AppEvent( @mp1, @mp2, @oXbp )
		oXbp:handleEvent( nEvent, mp1, mp2 )
	ENDDO 
RETURN
46
Fisheye Calendar View - Year

PROCEDURE OnFaceTreeValueChanged(oTreeCube,Tree)
	/*f.FaceCalendar.Year = Tree.Caption*/
	LOCAL f
	f := oTreeCube:Face(oTreeCube:VisibleFace())
	f := oTreeCube:FrontFace()
		f:Date := f:FaceCalendar():Date()
		f:Move(1/*exRotateLeft*/)
		f:Date := f:FaceCalendar():Date()
		f:Move(2/*exRotateRight*/)
		f:Date := f:FaceCalendar():Date()
		f:Move(2/*exRotateRight*/)
		f:Move(2/*exRotateRight*/)
RETURN

PROCEDURE OnMove(oTreeCube,RotateDir,FromFace,ToFace)
	LOCAL f
	f := oTreeCube:Face(ToFace)
	f:FaceCalendar():SelDate := oTreeCube:Face(FromFace):FaceCalendar():SelDate()
	oTreeCube:Face(FromFace):FaceCalendar():UnselectDate()
		f:Date := f:FaceCalendar():Date()
		f:Move(1/*exRotateLeft*/)
		f:Date := f:FaceCalendar():Date()
		f:Move(2/*exRotateRight*/)
RETURN

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

PROCEDURE Main
 	LOCAL oForm
	LOCAL nEvent := 0, mp1 := NIL, mp2 := NIL, oXbp := NIL
	LOCAL oFace
	LOCAL oFaceCalendar,oFaceCalendar1,oFaceCalendar2,oFaceCalendar3
	LOCAL oFaceTree
	LOCAL oTreeCube
	LOCAL d

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

	oTreeCube := XbpActiveXControl():new( oForm:drawingArea )
	oTreeCube:CLSID  := "Exontrol.TreeCube.1" /*{13A5B44B-DBB7-42F2-AE2B-943A6CF6C8B9}*/
	oTreeCube:create(,, {10,60},{610,370} )

		oTreeCube:FaceTreeValueChanged := {|Tree| OnFaceTreeValueChanged(oTreeCube,Tree)} /*Notifies that the user selects a new item/column/value into a face of the tree type.*/
		oTreeCube:Move := {|RotateDir,FromFace,ToFace| OnMove(oTreeCube,RotateDir,FromFace,ToFace)} /*Occurs once a new face became visible, by moving/rotating from a face to another, into the giving direction.*/

		oTreeCube:BeginUpdate()
		oTreeCube:TexturePicturePath := ""
		oTreeCube:EnsureVisibleFaceMargin := 32
		oTreeCube:EnsureVisibleFaceOnDblClick := .F.
		oTreeCube:EnsureVisibleFaces := "0,2,1,3,4"
		oFaceCalendar := oTreeCube:FrontFace():CreateCalendar()
			oFaceCalendar:Date := "01/01/2016"
			oFaceCalendar:AutoSize := 1/*exFitClient*/
			oFaceCalendar:MaxMonthX := 1
			oFaceCalendar:MaxMonthY := 1
			oFaceCalendar:ShowTodayButton := .F.
			oFaceCalendar:FirstWeekDay := 1/*exMonday*/
			oFaceCalendar:SetProperty("SelBackColor",0x2000000)
			oFaceCalendar:SetProperty("SelForeColor",AutomationTranslateColor( GraMakeRGBColor  ( { 0,0,0 } )  , .F. ))
			oFaceCalendar:ShowNonMonthDays := .T.
		d := oTreeCube:FrontFace():FaceCalendar():Date()
		oFaceCalendar1 := oTreeCube:LeftFace():CreateCalendar()
			oFaceCalendar1:Date := d
			oFaceCalendar1:Move(1/*exRotateLeft*/)
			oFaceCalendar1:AutoSize := 1/*exFitClient*/
			oFaceCalendar1:MaxMonthX := 1
			oFaceCalendar1:MaxMonthY := 1
			oFaceCalendar1:ShowTodayButton := .F.
			oFaceCalendar1:FirstWeekDay := 1/*exMonday*/
			oFaceCalendar1:SetProperty("SelBackColor",0x2000000)
			oFaceCalendar1:SetProperty("SelForeColor",AutomationTranslateColor( GraMakeRGBColor  ( { 0,0,0 } )  , .F. ))
			oFaceCalendar1:ShowNonMonthDays := .T.
		oFaceCalendar2 := oTreeCube:RightFace():CreateCalendar()
			oFaceCalendar2:Date := d
			oFaceCalendar2:Move(2/*exRotateRight*/)
			oFaceCalendar2:AutoSize := 1/*exFitClient*/
			oFaceCalendar2:MaxMonthX := 1
			oFaceCalendar2:MaxMonthY := 1
			oFaceCalendar2:ShowTodayButton := .F.
			oFaceCalendar2:FirstWeekDay := 1/*exMonday*/
			oFaceCalendar2:SetProperty("SelBackColor",0x2000000)
			oFaceCalendar2:SetProperty("SelForeColor",AutomationTranslateColor( GraMakeRGBColor  ( { 0,0,0 } )  , .F. ))
			oFaceCalendar2:ShowNonMonthDays := .T.
		oFaceCalendar3 := oTreeCube:BottomFace():CreateCalendar()
			oFaceCalendar3:Date := d
			oFaceCalendar3:Move(2/*exRotateRight*/)
			oFaceCalendar3:Move(2/*exRotateRight*/)
			oFaceCalendar3:AutoSize := 1/*exFitClient*/
			oFaceCalendar3:MaxMonthX := 1
			oFaceCalendar3:MaxMonthY := 1
			oFaceCalendar3:ShowTodayButton := .F.
			oFaceCalendar3:FirstWeekDay := 1/*exMonday*/
			oFaceCalendar3:SetProperty("SelBackColor",0x2000000)
			oFaceCalendar3:SetProperty("SelForeColor",AutomationTranslateColor( GraMakeRGBColor  ( { 0,0,0 } )  , .F. ))
			oFaceCalendar3:ShowNonMonthDays := .T.
		oFace := oTreeCube:TopFace()
			oFaceTree := oFace:CreateTree()
				oFaceTree:ItemPadding := 20
				oFaceTree:SetProperty("SelBackColor",0x2000000)
				oFaceTree:SetProperty("SelForeColor",AutomationTranslateColor( GraMakeRGBColor  ( { 0,0,0 } )  , .F. ))
				oFaceTree:Columns():Count := 5
				oFaceTree:HeaderVisible := .F.
				oFaceTree:Items():Count := oTreeCube:TopFace():FaceTree():VisibleItemsCount()
				oFaceTree:Columns:Item(0):FormatColumn := "(0:=(1989 + 5 * (0 index ``))) = 2016 ? `<b><sha ;;0>` + =:0 + `</b>` : =:0"
				oFaceTree:Columns:Item(1):FormatColumn := "(0:=(1990 + 5 * (0 index ``))) = 2016 ? `<b><sha ;;0>` + =:0 + `</b>` : =:0"
				oFaceTree:Columns:Item(2):FormatColumn := "(0:=(1991 + 5 * (0 index ``))) = 2016 ? `<b><sha ;;0>` + =:0 + `</b>` : =:0"
				oFaceTree:Columns:Item(3):FormatColumn := "(0:=(1992 + 5 * (0 index ``))) = 2016 ? `<b><sha ;;0>` + =:0 + `</b>` : =:0"
				oFaceTree:Columns:Item(4):FormatColumn := "(0:=(1993 + 5 * (0 index ``))) = 2016 ? `<b><sha ;;0>` + =:0 + `</b>` : =:0"
				oFaceTree:Caption := Transform(oTreeCube:FrontFace():FaceCalendar():Year(),"")
		oTreeCube:VisualAppearance():Add(1,"gBFLBCJwBAEHhEJAADhABXgCg6AADACAxRDAMgBQKAAzQFAYaBsHCGAAGMZRZgmFgAQhFcZQSKUOQTDKMIziYBYfgkMIgSbJUgDIAkRRdDSOYDmGQYDiCIoRShOMIjHLUXxtDaIZZmWCQCglf5HABRb7xPLoARTAaeJKoWboJAiGwLQjQUyABSdEyRJSLYhGIZRFqKZIRDSMFiwTZNVypAaIYqqaA6qzfJymabAAZJEradozTLIE7xVLEVYNKCmZCwMAAcgmEQgSTAda2BYELTzECoYDGCrcKpWCaNQLWEB5BQeJSNL6kIqsazgAqPLJtWhaVwxXIEI5AAC5QA0S7pOxeO6JbRGdZbNrlbz1PTMaazTgYDzmWqiYxxMraXxSlmMprGsIpVl2LRnD0A5bnSN49mAARAlIYw6B0ThGFGDIBG0QghBMfZRiGNAkFECZoG6YQBgiOgCmuRRSg6GAElWAJMkgFgGgGYIIAyVQ7GCRhUAAOQhAMBgSDWIRDG4" +;
		"Fg3CGCBmBmBYNjgUJWDIIgIECZBCEsKIUkqCZhiiJgqgaYRjB4LguiMBAkiqDLenYrBjgiZg6gGIwyioMoNCAWJqEKEJjkiTg/CqIxZA4SoNmQWJ5AODxMlkRJehSZRJFYVoVmUEw2D2EZlhkXhehfURuE+DJllkfhmhUJgZBoYwqiWEx+G6G5nAmRhyhoZJgAIUIUGcKZmHqHQlkmYh6h+Zp5nIawzigQ4CgaIZogoJoKiEDJpgodoMmiSgqhKJNxDoPQzmmA4GhqJppkodoeiYDJ6FpaQpmqFomigKgiiqJIpiqShuiiGoonqKoZisapaj4dYl3WCo6i6a5KnaPotiQeoCj6MJsEsAhrDQLIDg6SoymySw2k6MgNAqJpQjOLRLFaUI0iyGxWlq/p6kIPY0m2Oxul2LZjDMRpmgiLoLiaaoIi4YxGinoY7kaauhnuGJlj2b4Lmaeo+m8Sx6mWOZhAubwCj2bpLhqKYJkyKTnECThYgoVJCCiYpPBIL5" +;
		"xEMLwWjsTQsGcGpGi6XBYkuRQLvcIhCE8DIWDCSZLiKdwqC+MpMjcLZKguXIcjiTJyFOQYnD+TYMmSLZOkmHJ3D6T50AybItiGYJji2MwABAECAg=")
		oTreeCube:VisualAppearance():Add(2,"gBFLBCJwBAEHhEJAADhABOkGACAADACAxRDAMgBQKAAzQFAYaBsHCGAAGMZRZgmFgAQhFcZQSpEEg7BKMYwjOJgFgmEYFDSAUIjKKkIhkGIYZBGQBJDjWGgyQjOEByDIMRwjE4YBpkGYYJDSIYHTZIUzTJAdGSVJKNKAoKCaEg2R4qsZCCKwUgmTo9VBJU9CFi6ZIRDSMFiyXZUIxHEKnIqrOjbBjaUpYABLErTBKUSzrEadAAwGbKJj+VJBULMVD2BDWGABOYAKarWa7fhaUqJUTVdI1VBOIYmADPcaqCxrLgMMpnWxpN42bjdPY7V6Bc7yXJsHimK5GUTQA4aFIENydJzINjsKBKBriLIybpeFr7BiME4/YLhAA0vZNUYsg0XguBqaAeEOIYUjqYQgGCCBJECUhjDoHROEYWooAGTRMCEEx9lGIY0CQUZOnuZQDBEdYFkeI5+H+igGAKAJgEgFgGgGUAzn4CoCmCSA2A6A5hAgCgQgSYRIE4EoFGG" +;
		"CBiBeBhhkgPgbgcYgICoH4IGGWIOCSBhiGiHgVgoYooFoAYLGIWI+DCCgjCiTgrgII4ImYOoOmOSJ1n4OpWmQDQBICA==")
		oTreeCube:SetProperty("Background",8/*exDateHeader*/,0x1000000)
		oTreeCube:SetProperty("Background",7/*exWeeksHeader*/,AutomationTranslateColor( GraMakeRGBColor  ( { 250,250,250 } )  , .F. ))
		oTreeCube:SetProperty("Background",6/*exDaysHeader*/,AutomationTranslateColor( GraMakeRGBColor  ( { 250,250,250 } )  , .F. ))
		oTreeCube:SetProperty("Background",9/*exDateTodayUp*/,0x2000000)
		oTreeCube:SetProperty("Background",31/*exDateTodayForeColor*/,AutomationTranslateColor( GraMakeRGBColor  ( { 255,255,255 } )  , .F. ))
		oTreeCube:EnsureVisibleFace(0/*exFrontFace*/)
		oTreeCube:EndUpdate()

	oForm:Show()
	DO WHILE nEvent != xbeP_Quit
		nEvent := AppEvent( @mp1, @mp2, @oXbp )
		oXbp:handleEvent( nEvent, mp1, mp2 )
	ENDDO 
RETURN
45
How can I add a FaceTree object ( method 2 )

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

PROCEDURE Main
 	LOCAL oForm
	LOCAL nEvent := 0, mp1 := NIL, mp2 := NIL, oXbp := NIL
	LOCAL oFace
	LOCAL oFaceTree
	LOCAL oTreeCube

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

	oTreeCube := XbpActiveXControl():new( oForm:drawingArea )
	oTreeCube:CLSID  := "Exontrol.TreeCube.1" /*{13A5B44B-DBB7-42F2-AE2B-943A6CF6C8B9}*/
	oTreeCube:create(,, {10,60},{610,370} )

		oFace := oTreeCube:FrontFace()
			oFaceTree := oFace:CreateTree()
				oFaceTree:Items():ToString := "Item <b>1,Item <b>2,Item <b>3"
				oFaceTree:SelectItem := 1

	oForm:Show()
	DO WHILE nEvent != xbeP_Quit
		nEvent := AppEvent( @mp1, @mp2, @oXbp )
		oXbp:handleEvent( nEvent, mp1, mp2 )
	ENDDO 
RETURN
44
How can I add a FaceTree object ( method 1 )

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

PROCEDURE Main
 	LOCAL oForm
	LOCAL nEvent := 0, mp1 := NIL, mp2 := NIL, oXbp := NIL
	LOCAL oFace
	LOCAL oFaceTree
	LOCAL oTreeCube

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

	oTreeCube := XbpActiveXControl():new( oForm:drawingArea )
	oTreeCube:CLSID  := "Exontrol.TreeCube.1" /*{13A5B44B-DBB7-42F2-AE2B-943A6CF6C8B9}*/
	oTreeCube:create(,, {10,60},{610,370} )

		oFace := oTreeCube:FrontFace()
			oFace:Type := 1/*exFaceTree*/
			oFaceTree := oFace:FaceTree()
				oFaceTree:Items():ToString := "Item <b>1,Item <b>2,Item <b>3"
				oFaceTree:SelectItem := 1

	oForm:Show()
	DO WHILE nEvent != xbeP_Quit
		nEvent := AppEvent( @mp1, @mp2, @oXbp )
		oXbp:handleEvent( nEvent, mp1, mp2 )
	ENDDO 
RETURN
43
How can I add a FaceCalendar object ( method 2 )

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

PROCEDURE Main
 	LOCAL oForm
	LOCAL nEvent := 0, mp1 := NIL, mp2 := NIL, oXbp := NIL
	LOCAL oFace
	LOCAL oFaceCalendar
	LOCAL oTreeCube

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

	oTreeCube := XbpActiveXControl():new( oForm:drawingArea )
	oTreeCube:CLSID  := "Exontrol.TreeCube.1" /*{13A5B44B-DBB7-42F2-AE2B-943A6CF6C8B9}*/
	oTreeCube:create(,, {10,60},{610,370} )

		oFace := oTreeCube:FrontFace()
			oFaceCalendar := oFace:CreateCalendar()
				oFaceCalendar:AutoSize := 1/*exFitClient*/
				oFaceCalendar:Value := "12/31/1971"

	oForm:Show()
	DO WHILE nEvent != xbeP_Quit
		nEvent := AppEvent( @mp1, @mp2, @oXbp )
		oXbp:handleEvent( nEvent, mp1, mp2 )
	ENDDO 
RETURN
42
How can I add a FaceCalendar object ( method 1 )

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

PROCEDURE Main
 	LOCAL oForm
	LOCAL nEvent := 0, mp1 := NIL, mp2 := NIL, oXbp := NIL
	LOCAL oFace
	LOCAL oFaceCalendar
	LOCAL oTreeCube

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

	oTreeCube := XbpActiveXControl():new( oForm:drawingArea )
	oTreeCube:CLSID  := "Exontrol.TreeCube.1" /*{13A5B44B-DBB7-42F2-AE2B-943A6CF6C8B9}*/
	oTreeCube:create(,, {10,60},{610,370} )

		oFace := oTreeCube:FrontFace()
			oFace:Type := 2/*exFaceCalendar*/
			oFaceCalendar := oFace:FaceCalendar()
				oFaceCalendar:AutoSize := 1/*exFitClient*/
				oFaceCalendar:Value := "12/31/1971"

	oForm:Show()
	DO WHILE nEvent != xbeP_Quit
		nEvent := AppEvent( @mp1, @mp2, @oXbp )
		oXbp:handleEvent( nEvent, mp1, mp2 )
	ENDDO 
RETURN
41
How can I add a FacePicture object ( method 2 )

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

PROCEDURE Main
 	LOCAL oForm
	LOCAL nEvent := 0, mp1 := NIL, mp2 := NIL, oXbp := NIL
	LOCAL oFace
	LOCAL oFacePicture
	LOCAL oTreeCube

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

	oTreeCube := XbpActiveXControl():new( oForm:drawingArea )
	oTreeCube:CLSID  := "Exontrol.TreeCube.1" /*{13A5B44B-DBB7-42F2-AE2B-943A6CF6C8B9}*/
	oTreeCube:create(,, {10,60},{610,370} )

		oTreeCube:IdentifyFace := 7/*exIdentifyFaceFrame+exIdentifyFaceName+exIdentifyFaceCaption*/
		oFace := oTreeCube:FrontFace()
			oFacePicture := oFace:CreatePicture()
				oFacePicture:Picture := oTreeCube:ExecuteTemplate("loadpicture(`c:\exontrol\images\zipdisk.gif`)")
				oFacePicture:PictureDisplay := 48/*Tile*/
				oFacePicture:Width := "2 * pwidth"
				oFacePicture:Height := "2 * pheight"
				oFacePicture:Top := "122"
				oFacePicture:Left := "46"

	oForm:Show()
	DO WHILE nEvent != xbeP_Quit
		nEvent := AppEvent( @mp1, @mp2, @oXbp )
		oXbp:handleEvent( nEvent, mp1, mp2 )
	ENDDO 
RETURN
40
How can I add a FacePicture object ( method 1 )

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

PROCEDURE Main
 	LOCAL oForm
	LOCAL nEvent := 0, mp1 := NIL, mp2 := NIL, oXbp := NIL
	LOCAL oFace
	LOCAL oFacePicture
	LOCAL oTreeCube

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

	oTreeCube := XbpActiveXControl():new( oForm:drawingArea )
	oTreeCube:CLSID  := "Exontrol.TreeCube.1" /*{13A5B44B-DBB7-42F2-AE2B-943A6CF6C8B9}*/
	oTreeCube:create(,, {10,60},{610,370} )

		oTreeCube:IdentifyFace := 7/*exIdentifyFaceFrame+exIdentifyFaceName+exIdentifyFaceCaption*/
		oFace := oTreeCube:FrontFace()
			oFace:Type := 3/*exFacePicture*/
			oFacePicture := oFace:FacePicture()
				oFacePicture:Picture := oTreeCube:ExecuteTemplate("loadpicture(`c:\exontrol\images\zipdisk.gif`)")
				oFacePicture:PictureDisplay := 48/*Tile*/
				oFacePicture:Width := "2 * pwidth"
				oFacePicture:Height := "2 * pheight"
				oFacePicture:Top := "122"
				oFacePicture:Left := "46"

	oForm:Show()
	DO WHILE nEvent != xbeP_Quit
		nEvent := AppEvent( @mp1, @mp2, @oXbp )
		oXbp:handleEvent( nEvent, mp1, mp2 )
	ENDDO 
RETURN
39
How can I prevent bringing a specified face into the front
#include "AppEvent.ch"
#include "ActiveX.ch"

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

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

	oTreeCube := XbpActiveXControl():new( oForm:drawingArea )
	oTreeCube:CLSID  := "Exontrol.TreeCube.1" /*{13A5B44B-DBB7-42F2-AE2B-943A6CF6C8B9}*/
	oTreeCube:create(,, {10,60},{610,370} )

		oTreeCube:EnsureVisibleFaces := "0"

	oForm:Show()
	DO WHILE nEvent != xbeP_Quit
		nEvent := AppEvent( @mp1, @mp2, @oXbp )
		oXbp:handleEvent( nEvent, mp1, mp2 )
	ENDDO 
RETURN
38
Is it possible to show one face opaque, while other semi-transparent

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

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

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

	oTreeCube := XbpActiveXControl():new( oForm:drawingArea )
	oTreeCube:CLSID  := "Exontrol.TreeCube.1" /*{13A5B44B-DBB7-42F2-AE2B-943A6CF6C8B9}*/
	oTreeCube:create(,, {10,60},{610,370} )

		oTreeCube:BeginUpdate()
		oTreeCube:TexturePicturePath := ""
		oTreeCube:DefaultFaceType := 2/*exFaceCalendar*/
		oTreeCube:TransparentContent := 75
		oTreeCube:FrontFace():TransparentContent := 0
		oTreeCube:EndUpdate()

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

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

PROCEDURE Main
 	LOCAL oForm
	LOCAL nEvent := 0, mp1 := NIL, mp2 := NIL, oXbp := NIL
	LOCAL oFace
	LOCAL oFaceCalendar
	LOCAL oTreeCube

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

	oTreeCube := XbpActiveXControl():new( oForm:drawingArea )
	oTreeCube:CLSID  := "Exontrol.TreeCube.1" /*{13A5B44B-DBB7-42F2-AE2B-943A6CF6C8B9}*/
	oTreeCube:create(,, {10,60},{610,370} )

		oTreeCube:BeginUpdate()
		oTreeCube:Margins := "0,0,0,0"
		oFace := oTreeCube:FrontFace()
			oFace:Type := 2/*exFaceCalendar*/
			oFaceCalendar := oFace:FaceCalendar()
				oFaceCalendar:ShowNonMonthDays := .T.
				oFaceCalendar:AutoSize := 1/*exFitClient*/
		oTreeCube:EndUpdate()

	oForm:Show()
	DO WHILE nEvent != xbeP_Quit
		nEvent := AppEvent( @mp1, @mp2, @oXbp )
		oXbp:handleEvent( nEvent, mp1, mp2 )
	ENDDO 
RETURN
36
Is it possible to init faces at once
PROCEDURE OnInitFaceContent(oTreeCube,Face)
	/*Face.FaceContent.ShowTodayButton = False*/

RETURN

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

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

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

	oTreeCube := XbpActiveXControl():new( oForm:drawingArea )
	oTreeCube:CLSID  := "Exontrol.TreeCube.1" /*{13A5B44B-DBB7-42F2-AE2B-943A6CF6C8B9}*/
	oTreeCube:create(,, {10,60},{610,370} )

		oTreeCube:InitFaceContent := {|Face| OnInitFaceContent(oTreeCube,Face)} /*Notifies your application that a face changes its type, so you can initialize its content.*/

		oTreeCube:DefaultFaceType := 2/*exFaceCalendar*/

	oForm:Show()
	DO WHILE nEvent != xbeP_Quit
		nEvent := AppEvent( @mp1, @mp2, @oXbp )
		oXbp:handleEvent( nEvent, mp1, mp2 )
	ENDDO 
RETURN
35
How can I disable zoom when rolling the mouse wheel
#include "AppEvent.ch"
#include "ActiveX.ch"

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

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

	oTreeCube := XbpActiveXControl():new( oForm:drawingArea )
	oTreeCube:CLSID  := "Exontrol.TreeCube.1" /*{13A5B44B-DBB7-42F2-AE2B-943A6CF6C8B9}*/
	oTreeCube:create(,, {10,60},{610,370} )

		oTreeCube:OnMouseWheel := 0/*exMouseWheelNothing*/

	oForm:Show()
	DO WHILE nEvent != xbeP_Quit
		nEvent := AppEvent( @mp1, @mp2, @oXbp )
		oXbp:handleEvent( nEvent, mp1, mp2 )
	ENDDO 
RETURN
34
Fisheye Calendar View - LR

PROCEDURE OnMove(oTreeCube,RotateDir,FromFace,ToFace)
	LOCAL oFaceCalendar,oFaceCalendar1
	oTreeCube:FrontFace():FaceCalendar():Move(RotateDir)
	oFaceCalendar := oTreeCube:LeftFace():FaceCalendar()
		oFaceCalendar:Date := oTreeCube:FrontFace():FaceCalendar():Date()
		oFaceCalendar:PrevMonth()
	oFaceCalendar1 := oTreeCube:RightFace():FaceCalendar()
		oFaceCalendar1:Date := oTreeCube:FrontFace():FaceCalendar():Date()
		oFaceCalendar1:NextMonth()
RETURN

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

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

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

	oTreeCube := XbpActiveXControl():new( oForm:drawingArea )
	oTreeCube:CLSID  := "Exontrol.TreeCube.1" /*{13A5B44B-DBB7-42F2-AE2B-943A6CF6C8B9}*/
	oTreeCube:create(,, {10,60},{610,370} )

		oTreeCube:Move := {|RotateDir,FromFace,ToFace| OnMove(oTreeCube,RotateDir,FromFace,ToFace)} /*Occurs once a new face became visible, by moving/rotating from a face to another, into the giving direction.*/

		oTreeCube:BeginUpdate()
		oTreeCube:TexturePicturePath := ""
		oAppearance := oTreeCube:VisualAppearance()
			oAppearance:Add(1,"gBFLBCJwBAEHhEJAADhABdQFg6AADACAxRDAMgBQKAAzQFAYaBsHCGAAGMZRZgmFgAQhFcZQSKUOQTDKMIziYBYJhEMQ1DBJQwwXBIZhgGIBIRgUBJCjWGodQLOEgwHIERQjEyUJAmCYhRiCB42TrNIJwSBUPwTGKBXZDQRAApKVIWUAMFBVg7GRYcVxIUgAdDYMyZJyBa4qapaTheEQyDSJNr3DCMUTlBK7IhsKCaLhqZIDUzGVpWbZdMRlFCVJYgOTqDgQMIkUhSE5TVIEew3H7DaymKrKeobFoaZ6AAL3ZBNTR5J6EbTwWRcZpuRJGWDGdhwTocB5MADbZAwOpNLgOc53TjdF4DBwAATzJCQL50KCbfziG67WxVeqQJgiggNpOAwbZjDGHoGC2IZAgAORbFiPxDHoAIsmIewdiGHpHEGTIzm2Nocn0TgSluBpgnEbgcF4PAPnkSQAA+c58AAVwcheiRzF4NIJiofYWgUJAIEIRQBiQYwdAcUZIGU" +;
		"V5QDKCAHECRAhDYGhGgMZAkCgaRiEaHAYEWRpIG2ERFkIQBwm2CxiniOgwgyYpjmoNg3g2YxwkwwYzCiSwyCOaQCD8MxjkibJLDMDJDCoPgyEyMwskkNpNjMaJ1hSYxIkYVoVEACRWFqC4OBOCJgCkShSgiCQiEgQZ8gAHpIAIBB8hoZo5iobIbmaaYqGZWByCCAwnkoAhwlQNQNCkbhXguJYYkqAoVguQpwjsIxIlIJNHksE4kmoOhgSsEokmkShUnCJZLzYOwigiIgYjULYLDmegwiAZ5zjSNwuAsYg8g8IplAMZoRhST1UCMJ5IGIqoiEiIgUgoIpIGqbo9i8JgyBaNQggmUh4hoOBOAOAoRDoLJCFSFQkgsQpQjGH4qEiQJJDITB6CCCQ7G2ShEjsLwLhGIBpBiBIhCwRAQEQIJsEIEJDkuLptjsLphAwRI7kOMQkEoEJFnGABaiyCZ6ESeI/kkAhAg2IRLikYgwDoToTiCEQkgiUxElEM5pBIbI" +;
		"cCYBQhEwTASASGB0E4EZEmEPBIkccZ8HsIJInILB4E2RpvasSwTAQUgIgMH5pVGYg4GuYx8l8NxqDiQoFC4SYSGiFokEyYw4kwFhF8GSQSkQPITCGUp0i0NwllKcoxBcJwRkqEooiaJBLCKSIvCp54aDYPoAAORJyDwSWUhENANAwQgBB6R4xlqcgPDSbQzE+XB3EweBGBGRABigawZE6GcLoHxCAQFICkAIvhOhgACM4OYnBhjQHsDoT4Zxsj0DYJsEwwBhJgMIOsXIcwOC+CCJMRA2BgCFFYJUegiBzA6AaMcDLuAAAdBiMUBQDWyhuC2JYTQiBMAmEQNwaw5xtjzB6MAPAHhDDEHyD4JwUgRiAHEDUTgNggABHEJwAYkBzA2GkDMAIRAQAIBCM8No3ERC4D4B8Q4FxygiBwI4IYbxIjjGyB4c4mQACUXaD8dYhh/CfGqNwNIXhfizCyPsPw7xfjkD4FQRo+R7h9D8K8bI3A+jeGoAIfAnxNjhD3JY" +;
		"LIvxDj2H8KAIYcQ/ivGCP8X4JxGD9AGIgNgUgRCECgIkaAegHiBFmPkQYTx4jsB+OEf4AAPAzBkBwEI1AdCHAqCIFYBQwCoAQIECgHwag4BuAIMA4AbgUBEIgJ4KQIDlAGIcg4HBRkyAOHAdwHBqCIGKBgUYCAVAFCgJwagYQ+AvD0YAKYCgwhGH4F4eYxg3ijFQEEWQ8RqDfEOGgdhUBYA2AMHYdwEARBMAOGkJgpAWiFGAKoGgRhIDQCkCEcAPQDhBGYDkQ4KAABrHaHAKYCwAhgBWKAEAnw5jOGaNoYwKB+DmA0JwFYBxhAsCMAgOoIgYjGBwMUCYAgyBKAeDEdAPBqggGsBoYYVAihICiOgHoRxRCRl6PQHgLhAB3A+CMBYmAuhgHZRgaAzhbgHDUJECQYgoBIAYFERgMQMjKEGBUUQtAqgKBiEoFAWREDjA4CsBktw4B/AUMEdARwEgBAMFAHYhhTDnFMAMdADwwjwB2IweIngZhUEUNECwSwKB" +;
		"NFePEeILApCyG4B0QQOAkAIGCHIFwxRdCRA+LMRwOwFDQH8B+B4aQ3huGYCIQYoA7AMHALgGwBwwDwA0EwEAggMhDBgGACAAgAA+BMUgHoqABCRCSKMEgRRECxAcLIIw+7RhoGCNMBwMQUgrAINATYEh5hZCQI8PQAQHDHBIM4DM9wwiMACIkCA6BwDACOGMFQEQHh6BYKQLQ/B/ARFEDgIoJRojAFqBUCQLgpDjF6J0U4MQnT5BGJADQ8w1BxEeOVTgRx6hBE2EMOAbhGihCyC0E42A+AWAEMQK4DhkCzCYEcNQ1RQhqAcKAR44RnA6AODgWoFhRDMCGAgMg1QZgDDQG4BoIRMAzEMBAZwGgBgVDIAwEIqAagGCAPIDwQxMCECYLUFgVhdChHyF0dQghRgdDIDAAgmhBAGAkAIPATgRBAoqB4mYYAWAQBmLAiQmgrj7AHXgFABhYD2B8MULAVAqAABYxMAACAfDHCwJsC4Xw2DtE0DwCwZhlCeA2CcM" +;
		"ArBkgBICA")
			oAppearance:Add(2,"CP:1 -6 0 6 0")
		oTreeCube:SetProperty("Background",8/*exDateHeader*/,0x2000000)
		oTreeCube:SetProperty("Background",21/*exDateHeaderForeColor*/,AutomationTranslateColor( GraMakeRGBColor  ( { 255,255,255 } )  , .F. ))
		oTreeCube:SetProperty("Background",7/*exWeeksHeader*/,AutomationTranslateColor( GraMakeRGBColor  ( { 240,240,240 } )  , .F. ))
		oTreeCube:SetProperty("Background",6/*exDaysHeader*/,AutomationTranslateColor( GraMakeRGBColor  ( { 240,240,240 } )  , .F. ))
		oTreeCube:SetProperty("Background",9/*exDateTodayUp*/,0x2000000)
		oTreeCube:SetProperty("Background",31/*exDateTodayForeColor*/,AutomationTranslateColor( GraMakeRGBColor  ( { 255,255,255 } )  , .F. ))
		oTreeCube:AllowRotate := 3/*exRotateRight+exRotateLeft*/
		oTreeCube:EnsureVisibleFaceOnDblClick := .F.
		oTreeCube:DefaultFaceType := 2/*exFaceCalendar*/
		oTreeCube:FrontFace():FaceCalendar():Date := "01/01/2016"
		oTreeCube:TopFace():Type := 0/*exFaceNone*/
		oTreeCube:DownFace():Type := 0/*exFaceNone*/
		oTreeCube:AlwaysEnsureVisibleFace := 17/*exAlwaysVisibleFrontFace+exFitToEnsureFace*/
		oTreeCube:EndUpdate()

	oForm:Show()
	DO WHILE nEvent != xbeP_Quit
		nEvent := AppEvent( @mp1, @mp2, @oXbp )
		oXbp:handleEvent( nEvent, mp1, mp2 )
	ENDDO 
RETURN
33
Fisheye Calendar View - S

PROCEDURE OnFaceCalendarDateChanged(oTreeCube,Calendar)
	LOCAL oFaceCalendar,oFaceCalendar1,oFaceCalendar2,oFaceCalendar3
	LOCAL currentDate
	currentDate := oTreeCube:FrontFace:FaceCalendar():Date()
	oFaceCalendar := oTreeCube:LeftFace():FaceCalendar()
		oFaceCalendar:Date := currentDate
		oFaceCalendar:PrevMonth()
	oFaceCalendar1 := oTreeCube:RightFace():FaceCalendar()
		oFaceCalendar1:Date := currentDate
		oFaceCalendar1:NextMonth()
	oFaceCalendar2 := oTreeCube:TopFace():FaceCalendar()
		oFaceCalendar2:Date := currentDate
		oFaceCalendar2:PrevYear()
	oFaceCalendar3 := oTreeCube:DownFace():FaceCalendar()
		oFaceCalendar3:Date := currentDate
		oFaceCalendar3:NextYear()
RETURN

PROCEDURE OnInitFaceCalendar(oTreeCube,Calendar)

RETURN

PROCEDURE OnMove(oTreeCube,RotateDir,FromFace,ToFace)
	oTreeCube:FrontFace():FaceCalendar():Move(RotateDir)
RETURN

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

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

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

	oTreeCube := XbpActiveXControl():new( oForm:drawingArea )
	oTreeCube:CLSID  := "Exontrol.TreeCube.1" /*{13A5B44B-DBB7-42F2-AE2B-943A6CF6C8B9}*/
	oTreeCube:create(,, {10,60},{610,370} )

		oTreeCube:FaceCalendarDateChanged := {|Calendar| OnFaceCalendarDateChanged(oTreeCube,Calendar)} /*Notifies that the user browses for a new date into a face of calendar type.*/
		oTreeCube:InitFaceCalendar := {|Calendar| OnInitFaceCalendar(oTreeCube,Calendar)} /*Notifies your application that a face changes its type to exFaceCalendar.*/
		oTreeCube:Move := {|RotateDir,FromFace,ToFace| OnMove(oTreeCube,RotateDir,FromFace,ToFace)} /*Occurs once a new face became visible, by moving/rotating from a face to another, into the giving direction.*/

		oTreeCube:BeginUpdate()
		oTreeCube:VisualAppearance():Add(1,"gBFLBCJwBAEHhEJAADhABXgCg6AADACAxRDAMgBQKAAzQFAYaBsHCGAAGMZRZgmFgAQhFcZQSKUOQTDKMIziYBYfgkMIgSbJUgDIAkRRdDSOYDmGQYDiCIoRShOMIjHLUXxtDaIZZmWCQCglf5HABRb7xPLoARTAaeJKoWboJAiGwLQjQUyABSdEyRJSLYhGIZRFqKZIRDSMFiwTZNVypAaIYqqaA6qzfJymabAAZJEradozTLIE7xVLEVYNKCmZCwMAAcgmEQgSTAda2BYELTzECoYDGCrcKpWCaNQLWEB5BQeJSNL6kIqsazgAqPLJtWhaVwxXIEI5AAC5QA0S7pOxeO6JbRGdZbNrlbz1PTMaazTgYDzmWqiYxxMraXxSlmMprGsIpVl2LRnD0A5bnSN49mAARAlIYw6B0ThGFGDIBG0QghBMfZRiGNAkFECZoG6YQBgiOgCmuRRSg6GAElWAJMkgFgGgGYIIAyVQ7GCRhUAAOQhAMBgSDWIRDG4" +;
		"Fg3CGCBmBmBYNjgUJWDIIgIECZBCEsKIUkqCZhiiJgqgaYRjB4LguiMBAkiqDLenYrBjgiZg6gGIwyioMoNCAWJqEKEJjkiTg/CqIxZA4SoNmQWJ5AODxMlkRJehSZRJFYVoVmUEw2D2EZlhkXhehfURuE+DJllkfhmhUJgZBoYwqiWEx+G6G5nAmRhyhoZJgAIUIUGcKZmHqHQlkmYh6h+Zp5nIawzigQ4CgaIZogoJoKiEDJpgodoMmiSgqhKJNxDoPQzmmA4GhqJppkodoeiYDJ6FpaQpmqFomigKgiiqJIpiqShuiiGoonqKoZisapaj4dYl3WCo6i6a5KnaPotiQeoCj6MJsEsAhrDQLIDg6SoymySw2k6MgNAqJpQjOLRLFaUI0iyGxWlq/p6kIPY0m2Oxul2LZjDMRpmgiLoLiaaoIi4YxGinoY7kaauhnuGJlj2b4Lmaeo+m8Sx6mWOZhAubwCj2bpLhqKYJkyKTnECThYgoVJCCiYpPBIL5" +;
		"xEMLwWjsTQsGcGpGi6XBYkuRQLvcIhCE8DIWDCSZLiKdwqC+MpMjcLZKguXIcjiTJyFOQYnD+TYMmSLZOkmHJ3D6T50AybItiGYJji2MwABAECAg=")
		oTreeCube:SetProperty("Background",8/*exDateHeader*/,0x1000000)
		oTreeCube:SetProperty("Background",7/*exWeeksHeader*/,AutomationTranslateColor( GraMakeRGBColor  ( { 250,250,250 } )  , .F. ))
		oTreeCube:SetProperty("Background",6/*exDaysHeader*/,AutomationTranslateColor( GraMakeRGBColor  ( { 250,250,250 } )  , .F. ))
		oTreeCube:SetProperty("Background",9/*exDateTodayUp*/,0x2000000)
		oTreeCube:SetProperty("Background",31/*exDateTodayForeColor*/,AutomationTranslateColor( GraMakeRGBColor  ( { 255,255,255 } )  , .F. ))
		oTreeCube:TexturePicturePath := ""
		oTreeCube:DefaultFaceType := 2/*exFaceCalendar*/
		oTreeCube:AlwaysEnsureVisibleFace := 17/*exAlwaysVisibleFrontFace+exFitToEnsureFace*/
		oTreeCube:FrontFace():FaceCalendar():Date := "01/01/2016"
		oTreeCube:EndUpdate()

	oForm:Show()
	DO WHILE nEvent != xbeP_Quit
		nEvent := AppEvent( @mp1, @mp2, @oXbp )
		oXbp:handleEvent( nEvent, mp1, mp2 )
	ENDDO 
RETURN
32
While navigating the Down/Top faces, I am not able to rotate it. Is it possible (ensure always front face)
#include "AppEvent.ch"
#include "ActiveX.ch"

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

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

	oTreeCube := XbpActiveXControl():new( oForm:drawingArea )
	oTreeCube:CLSID  := "Exontrol.TreeCube.1" /*{13A5B44B-DBB7-42F2-AE2B-943A6CF6C8B9}*/
	oTreeCube:create(,, {10,60},{610,370} )

		oTreeCube:EnsureVisibleFace(5/*exDownFace*/,.F.)
		oTreeCube:AlwaysEnsureVisibleFace := 17/*exAlwaysVisibleFrontFace+exFitToEnsureFace*/

	oForm:Show()
	DO WHILE nEvent != xbeP_Quit
		nEvent := AppEvent( @mp1, @mp2, @oXbp )
		oXbp:handleEvent( nEvent, mp1, mp2 )
	ENDDO 
RETURN
31
How can I show a single month only

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

PROCEDURE Main
 	LOCAL oForm
	LOCAL nEvent := 0, mp1 := NIL, mp2 := NIL, oXbp := NIL
	LOCAL oFace
	LOCAL oFaceCalendar
	LOCAL oTreeCube

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

	oTreeCube := XbpActiveXControl():new( oForm:drawingArea )
	oTreeCube:CLSID  := "Exontrol.TreeCube.1" /*{13A5B44B-DBB7-42F2-AE2B-943A6CF6C8B9}*/
	oTreeCube:create(,, {10,60},{610,370} )

		oFace := oTreeCube:FrontFace()
			oFace:Type := 2/*exFaceCalendar*/
			oFaceCalendar := oFace:FaceCalendar()
				oFaceCalendar:Date := "01/01/2001"
				oFaceCalendar:SelDate := oFaceCalendar:Date()
				oFaceCalendar:MinDate := "01/01/2001"
				oFaceCalendar:MaxDate := "01/31/2001"
				oFaceCalendar:FirstWeekDay := 1/*exMonday*/
				oFaceCalendar:ShowWeeks := .F.
				oFaceCalendar:ShowNonMonthDays := .F.
				oFaceCalendar:ShowTodayButton := .F.
				oFaceCalendar:MaxMonthX := oFaceCalendar:MinMonthX()
				oFaceCalendar:MaxMonthY := oFaceCalendar:MinMonthY()

	oForm:Show()
	DO WHILE nEvent != xbeP_Quit
		nEvent := AppEvent( @mp1, @mp2, @oXbp )
		oXbp:handleEvent( nEvent, mp1, mp2 )
	ENDDO 
RETURN
30
How can I show date calendar

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

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

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

	oTreeCube := XbpActiveXControl():new( oForm:drawingArea )
	oTreeCube:CLSID  := "Exontrol.TreeCube.1" /*{13A5B44B-DBB7-42F2-AE2B-943A6CF6C8B9}*/
	oTreeCube:create(,, {10,60},{610,370} )

		oFace := oTreeCube:FrontFace()
			oFace:Type := 2/*exFaceCalendar*/
			oFace:FaceCalendar():ShowNonMonthDays := .F.

	oForm:Show()
	DO WHILE nEvent != xbeP_Quit
		nEvent := AppEvent( @mp1, @mp2, @oXbp )
		oXbp:handleEvent( nEvent, mp1, mp2 )
	ENDDO 
RETURN
29
How can I prevent dbl click to ensure the clicked face is visible
#include "AppEvent.ch"
#include "ActiveX.ch"

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

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

	oTreeCube := XbpActiveXControl():new( oForm:drawingArea )
	oTreeCube:CLSID  := "Exontrol.TreeCube.1" /*{13A5B44B-DBB7-42F2-AE2B-943A6CF6C8B9}*/
	oTreeCube:create(,, {10,60},{610,370} )

		oTreeCube:EnsureVisibleFaceOnDblClick := .F.

	oForm:Show()
	DO WHILE nEvent != xbeP_Quit
		nEvent := AppEvent( @mp1, @mp2, @oXbp )
		oXbp:handleEvent( nEvent, mp1, mp2 )
	ENDDO 
RETURN
28
How can I put a picture into the center of the texture but behind the control's face

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

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

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

	oTreeCube := XbpActiveXControl():new( oForm:drawingArea )
	oTreeCube:CLSID  := "Exontrol.TreeCube.1" /*{13A5B44B-DBB7-42F2-AE2B-943A6CF6C8B9}*/
	oTreeCube:create(,, {10,60},{610,370} )

		oTreeCube:BeginUpdate()
		oTreeCube:SetProperty("HTMLPicture","logo","c:\exontrol\images\zipdisk.gif")
		oFace := oTreeCube:FrontFace()
			oFace:Type := 2/*exFaceCalendar*/
			oFace:FaceCalendar():ShowTodayButton := .F.
			oFace:SetProperty("ExtraTitle","extra",0/*exTitleFaceCaption*/,"<img>logo</img>")
			oFace:SetProperty("ExtraTitle","extra",3/*exTitleFaceAnchor*/,0)
			oFace:SetProperty("ExtraTitle","extra",4/*exTitleFaceHTMLRotate*/,0)
			oFace:SetProperty("ExtraTitle","extra",4/*exTitleFaceHTMLRotate*/,0)
			oFace:SetProperty("ExtraTitle","extra",5/*exTitleFaceLeft*/,"(width-twidth)/2")
			oFace:SetProperty("ExtraTitle","extra",6/*exTitleFaceTop*/,"(height-theight)/2")
			oFace:SetProperty("ExtraTitle","extra",7/*exTitleFaceWidth*/,"twidth")
			oFace:SetProperty("ExtraTitle","extra",8/*exTitleFaceHeight*/,"theight")
			oFace:SetProperty("ExtraTitle","extra",9/*exTitleFaceVisible*/,1)
		oTreeCube:FrontFace():FaceCalendar():SetProperty("ForeColor",AutomationTranslateColor( GraMakeRGBColor  ( { 255,0,0 } )  , .F. ))
		oTreeCube:EndUpdate()

	oForm:Show()
	DO WHILE nEvent != xbeP_Quit
		nEvent := AppEvent( @mp1, @mp2, @oXbp )
		oXbp:handleEvent( nEvent, mp1, mp2 )
	ENDDO 
RETURN
27
How do I put my logo on the right-bottom side of the face (method 2), while I using the face

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

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

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

	oTreeCube := XbpActiveXControl():new( oForm:drawingArea )
	oTreeCube:CLSID  := "Exontrol.TreeCube.1" /*{13A5B44B-DBB7-42F2-AE2B-943A6CF6C8B9}*/
	oTreeCube:create(,, {10,60},{610,370} )

		oTreeCube:BeginUpdate()
		oTreeCube:SetProperty("HTMLPicture","logo","c:\exontrol\images\zipdisk.gif")
		oFace := oTreeCube:FrontFace()
			oFace:Type := 2/*exFaceCalendar*/
			oFace:FaceCalendar():ShowTodayButton := .F.
			oFace:SetProperty("ExtraTitle","extra",0/*exTitleFaceCaption*/,"<r><img>logo</img>")
			oFace:SetProperty("ExtraTitle","extra",3/*exTitleFaceAnchor*/,2)
			oFace:SetProperty("ExtraTitle","extra",4/*exTitleFaceHTMLRotate*/,0)
		oTreeCube:EndUpdate()

	oForm:Show()
	DO WHILE nEvent != xbeP_Quit
		nEvent := AppEvent( @mp1, @mp2, @oXbp )
		oXbp:handleEvent( nEvent, mp1, mp2 )
	ENDDO 
RETURN
26
Is it possible to show two or more titles/extra titles

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

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

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

	oTreeCube := XbpActiveXControl():new( oForm:drawingArea )
	oTreeCube:CLSID  := "Exontrol.TreeCube.1" /*{13A5B44B-DBB7-42F2-AE2B-943A6CF6C8B9}*/
	oTreeCube:create(,, {10,60},{610,370} )

		oTreeCube:BeginUpdate()
		oFace := oTreeCube:FrontFace()
			oFace:Type := 2/*exFaceCalendar*/
			oFace:FaceCalendar():ShowTodayButton := .F.
			oFace:SetProperty("Title",0/*exTitleFaceCaption*/,"<font ;18><c><fgcolor=0000FF>This is the title")
			oFace:SetProperty("ExtraTitle","extra",0/*exTitleFaceCaption*/,"<font ;18><c><fgcolor=FF0000>This is the extra title")
			oFace:SetProperty("ExtraTitle","extra",3/*exTitleFaceAnchor*/,2)
		oTreeCube:EndUpdate()

	oForm:Show()
	DO WHILE nEvent != xbeP_Quit
		nEvent := AppEvent( @mp1, @mp2, @oXbp )
		oXbp:handleEvent( nEvent, mp1, mp2 )
	ENDDO 
RETURN
25
How can I display the title at the left side of the face

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

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

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

	oTreeCube := XbpActiveXControl():new( oForm:drawingArea )
	oTreeCube:CLSID  := "Exontrol.TreeCube.1" /*{13A5B44B-DBB7-42F2-AE2B-943A6CF6C8B9}*/
	oTreeCube:create(,, {10,60},{610,370} )

		oTreeCube:BeginUpdate()
		oFace := oTreeCube:FrontFace()
			oFace:SetProperty("Title",0/*exTitleFaceCaption*/,"<font ;18><c>This is the title")
			oFace:Type := 2/*exFaceCalendar*/
			oFace:FaceCalendar():ShowTodayButton := .F.
			oFace:SetProperty("Title",3/*exTitleFaceAnchor*/,4)
		oTreeCube:EndUpdate()

	oForm:Show()
	DO WHILE nEvent != xbeP_Quit
		nEvent := AppEvent( @mp1, @mp2, @oXbp )
		oXbp:handleEvent( nEvent, mp1, mp2 )
	ENDDO 
RETURN
24
How can I display the title at the bottom side of the face

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

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

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

	oTreeCube := XbpActiveXControl():new( oForm:drawingArea )
	oTreeCube:CLSID  := "Exontrol.TreeCube.1" /*{13A5B44B-DBB7-42F2-AE2B-943A6CF6C8B9}*/
	oTreeCube:create(,, {10,60},{610,370} )

		oTreeCube:BeginUpdate()
		oFace := oTreeCube:FrontFace()
			oFace:SetProperty("Title",0/*exTitleFaceCaption*/,"<font ;18><c>This is the title")
			oFace:Type := 2/*exFaceCalendar*/
			oFace:FaceCalendar():ShowTodayButton := .F.
			oFace:SetProperty("Title",3/*exTitleFaceAnchor*/,2)
			oFace:SetProperty("Title",4/*exTitleFaceHTMLRotate*/,0)
		oTreeCube:EndUpdate()

	oForm:Show()
	DO WHILE nEvent != xbeP_Quit
		nEvent := AppEvent( @mp1, @mp2, @oXbp )
		oXbp:handleEvent( nEvent, mp1, mp2 )
	ENDDO 
RETURN
23
Can I display the title to a different position

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

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

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

	oTreeCube := XbpActiveXControl():new( oForm:drawingArea )
	oTreeCube:CLSID  := "Exontrol.TreeCube.1" /*{13A5B44B-DBB7-42F2-AE2B-943A6CF6C8B9}*/
	oTreeCube:create(,, {10,60},{610,370} )

		oTreeCube:BeginUpdate()
		oFace := oTreeCube:FrontFace()
			oFace:SetProperty("Title",0/*exTitleFaceCaption*/,"<font ;18><c><bgcolor=FFFFFF>This is the title")
			oFace:Type := 2/*exFaceCalendar*/
			oFace:SetProperty("Title",9/*exTitleFaceVisible*/,-1)
			oFace:SetProperty("Title",6/*exTitleFaceTop*/,"(height-theight)/2")
		oTreeCube:EndUpdate()

	oForm:Show()
	DO WHILE nEvent != xbeP_Quit
		nEvent := AppEvent( @mp1, @mp2, @oXbp )
		oXbp:handleEvent( nEvent, mp1, mp2 )
	ENDDO 
RETURN
22
How can I display a title for a face

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

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

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

	oTreeCube := XbpActiveXControl():new( oForm:drawingArea )
	oTreeCube:CLSID  := "Exontrol.TreeCube.1" /*{13A5B44B-DBB7-42F2-AE2B-943A6CF6C8B9}*/
	oTreeCube:create(,, {10,60},{610,370} )

		oTreeCube:BeginUpdate()
		oFace := oTreeCube:FrontFace()
			oFace:SetProperty("Title",0/*exTitleFaceCaption*/,"<font ;18><c>This is the title")
			oFace:Type := 2/*exFaceCalendar*/
		oTreeCube:EndUpdate()

	oForm:Show()
	DO WHILE nEvent != xbeP_Quit
		nEvent := AppEvent( @mp1, @mp2, @oXbp )
		oXbp:handleEvent( nEvent, mp1, mp2 )
	ENDDO 
RETURN
21
Can I put the picture at specified position

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

PROCEDURE Main
 	LOCAL oForm
	LOCAL nEvent := 0, mp1 := NIL, mp2 := NIL, oXbp := NIL
	LOCAL oFace
	LOCAL oFacePicture
	LOCAL oTreeCube

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

	oTreeCube := XbpActiveXControl():new( oForm:drawingArea )
	oTreeCube:CLSID  := "Exontrol.TreeCube.1" /*{13A5B44B-DBB7-42F2-AE2B-943A6CF6C8B9}*/
	oTreeCube:create(,, {10,60},{610,370} )

		oTreeCube:IdentifyFace := 7/*exIdentifyFaceFrame+exIdentifyFaceName+exIdentifyFaceCaption*/
		oFace := oTreeCube:FrontFace()
			oFace:Type := 3/*exFacePicture*/
			oFacePicture := oFace:FacePicture()
				oFacePicture:Picture := oTreeCube:ExecuteTemplate("loadpicture(`c:\exontrol\images\zipdisk.gif`)")
				oFacePicture:PictureDisplay := 48/*Tile*/
				oFacePicture:Width := "2 * pwidth"
				oFacePicture:Height := "2 * pheight"
				oFacePicture:Top := "122"
				oFacePicture:Left := "46"

	oForm:Show()
	DO WHILE nEvent != xbeP_Quit
		nEvent := AppEvent( @mp1, @mp2, @oXbp )
		oXbp:handleEvent( nEvent, mp1, mp2 )
	ENDDO 
RETURN
20
How do I put my logo on the right-bottom side of the face (method 1)

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

PROCEDURE Main
 	LOCAL oForm
	LOCAL nEvent := 0, mp1 := NIL, mp2 := NIL, oXbp := NIL
	LOCAL oFace
	LOCAL oFacePicture
	LOCAL oTreeCube

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

	oTreeCube := XbpActiveXControl():new( oForm:drawingArea )
	oTreeCube:CLSID  := "Exontrol.TreeCube.1" /*{13A5B44B-DBB7-42F2-AE2B-943A6CF6C8B9}*/
	oTreeCube:create(,, {10,60},{610,370} )

		oTreeCube:IdentifyFace := 7/*exIdentifyFaceFrame+exIdentifyFaceName+exIdentifyFaceCaption*/
		oFace := oTreeCube:FrontFace()
			oFace:Type := 3/*exFacePicture*/
			oFacePicture := oFace:FacePicture()
				oFacePicture:Picture := oTreeCube:ExecuteTemplate("loadpicture(`c:\exontrol\images\zipdisk.gif`)")
				oFacePicture:PictureDisplay := 34/*LowerRight*/
				oFacePicture:Width := "width"
				oFacePicture:Height := "height"
				oFacePicture:Top := "0"
				oFacePicture:Left := "0"

	oForm:Show()
	DO WHILE nEvent != xbeP_Quit
		nEvent := AppEvent( @mp1, @mp2, @oXbp )
		oXbp:handleEvent( nEvent, mp1, mp2 )
	ENDDO 
RETURN
19
Can I use any picture on the background's faces

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

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

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

	oTreeCube := XbpActiveXControl():new( oForm:drawingArea )
	oTreeCube:CLSID  := "Exontrol.TreeCube.1" /*{13A5B44B-DBB7-42F2-AE2B-943A6CF6C8B9}*/
	oTreeCube:create(,, {10,60},{610,370} )

		oTreeCube:BeginUpdate()
		oTreeCube:TexturePicturePath := ""
		oTreeCube:Face(0/*exFrontFace*/):Picture := oTreeCube:ExecuteTemplate("loadpicture(`c:\exontrol\images\zipdisk.gif`)")
		oTreeCube:Face(1/*exBottomFace*/):Picture := oTreeCube:ExecuteTemplate("loadpicture(`c:\exontrol\images\auction.gif`)")
		oTreeCube:Face(2/*exRightFace*/):Picture := oTreeCube:ExecuteTemplate("loadpicture(`c:\exontrol\images\colorize.gif`)")
		oTreeCube:Face(3/*exLeftFace*/):Picture := oTreeCube:ExecuteTemplate("loadpicture(`c:\exontrol\images\colorize.gif`)")
		oTreeCube:Face(4/*exTopFace*/):Picture := oTreeCube:ExecuteTemplate("loadpicture(`c:\exontrol\images\auction.gif`)")
		oTreeCube:Face(5/*exDownFace*/):Picture := oTreeCube:ExecuteTemplate("loadpicture(`c:\exontrol\images\zipdisk.gif`)")
		oTreeCube:AlwaysEnsureVisibleFace := 0/*exDisableEnsureVisibleFace*/
		oTreeCube:EndUpdate()

	oForm:Show()
	DO WHILE nEvent != xbeP_Quit
		nEvent := AppEvent( @mp1, @mp2, @oXbp )
		oXbp:handleEvent( nEvent, mp1, mp2 )
	ENDDO 
RETURN
18
Is it possible to show the cube's texture more transparent, so the faces are more visible

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

PROCEDURE Main
 	LOCAL oForm
	LOCAL nEvent := 0, mp1 := NIL, mp2 := NIL, oXbp := NIL
	LOCAL oFace,oFace1,oFace2,oFace3
	LOCAL oFaceCalendar,oFaceCalendar1,oFaceCalendar2,oFaceCalendar3
	LOCAL oTreeCube

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

	oTreeCube := XbpActiveXControl():new( oForm:drawingArea )
	oTreeCube:CLSID  := "Exontrol.TreeCube.1" /*{13A5B44B-DBB7-42F2-AE2B-943A6CF6C8B9}*/
	oTreeCube:create(,, {10,60},{610,370} )

		oTreeCube:BeginUpdate()
		oTreeCube:Transparent := 80
		oTreeCube:TexturePicturePath := "C:\Program Files\Exontrol\ExTexture\Sample\Texture\VW"
		oTreeCube:AlwaysEnsureVisibleFace := 0/*exDisableEnsureVisibleFace*/
		oTreeCube:IdentifyFace := 4/*exIdentifyFaceFrame*/
		oFace := oTreeCube:TopFace()
			oFace:Type := 2/*exFaceCalendar*/
			oFaceCalendar := oFace:FaceCalendar()
				oFaceCalendar:Date := "02/01/2016"
				oFaceCalendar:MaxMonthX := 1
				oFaceCalendar:MaxMonthY := 1
		oFace1 := oTreeCube:LeftFace()
			oFace1:Type := 2/*exFaceCalendar*/
			oFaceCalendar1 := oFace1:FaceCalendar()
				oFaceCalendar1:Date := "03/01/2016"
				oFaceCalendar1:MaxMonthX := 1
				oFaceCalendar1:MaxMonthY := 1
		oFace2 := oTreeCube:FrontFace()
			oFace2:Type := 2/*exFaceCalendar*/
			oFaceCalendar2 := oFace2:FaceCalendar()
				oFaceCalendar2:Date := "04/01/2016"
				oFaceCalendar2:MaxMonthX := 1
				oFaceCalendar2:MaxMonthY := 1
		oFace3 := oTreeCube:RightFace()
			oFace3:Type := 2/*exFaceCalendar*/
			oFaceCalendar3 := oFace3:FaceCalendar()
				oFaceCalendar3:Date := "05/01/2016"
				oFaceCalendar3:MaxMonthX := 1
				oFaceCalendar3:MaxMonthY := 1
		oTreeCube:ShowAs := 0/*exFishEye*/
		oTreeCube:AlwaysEnsureVisibleFace := 0/*exDisableEnsureVisibleFace*/
		oTreeCube:IdentifyFace := 4/*exIdentifyFaceFrame*/
		oTreeCube:EndUpdate()

	oForm:Show()
	DO WHILE nEvent != xbeP_Quit
		nEvent := AppEvent( @mp1, @mp2, @oXbp )
		oXbp:handleEvent( nEvent, mp1, mp2 )
	ENDDO 
RETURN
17
How can I load a different texture on the cube

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

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

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

	oTreeCube := XbpActiveXControl():new( oForm:drawingArea )
	oTreeCube:CLSID  := "Exontrol.TreeCube.1" /*{13A5B44B-DBB7-42F2-AE2B-943A6CF6C8B9}*/
	oTreeCube:create(,, {10,60},{610,370} )

		oTreeCube:TexturePicturePath := "C:\Program Files\Exontrol\ExTexture\Sample\Texture\VW"

	oForm:Show()
	DO WHILE nEvent != xbeP_Quit
		nEvent := AppEvent( @mp1, @mp2, @oXbp )
		oXbp:handleEvent( nEvent, mp1, mp2 )
	ENDDO 
RETURN
16
How can I show no texture/picture on all faces

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

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

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

	oTreeCube := XbpActiveXControl():new( oForm:drawingArea )
	oTreeCube:CLSID  := "Exontrol.TreeCube.1" /*{13A5B44B-DBB7-42F2-AE2B-943A6CF6C8B9}*/
	oTreeCube:create(,, {10,60},{610,370} )

		oTreeCube:TexturePicturePath := ""
		oTreeCube:IdentifyFace := 7/*exIdentifyFaceFrame+exIdentifyFaceName+exIdentifyFaceCaption*/
		oTreeCube:IdentifyFaceCaption := "<sha ;;0><fgcolor=000000>Face <%index%></font> <%name%>"

	oForm:Show()
	DO WHILE nEvent != xbeP_Quit
		nEvent := AppEvent( @mp1, @mp2, @oXbp )
		oXbp:handleEvent( nEvent, mp1, mp2 )
	ENDDO 
RETURN
15
Fish-Eye Rectangular

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

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

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

	oTreeCube := XbpActiveXControl():new( oForm:drawingArea )
	oTreeCube:CLSID  := "Exontrol.TreeCube.1" /*{13A5B44B-DBB7-42F2-AE2B-943A6CF6C8B9}*/
	oTreeCube:create(,, {10,60},{610,370} )

		oTreeCube:BeginUpdate()
		oTreeCube:ShowAs := 0/*exFishEye*/
		oTreeCube:Internals := "zoommin=1;zoomdefault=1;zoommax=1;zoomdivsmall=256;zoomdivlarge=48;fisheyepersp=4"
		oTreeCube:IdentifyFace := 4/*exIdentifyFaceFrame*/
		oTreeCube:TopFace():Type := 2/*exFaceCalendar*/
		oTreeCube:LeftFace():Type := 2/*exFaceCalendar*/
		oTreeCube:FrontFace():Type := 2/*exFaceCalendar*/
		oTreeCube:RightFace():Type := 2/*exFaceCalendar*/
		oTreeCube:EndUpdate()

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

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

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

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

	oTreeCube := XbpActiveXControl():new( oForm:drawingArea )
	oTreeCube:CLSID  := "Exontrol.TreeCube.1" /*{13A5B44B-DBB7-42F2-AE2B-943A6CF6C8B9}*/
	oTreeCube:create(,, {10,60},{610,370} )

		oTreeCube:BeginUpdate()
		oTreeCube:ShowAs := 1/*exOrthographic*/
		oTreeCube:AlwaysEnsureVisibleFace := 0/*exDisableEnsureVisibleFace*/
		oTreeCube:IdentifyFace := 4/*exIdentifyFaceFrame*/
		oTreeCube:TopFace():Type := 2/*exFaceCalendar*/
		oTreeCube:LeftFace():Type := 2/*exFaceCalendar*/
		oTreeCube:FrontFace():Type := 2/*exFaceCalendar*/
		oTreeCube:RightFace():Type := 2/*exFaceCalendar*/
		oTreeCube:RotX := 0.748933
		oTreeCube:RotY := 0.617099
		oTreeCube:Zoom := 1
		oTreeCube:EndUpdate()

	oForm:Show()
	DO WHILE nEvent != xbeP_Quit
		nEvent := AppEvent( @mp1, @mp2, @oXbp )
		oXbp:handleEvent( nEvent, mp1, mp2 )
	ENDDO 
RETURN
13
Fish-Eye Default

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

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

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

	oTreeCube := XbpActiveXControl():new( oForm:drawingArea )
	oTreeCube:CLSID  := "Exontrol.TreeCube.1" /*{13A5B44B-DBB7-42F2-AE2B-943A6CF6C8B9}*/
	oTreeCube:create(,, {10,60},{610,370} )

		oTreeCube:BeginUpdate()
		oTreeCube:ShowAs := 0/*exFishEye*/
		oTreeCube:AlwaysEnsureVisibleFace := 0/*exDisableEnsureVisibleFace*/
		oTreeCube:IdentifyFace := 4/*exIdentifyFaceFrame*/
		oTreeCube:TopFace():Type := 2/*exFaceCalendar*/
		oTreeCube:LeftFace():Type := 2/*exFaceCalendar*/
		oTreeCube:FrontFace():Type := 2/*exFaceCalendar*/
		oTreeCube:RightFace():Type := 2/*exFaceCalendar*/
		oTreeCube:RotX := 0
		oTreeCube:RotY := 0.8
		oTreeCube:Zoom := 1
		oTreeCube:EndUpdate()

	oForm:Show()
	DO WHILE nEvent != xbeP_Quit
		nEvent := AppEvent( @mp1, @mp2, @oXbp )
		oXbp:handleEvent( nEvent, mp1, mp2 )
	ENDDO 
RETURN
12
I know the user can drag the cube to any position. The question is how can I restore the layout

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

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

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

	oTreeCube := XbpActiveXControl():new( oForm:drawingArea )
	oTreeCube:CLSID  := "Exontrol.TreeCube.1" /*{13A5B44B-DBB7-42F2-AE2B-943A6CF6C8B9}*/
	oTreeCube:create(,, {10,60},{610,370} )

		oTreeCube:IdentifyFace := 7/*exIdentifyFaceFrame+exIdentifyFaceName+exIdentifyFaceCaption*/
		oTreeCube:RotX := 0.25
		oTreeCube:RotY := 0.75
		oTreeCube:Zoom := 1

	oForm:Show()
	DO WHILE nEvent != xbeP_Quit
		nEvent := AppEvent( @mp1, @mp2, @oXbp )
		oXbp:handleEvent( nEvent, mp1, mp2 )
	ENDDO 
RETURN
11
How do I put my logo on the right-bottom side of the control

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

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

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

	oTreeCube := XbpActiveXControl():new( oForm:drawingArea )
	oTreeCube:CLSID  := "Exontrol.TreeCube.1" /*{13A5B44B-DBB7-42F2-AE2B-943A6CF6C8B9}*/
	oTreeCube:create(,, {10,60},{610,370} )

		oTreeCube:Picture := oTreeCube:ExecuteTemplate("loadpicture(`c:\exontrol\images\zipdisk.gif`)")

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