exsurface - sample code

How can I programmatically add a child element, or create a tree/hierarchy?

VBA (MS Access, Excell...)

With Surface1
	With .Elements
		.Add("Root").ID = "rootID"
		.Insert "Child 1","rootID"
		.Insert("Child 2","rootID").ID = "childID"
		.Insert "Child 3","rootID"
		.Insert "Sub-Child 1.2","childID"
		.Insert "Sub-Child 2.2","childID"
	End With
End With

VB6

With Surface1
	With .Elements
		.Add("Root").ID = "rootID"
		.Insert "Child 1","rootID"
		.Insert("Child 2","rootID").ID = "childID"
		.Insert "Child 3","rootID"
		.Insert "Sub-Child 1.2","childID"
		.Insert "Sub-Child 2.2","childID"
	End With
End With

VB.NET

With Exsurface1
	With .Elements
		.Add("Root").ID = "rootID"
		.Insert("Child 1","rootID")
		.Insert("Child 2","rootID").ID = "childID"
		.Insert("Child 3","rootID")
		.Insert("Sub-Child 1.2","childID")
		.Insert("Sub-Child 2.2","childID")
	End With
End With

VB.NET for /COM

With AxSurface1
	With .Elements
		.Add("Root").ID = "rootID"
		.Insert("Child 1","rootID")
		.Insert("Child 2","rootID").ID = "childID"
		.Insert("Child 3","rootID")
		.Insert("Sub-Child 1.2","childID")
		.Insert("Sub-Child 2.2","childID")
	End With
End With

C++

/*
	Copy and paste the following directives to your header file as
	it defines the namespace 'EXSURFACELib' for the library: 'ExSurface 1.0 Control Library'

	#import <ExSurface.dll>
	using namespace EXSURFACELib;
*/
EXSURFACELib::ISurfacePtr spSurface1 = GetDlgItem(IDC_SURFACE1)->GetControlUnknown();
EXSURFACELib::IElementsPtr var_Elements = spSurface1->GetElements();
	var_Elements->Add("Root",vtMissing,vtMissing)->PutID("rootID");
	var_Elements->Insert("Child 1","rootID",vtMissing);
	var_Elements->Insert("Child 2","rootID",vtMissing)->PutID("childID");
	var_Elements->Insert("Child 3","rootID",vtMissing);
	var_Elements->Insert("Sub-Child 1.2","childID",vtMissing);
	var_Elements->Insert("Sub-Child 2.2","childID",vtMissing);

C++ Builder

Exsurfacelib_tlb::IElementsPtr var_Elements = Surface1->Elements;
	var_Elements->Add(TVariant("Root"),TNoParam(),TNoParam())->set_ID(TVariant("rootID"));
	var_Elements->Insert(TVariant("Child 1"),TVariant("rootID"),TNoParam());
	var_Elements->Insert(TVariant("Child 2"),TVariant("rootID"),TNoParam())->set_ID(TVariant("childID"));
	var_Elements->Insert(TVariant("Child 3"),TVariant("rootID"),TNoParam());
	var_Elements->Insert(TVariant("Sub-Child 1.2"),TVariant("childID"),TNoParam());
	var_Elements->Insert(TVariant("Sub-Child 2.2"),TVariant("childID"),TNoParam());

C#

exontrol.EXSURFACELib.Elements var_Elements = exsurface1.Elements;
	var_Elements.Add("Root",null,null).ID = "rootID";
	var_Elements.Insert("Child 1","rootID",null);
	var_Elements.Insert("Child 2","rootID",null).ID = "childID";
	var_Elements.Insert("Child 3","rootID",null);
	var_Elements.Insert("Sub-Child 1.2","childID",null);
	var_Elements.Insert("Sub-Child 2.2","childID",null);

JavaScript

<OBJECT classid="clsid:AC1DF7F4-0919-4364-8167-2F9B5155EA4B" id="Surface1"></OBJECT>

<SCRIPT LANGUAGE="JScript">
	var var_Elements = Surface1.Elements;
		var_Elements.Add("Root",null,null).ID = "rootID";
		var_Elements.Insert("Child 1","rootID",null);
		var_Elements.Insert("Child 2","rootID",null).ID = "childID";
		var_Elements.Insert("Child 3","rootID",null);
		var_Elements.Insert("Sub-Child 1.2","childID",null);
		var_Elements.Insert("Sub-Child 2.2","childID",null);
</SCRIPT>

C# for /COM

EXSURFACELib.Elements var_Elements = axSurface1.Elements;
	var_Elements.Add("Root",null,null).ID = "rootID";
	var_Elements.Insert("Child 1","rootID",null);
	var_Elements.Insert("Child 2","rootID",null).ID = "childID";
	var_Elements.Insert("Child 3","rootID",null);
	var_Elements.Insert("Sub-Child 1.2","childID",null);
	var_Elements.Insert("Sub-Child 2.2","childID",null);

X++ (Dynamics Ax 2009)

public void init()
{
	COM com_Element,com_Elements;
	anytype var_Element,var_Elements;
	;

	super();

	var_Elements = exsurface1.Elements(); com_Elements = var_Elements;
		var_Element = COM::createFromObject(com_Elements.Add("Root")); com_Element = var_Element;
		com_Element.ID("rootID");
		com_Elements.Insert("Child 1","rootID");
		var_Element = COM::createFromObject(com_Elements.Insert("Child 2","rootID")); com_Element = var_Element;
		com_Element.ID("childID");
		com_Elements.Insert("Child 3","rootID");
		com_Elements.Insert("Sub-Child 1.2","childID");
		com_Elements.Insert("Sub-Child 2.2","childID");
}

Delphi 8 (.NET only)

with AxSurface1 do
begin
	with Elements do
	begin
		Add('Root',Nil,Nil).ID := 'rootID';
		Insert('Child 1','rootID',Nil);
		Insert('Child 2','rootID',Nil).ID := 'childID';
		Insert('Child 3','rootID',Nil);
		Insert('Sub-Child 1.2','childID',Nil);
		Insert('Sub-Child 2.2','childID',Nil);
	end;
end

Delphi (standard)

with Surface1 do
begin
	with Elements do
	begin
		Add('Root',Null,Null).ID := 'rootID';
		Insert('Child 1','rootID',Null);
		Insert('Child 2','rootID',Null).ID := 'childID';
		Insert('Child 3','rootID',Null);
		Insert('Sub-Child 1.2','childID',Null);
		Insert('Sub-Child 2.2','childID',Null);
	end;
end

VFP

with thisform.Surface1
	with .Elements
		.Add("Root").ID = "rootID"
		.Insert("Child 1","rootID")
		.Insert("Child 2","rootID").ID = "childID"
		.Insert("Child 3","rootID")
		.Insert("Sub-Child 1.2","childID")
		.Insert("Sub-Child 2.2","childID")
	endwith
endwith

dBASE Plus

local oSurface,var_Element,var_Element1,var_Elements

oSurface = form.Activex1.nativeObject
var_Elements = oSurface.Elements
	// var_Elements.Add("Root").ID = "rootID"
	var_Element = var_Elements.Add("Root")
	with (oSurface)
		TemplateDef = [Dim var_Element]
		TemplateDef = var_Element
		Template = [var_Element.ID = "rootID"]
	endwith
	var_Elements.Insert("Child 1","rootID")
	// var_Elements.Insert("Child 2","rootID").ID = "childID"
	var_Element1 = var_Elements.Insert("Child 2","rootID")
	with (oSurface)
		TemplateDef = [Dim var_Element1]
		TemplateDef = var_Element1
		Template = [var_Element1.ID = "childID"]
	endwith
	var_Elements.Insert("Child 3","rootID")
	var_Elements.Insert("Sub-Child 1.2","childID")
	var_Elements.Insert("Sub-Child 2.2","childID")

XBasic (Alpha Five)

Dim oSurface as P
Dim var_Element as P
Dim var_Element1 as P
Dim var_Elements as P

oSurface = topparent:CONTROL_ACTIVEX1.activex
var_Elements = oSurface.Elements
	' var_Elements.Add("Root").ID = "rootID"
	var_Element = var_Elements.Add("Root")
	oSurface.TemplateDef = "Dim var_Element"
	oSurface.TemplateDef = var_Element
	oSurface.Template = "var_Element.ID = \"rootID\""

	var_Elements.Insert("Child 1","rootID")
	' var_Elements.Insert("Child 2","rootID").ID = "childID"
	var_Element1 = var_Elements.Insert("Child 2","rootID")
	oSurface.TemplateDef = "Dim var_Element1"
	oSurface.TemplateDef = var_Element1
	oSurface.Template = "var_Element1.ID = \"childID\""

	var_Elements.Insert("Child 3","rootID")
	var_Elements.Insert("Sub-Child 1.2","childID")
	var_Elements.Insert("Sub-Child 2.2","childID")

Visual Objects

local var_Elements as IElements

var_Elements := oDCOCX_Exontrol1:Elements
	var_Elements:Add("Root",nil,nil):ID := "rootID"
	var_Elements:Insert("Child 1","rootID",nil)
	var_Elements:Insert("Child 2","rootID",nil):ID := "childID"
	var_Elements:Insert("Child 3","rootID",nil)
	var_Elements:Insert("Sub-Child 1.2","childID",nil)
	var_Elements:Insert("Sub-Child 2.2","childID",nil)

PowerBuilder

OleObject oSurface,var_Elements

oSurface = ole_1.Object
var_Elements = oSurface.Elements
	var_Elements.Add("Root").ID = "rootID"
	var_Elements.Insert("Child 1","rootID")
	var_Elements.Insert("Child 2","rootID").ID = "childID"
	var_Elements.Insert("Child 3","rootID")
	var_Elements.Insert("Sub-Child 1.2","childID")
	var_Elements.Insert("Sub-Child 2.2","childID")

Visual DataFlex

Procedure OnCreate
	Forward Send OnCreate
	Variant voElements
	Get ComElements to voElements
	Handle hoElements
	Get Create (RefClass(cComElements)) to hoElements
	Set pvComObject of hoElements to voElements
		Variant voElement
		Get ComAdd of hoElements "Root" Nothing Nothing to voElement
		Handle hoElement
		Get Create (RefClass(cComElement)) to hoElement
		Set pvComObject of hoElement to voElement
			Set ComID of hoElement to "rootID"
		Send Destroy to hoElement
		Get ComInsert of hoElements "Child 1" "rootID" Nothing to Nothing
		Variant voElement1
		Get ComInsert of hoElements "Child 2" "rootID" Nothing to voElement1
		Handle hoElement1
		Get Create (RefClass(cComElement)) to hoElement1
		Set pvComObject of hoElement1 to voElement1
			Set ComID of hoElement1 to "childID"
		Send Destroy to hoElement1
		Get ComInsert of hoElements "Child 3" "rootID" Nothing to Nothing
		Get ComInsert of hoElements "Sub-Child 1.2" "childID" Nothing to Nothing
		Get ComInsert of hoElements "Sub-Child 2.2" "childID" Nothing to Nothing
	Send Destroy to hoElements
End_Procedure

XBase++

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

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

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

	oSurface := XbpActiveXControl():new( oForm:drawingArea )
	oSurface:CLSID  := "Exontrol.Surface.1" /*{AC1DF7F4-0919-4364-8167-2F9B5155EA4B}*/
	oSurface:create(,, {10,60},{610,370} )

		oElements := oSurface:Elements()
			oElements:Add("Root"):ID := "rootID"
			oElements:Insert("Child 1","rootID")
			oElements:Insert("Child 2","rootID"):ID := "childID"
			oElements:Insert("Child 3","rootID")
			oElements:Insert("Sub-Child 1.2","childID")
			oElements:Insert("Sub-Child 2.2","childID")

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