104
Fullfit the caption on the element's width

with SwimLane1 do
begin
	with Elements.Add('<solidline><b>Bank Account</b></solidline><br>+ owner: String <r><a 1;properties>+</a><br><solidline>+ balance: Currency = 0</so' + 
	'lidline><br>+ deposit(amount: Currency)<r><a 2;methods>+</a><br>+ withdraw(amount: Currency)',Null,Null) do
	begin
		CaptionSingleLine := EXSWIMLANELib_TLB.exCaptionBreakWrap;
		BackColor := $f8f8f8;
		AutoSize := False;
		Width := 194;
		Height := 76;
		CaptionAlign := EXSWIMLANELib_TLB.ContentAlignmentEnum($4);
	end;
end
103
Wrap the caption by <br> or "\r\n" sequence only

with SwimLane1 do
begin
	with Elements.Add('<solidline><b>Bank Account</b></solidline><br>+ owner: String <r><a 1;properties>+</a><br><solidline>+ balance: Currency = 0</so' + 
	'lidline><br>+ deposit(amount: Currency)<r><a 2;methods>+</a><br>+ withdraw(amount: Currency)',Null,Null) do
	begin
		CaptionSingleLine := EXSWIMLANELib_TLB.exCaptionBreakWrap;
		BackColor := $f8f8f8;
	end;
end
102
Display a custom tooltip
// MouseMove event - Occurs when the user moves the mouse.
procedure TForm1.SwimLane1MouseMove(ASender: TObject; Button : Smallint;Shift : Smallint;X : Integer;Y : Integer);
begin
	with SwimLane1 do
	begin
		ShowToolTip('new content','',Null,'+8','+8');
	end
end;


101
Shows the tooltip of the object moved relative to its default position
// MouseMove event - Occurs when the user moves the mouse.
procedure TForm1.SwimLane1MouseMove(ASender: TObject; Button : Smallint;Shift : Smallint;X : Integer;Y : Integer);
begin
	with SwimLane1 do
	begin
		ShowToolTip('<null>','<null>',Null,'+8','+8');
	end
end;

with SwimLane1 do
begin
	Elements.Add('Element with a Tooltip',Null,Null).ToolTip := 'This is a bit of text that should be displayed when cursor hovers the element.';
end
100
Add a pool to cover all visible-elements

with SwimLane1 do
begin
	BeginUpdate();
	AllowUndoRedo := True;
	with Elements do
	begin
		Add('Item <b>1',OleVariant(-64),OleVariant(-64));
		Add('Item <b>2',Null,Null);
	end;
	Links.Add(SwimLane1.Elements.Item[OleVariant(1)],SwimLane1.Elements.Item[OleVariant(2)],Null);
	Pools.Add(Null,Null,Null,Null).HeaderSize[EXSWIMLANELib_TLB.exHeaderLeft] := 24;
	EndUpdate();
end
99
How can I ensure that a specified pool fits the surface's visible area
with SwimLane1 do
begin
	with Pools do
	begin
		with Add(Null,Null,Null,Null).Pattern do
		begin
			Type := EXSWIMLANELib_TLB.exPatternBDiagonal;
			Color := $e0e0e0;
		end;
		Add(OleVariant(2000),Null,Null,Null).EnsureVisible();
	end;
end
98
No property for the pool can be saved/restored through Undo/Redo feature

with SwimLane1 do
begin
	AllowUndoRedo := True;
	with Pools.Add(OleVariant(-54),OleVariant(-47),OleVariant(244),OleVariant(112)) do
	begin
		l := StartUpdatePool;
		with Lane[EXSWIMLANELib_TLB.exLaneVertical] do
		begin
			Color := $f0f0f0;
			Children.Count := 2;
		end;
		EndUpdatePool(l);
	end;
end
97
Rename Undo/Redo commands into the control's toolbar

with SwimLane1 do
begin
	BeginUpdate();
	AllowUndoRedo := True;
	ToolBarFormat := '-1,100,102,101,|,103,104';
	ToolBarCaption[103] := 'Anuleaza <img>4</img>';
	ToolBarCaption[104] := '<img>5</img>Reface';
	ToolBarToolTip[103] := 'Anuleaza ultima actiune UI. Pentru a anula o actiune apasati Ctrl+Z.';
	ToolBarToolTip[104] := 'Inverseaza cea mai recenta operatie de anulare. Pentru a reface o actiune apasati Ctrl+Y.';
	Pools.Add(OleVariant(-154),OleVariant(-82),OleVariant(244),OleVariant(122));
	with Elements do
	begin
		Add('Item <b>1',OleVariant(-64),OleVariant(-64));
		Add('Item <b>2',Null,Null);
	end;
	Links.Add(SwimLane1.Elements.Item[OleVariant(1)],SwimLane1.Elements.Item[OleVariant(2)],Null);
	EndUpdate();
end
96
Add Undo/Redo commands to control's toolbar

with SwimLane1 do
begin
	BeginUpdate();
	AllowUndoRedo := True;
	ToolBarFormat := '-1,100,102,101,|,103,104';
	Pools.Add(OleVariant(-154),OleVariant(-82),OleVariant(244),OleVariant(122));
	with Elements do
	begin
		Add('Item <b>1',OleVariant(-64),OleVariant(-64));
		Add('Item <b>2',Null,Null);
	end;
	Links.Add(SwimLane1.Elements.Item[OleVariant(1)],SwimLane1.Elements.Item[OleVariant(2)],Null);
	EndUpdate();
end
95
Clear Undo/Redo queue (method 2)

with SwimLane1 do
begin
	BeginUpdate();
	AllowUndoRedo := True;
	Pools.Add(OleVariant(-154),OleVariant(-82),OleVariant(244),OleVariant(122));
	with Elements do
	begin
		Add('Item <b>1',OleVariant(-64),OleVariant(-64));
		Add('Item <b>2',Null,Null);
	end;
	Links.Add(SwimLane1.Elements.Item[OleVariant(1)],SwimLane1.Elements.Item[OleVariant(2)],Null);
	c := UndoRedoQueueLength;
	UndoRedoQueueLength := 0;
	UndoRedoQueueLength := c;
	OutputDebugString( UndoListAction[Null,Null] );
	EndUpdate();
end
94
Clear Undo/Redo queue (method 1)

with SwimLane1 do
begin
	BeginUpdate();
	AllowUndoRedo := True;
	Pools.Add(OleVariant(-154),OleVariant(-82),OleVariant(244),OleVariant(122));
	with Elements do
	begin
		Add('Item <b>1',OleVariant(-64),OleVariant(-64));
		Add('Item <b>2',Null,Null);
	end;
	Links.Add(SwimLane1.Elements.Item[OleVariant(1)],SwimLane1.Elements.Item[OleVariant(2)],Null);
	AllowUndoRedo := True;
	OutputDebugString( UndoListAction[Null,Null] );
	EndUpdate();
end
93
Removes Redo operations

with SwimLane1 do
begin
	BeginUpdate();
	AllowUndoRedo := True;
	Pools.Add(OleVariant(-154),OleVariant(-82),OleVariant(244),OleVariant(122));
	with Elements do
	begin
		Add('Item <b>1',OleVariant(-64),OleVariant(-64));
		Add('Item <b>2',Null,Null);
	end;
	Links.Add(SwimLane1.Elements.Item[OleVariant(1)],SwimLane1.Elements.Item[OleVariant(2)],Null);
	Undo();
	RedoRemoveAction(OleVariant(10),Null);
	OutputDebugString( RedoListAction[Null,Null] );
	EndUpdate();
end
92
Removes Undo operations

with SwimLane1 do
begin
	BeginUpdate();
	AllowUndoRedo := True;
	Pools.Add(OleVariant(-154),OleVariant(-82),OleVariant(244),OleVariant(122));
	with Elements do
	begin
		Add('Item <b>1',OleVariant(-64),OleVariant(-64));
		Add('Item <b>2',Null,Null);
	end;
	Links.Add(SwimLane1.Elements.Item[OleVariant(1)],SwimLane1.Elements.Item[OleVariant(2)],Null);
	UndoRemoveAction(OleVariant(10),Null);
	OutputDebugString( UndoListAction[Null,Null] );
	EndUpdate();
end
91
Record the UI operations as a block of undo/redo operations

with SwimLane1 do
begin
	BeginUpdate();
	AllowUndoRedo := True;
	StartBlockUndoRedo();
	Pools.Add(OleVariant(-154),OleVariant(-82),OleVariant(244),OleVariant(122));
	with Elements do
	begin
		Add('Item <b>1',OleVariant(-64),OleVariant(-64));
		Add('Item <b>2',Null,Null);
	end;
	Links.Add(SwimLane1.Elements.Item[OleVariant(1)],SwimLane1.Elements.Item[OleVariant(2)],Null);
	EndBlockUndoRedo();
	OutputDebugString( UndoListAction[Null,Null] );
	EndUpdate();
end
90
Groups the next to current Undo/Redo Actions in a single block

with SwimLane1 do
begin
	BeginUpdate();
	AllowUndoRedo := True;
	Pools.Add(OleVariant(-154),OleVariant(-82),OleVariant(244),OleVariant(122));
	with Elements do
	begin
		Add('Item <b>1',OleVariant(-64),OleVariant(-64));
		Add('Item <b>2',Null,Null);
	end;
	Links.Add(SwimLane1.Elements.Item[OleVariant(1)],SwimLane1.Elements.Item[OleVariant(2)],Null);
	GroupUndoRedoActions(3);
	OutputDebugString( UndoListAction[Null,Null] );
	EndUpdate();
end
89
Limits the number of entries within the Undo/Redo queue

with SwimLane1 do
begin
	BeginUpdate();
	AllowUndoRedo := True;
	UndoRedoQueueLength := 1;
	Pools.Add(OleVariant(-154),OleVariant(-82),OleVariant(244),OleVariant(122));
	with Elements do
	begin
		Add('Item <b>1',OleVariant(-64),OleVariant(-64));
		Add('Item <b>2',Null,Null);
	end;
	Links.Add(SwimLane1.Elements.Item[OleVariant(1)],SwimLane1.Elements.Item[OleVariant(2)],Null);
	OutputDebugString( UndoListAction[Null,Null] );
	EndUpdate();
end
88
Lists the Redo actions that can be performed on the surface

with SwimLane1 do
begin
	BeginUpdate();
	AllowUndoRedo := True;
	Pools.Add(OleVariant(-154),OleVariant(-82),OleVariant(244),OleVariant(122));
	with Elements do
	begin
		Add('Item <b>1',OleVariant(-64),OleVariant(-64));
		Add('Item <b>2',Null,Null);
	end;
	Links.Add(SwimLane1.Elements.Item[OleVariant(1)],SwimLane1.Elements.Item[OleVariant(2)],Null);
	Undo();
	OutputDebugString( RedoListAction[Null,Null] );
	EndUpdate();
end
87
Lists the Undo actions that can be performed on the surface

with SwimLane1 do
begin
	BeginUpdate();
	AllowUndoRedo := True;
	Pools.Add(OleVariant(-154),OleVariant(-82),OleVariant(244),OleVariant(122));
	with Elements do
	begin
		Add('Item <b>1',OleVariant(-64),OleVariant(-64));
		Add('Item <b>2',Null,Null);
	end;
	Links.Add(SwimLane1.Elements.Item[OleVariant(1)],SwimLane1.Elements.Item[OleVariant(2)],Null);
	OutputDebugString( UndoListAction[Null,Null] );
	EndUpdate();
end
86
Checks whether the Undo operation is possible

with SwimLane1 do
begin
	BeginUpdate();
	AllowUndoRedo := True;
	Pools.Add(OleVariant(-154),OleVariant(-82),OleVariant(244),OleVariant(122));
	with Elements do
	begin
		Add('Item <b>1',OleVariant(-64),OleVariant(-64));
		Add('Item <b>2',Null,Null);
	end;
	Links.Add(SwimLane1.Elements.Item[OleVariant(1)],SwimLane1.Elements.Item[OleVariant(2)],Null);
	Undo();
	OutputDebugString( 'CanRedo' );
	OutputDebugString( CanRedo );
	EndUpdate();
end
85
Call Redo by code

with SwimLane1 do
begin
	BeginUpdate();
	AllowUndoRedo := True;
	Pools.Add(OleVariant(-154),OleVariant(-82),OleVariant(244),OleVariant(122));
	with Elements do
	begin
		Add('Item <b>1',OleVariant(-64),OleVariant(-64));
		Add('Item <b>2',Null,Null);
	end;
	Links.Add(SwimLane1.Elements.Item[OleVariant(1)],SwimLane1.Elements.Item[OleVariant(2)],Null);
	Undo();
	Redo();
	EndUpdate();
end
84
Checks whether the Undo operation is possible

with SwimLane1 do
begin
	BeginUpdate();
	AllowUndoRedo := True;
	Pools.Add(OleVariant(-154),OleVariant(-82),OleVariant(244),OleVariant(122));
	with Elements do
	begin
		Add('Item <b>1',OleVariant(-64),OleVariant(-64));
		Add('Item <b>2',Null,Null);
	end;
	Links.Add(SwimLane1.Elements.Item[OleVariant(1)],SwimLane1.Elements.Item[OleVariant(2)],Null);
	OutputDebugString( 'CanUndo' );
	OutputDebugString( CanUndo );
	EndUpdate();
end
83
Call Undo by code

with SwimLane1 do
begin
	BeginUpdate();
	AllowUndoRedo := True;
	Pools.Add(OleVariant(-154),OleVariant(-82),OleVariant(244),OleVariant(122));
	with Elements do
	begin
		Add('Item <b>1',OleVariant(-64),OleVariant(-64));
		Add('Item <b>2',Null,Null);
	end;
	Links.Add(SwimLane1.Elements.Item[OleVariant(1)],SwimLane1.Elements.Item[OleVariant(2)],Null);
	Undo();
	EndUpdate();
end
82
Save the element's properties for Undo/Redo operations, by code

with SwimLane1 do
begin
	BeginUpdate();
	AllowUndoRedo := True;
	with Elements do
	begin
		Add('Item <b>1',OleVariant(-64),OleVariant(-64));
		Add('Item <b>2',Null,Null);
	end;
	StartBlockUndoRedo();
	with Links.Add(SwimLane1.Elements.Item[OleVariant(1)],SwimLane1.Elements.Item[OleVariant(2)],Null) do
	begin
		h := StartUpdateLink;
		Color := $ff;
		Width := 2;
		ShowDir := False;
		ShowLinkType := EXSWIMLANELib_TLB.exLinkStraight;
		EndUpdateLink(h);
	end;
	EndBlockUndoRedo();
	EndUpdate();
end
81
No color is restored for the link when Undo/Redo operation is executed

// AddElement event - A new element has been added to the surface.
procedure TForm1.SwimLane1AddElement(ASender: TObject; Element : IElement);
begin
	// Element.ShowCheckBox = True
	// Element.CheckBoxAlign = 2
end;

with SwimLane1 do
begin
	BeginUpdate();
	AllowUndoRedo := True;
	with Elements do
	begin
		Add('Check <b>1',OleVariant(-64),OleVariant(-64));
		Add('Check <b>2',Null,Null).Checked := EXSWIMLANELib_TLB.exChecked;
	end;
	StartBlockUndoRedo();
	with Links.Add(SwimLane1.Elements.Item[OleVariant(1)],SwimLane1.Elements.Item[OleVariant(2)],Null) do
	begin
		h := StartUpdateLink;
		Color := $ff;
		Width := 2;
		ShowDir := False;
		ShowLinkType := EXSWIMLANELib_TLB.exLinkStraight;
		EndUpdateLink(h);
	end;
	EndBlockUndoRedo();
	EndUpdate();
end
80
Save the element's properties for Undo/Redo operations, by code

with SwimLane1 do
begin
	BeginUpdate();
	AllowUndoRedo := True;
	Elements.Add('Item <b>1',OleVariant(-64),OleVariant(-64));
	StartBlockUndoRedo();
	with Elements.Add('Item <b>2',Null,Null) do
	begin
		h := StartUpdateElement;
		BackColor := $0;
		ForeColor := $ffffff;
		BorderColor := $ff;
		EndUpdateElement(h);
	end;
	EndBlockUndoRedo();
	EndUpdate();
end
79
No color is restored for the element when Undo/Redo operation is executed

with SwimLane1 do
begin
	BeginUpdate();
	AllowUndoRedo := True;
	Elements.Add('Item <b>1',OleVariant(-64),OleVariant(-64));
	StartBlockUndoRedo();
	with Elements.Add('Item <b>2',Null,Null) do
	begin
		h := StartUpdateElement;
		BackColor := $0;
		ForeColor := $ffffff;
		BorderColor := $ff;
		EndUpdateElement(h);
	end;
	EndBlockUndoRedo();
	EndUpdate();
end
78
How can I ensure that a specified element fits the surface's visible area

with SwimLane1 do
begin
	with Elements do
	begin
		with Add('Element A',OleVariant(-100),Null).Pattern do
		begin
			Type := EXSWIMLANELib_TLB.exPatternBDiagonal;
			Color := $e0e0e0;
		end;
		Add('Element B',OleVariant(2000),Null).EnsureVisible();
	end;
end
77
LayoutEndChanging(exUndo), LayoutEndChanging(exRedo) or LayoutEndChanging(exUndoRedoUpdate) notifiy your application once a Undo/Redo operation is executed (CTRL+Z, CTRL+Y) or updated
// LayoutEndChanging event - Notifies your application once the control's layout has been changed.
procedure TForm1.SwimLane1LayoutEndChanging(ASender: TObject; Operation : LayoutChangingEnum);
begin
	with SwimLane1 do
	begin
		OutputDebugString( 'LayoutEndChanging' );
		OutputDebugString( Operation );
	end
end;

with SwimLane1 do
begin
	BeginUpdate();
	AllowUndoRedo := True;
	Pools.Add(OleVariant(-154),OleVariant(-82),OleVariant(244),OleVariant(122));
	with Elements do
	begin
		Add('Item <b>1',OleVariant(-64),OleVariant(-64));
		Add('Item <b>2',Null,Null);
	end;
	Links.Add(SwimLane1.Elements.Item[OleVariant(1)],SwimLane1.Elements.Item[OleVariant(2)],Null);
	EndUpdate();
end
76
Turn on the Undo/Redo feature

with SwimLane1 do
begin
	BeginUpdate();
	AllowUndoRedo := True;
	Pools.Add(OleVariant(-154),OleVariant(-82),OleVariant(244),OleVariant(122));
	with Elements do
	begin
		Add('Item <b>1',OleVariant(-64),OleVariant(-64));
		Add('Item <b>2',Null,Null);
	end;
	Links.Add(SwimLane1.Elements.Item[OleVariant(1)],SwimLane1.Elements.Item[OleVariant(2)],Null);
	EndUpdate();
end
75
ImageSize property on 32 (specifies the size of control' icons/images/check-boxes/radio-buttons)

// AddElement event - A new element has been added to the surface.
procedure TForm1.SwimLane1AddElement(ASender: TObject; Element : IElement);
begin
	// Element.ShowCheckBox = True
end;

with SwimLane1 do
begin
	BeginUpdate();
	ImageSize := 32;
	Font.Size := 16;
	ContextMenuFont.Size := 16;
	Images('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');
	with VisualAppearance do
	begin
		Add(1,'gBFLBCJwBAEHhEJAAEhABfICg6AADACAxRDgMQBQKAAzQFAYbhkGCGAAGMZxRgmFgAQhFcZQSKUOQTDKMIziaQAGgkNQwCSLIwjNIsBxPFKVQChEYxSjKA40SJNUgyj6' + 
	'CCY+QLIE5PfQgAL9I6eJABCCSQKkYx0HScRiwPBIbAZAYhCZqaKhWgkKI/WBQIABRDVLx5ESiLRtKy7Mq2bpvXBcNxXHalaztO68LxvKyqHb5fJ/PpgL4YHgmC4NQ7EM' + 
	'RwF6rfbyfZ7Xg/ORPTijZ4sdzMHTzJyscx3HqfaBoOaZU5eMLceTUMofHIndxCcasPbsOatVqjG5sYjcGC3La9cz3Pq/bpuDCbMxuaK1TrYXr1TTrcofBDldAxXRKDxR' + 
	'DWVhLnYOw9i6XxzjuXprCaOoKB6EwbiCZZCGOdZYlcT4xHmbhMnwNxtn+G5bmqdZ7n4Pw/i+X5zm+dQ9g4CAFjsfAJheOI8HsDoWDWTB/lwSAQkmA5PEgRYoDyDwYFYF' + 
	'oFmGCBmBqBphDgRJ0gOTIYBGRB/lyRh0iSCZbjYWJzgWDwIjYLoLmMCJGDKDJjBgWgqG6YhyhGHRzA2aJ1mCABOAiOJvhCZBJBYRoRmSCQmEqEQimkAZgg8TZnDCV4Uk' + 
	'mCUmBKZYJGYWoWCUUhiFMNZckNUh2GENoaGaGZmgmJhqhqZpGGIEx2GYIxSGGGJdggWJth2Z4JmYeoemeSZ2H6H4hGmQhihyTRHGYLg7CiCgmgqIpokoNoOiOaJ4jqAo' + 
	'chqaZGgaCxpAoZoaiaaJqEmWIcGgShcnCJwqEqFoR3YOoFlgchflqNouiuawHmWSYqGkWZQhcatzmaOoumuSp2j6L5bBaKo0GQKRnGGCxqiyCwmkqMpsksNpOGUGI7A0' + 
	'ew1G0Rxlg0PptgsZuDG2Sx2l6N5tnYNZZjUDRXDCVo5l2FoymqOpukuNpujubwLjmWY5k0ZwxkaFxYlWdp6j6b5Lnafo/nABQdg2FxcUsY5BkmXAkmeQpckwNRrkKTh8' + 
	'CSHZBk4NwyC4KxxgMDwakOMZDn8GgwnGAo2C4cwthMcwmCcMoHBMHRehwTIghySYNksZwcH4HBMEsHx5hyPItiweYxnwSZEH4Mozn0fR+DMAo7EYJ50gkdZelKdNql2U' + 
	'gJn0GIukwH4HicQRai2GI4mSVpNl0dZGledgNgcYpYDWUx3FsOQi5YV5anaTY3G6W53A2RxylydxFjiaxEFCCgBBAQ==');
		Add(2,'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' + 
	'RBCCQAgQEA==');
		Add(3,'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');
		Add(4,'gBFLBCJwBAEHhEJAAEhABUYCg6AADACAxRDgMQBQKAAzQFAYbhkGCGAAGMZxRgmFgAQhFcZQSKUOQTDKMIziYBYfgkMIgSbJUgDGAkRRdDSOYDmGQYDiCIoRShOMIjHL' + 
	'UXxtDaIZwhEAoJb+RgAUY/cTzaAEUwHHiTKInaCQShsFYJUJAdRURQ9EwvCIZBpEWwLChENQwWLCNj2TScBwjCyqbale45ViqdoDU5EUiXJJ8ZxnECfYyrGjaMpCeKBU' + 
	'rGYTVRBIMxLLSia5oeJqMrnBpNVrIUgXCAGFwHK6BcauXIIDp6XoWWRbAAWDpVVzNNC3YzkCIceADHKiXxmVz4JLdGZ1QTGID2XaYaxWK4oZjsVSc4KDHbETbHFi9Fo3' + 
	'NaaxGisew+GYc4HlCR5NAAAIIEkQJSGMOgdE4RhYDwJJsAaAYQgmPpolCWgSCiBJzjcEIAkQXIBm8d5UhOQgCDUIBDDJDhgggJgKgKYJIDSVoDk8KBFF4OohEMZgWDsY' + 
	'YDj4GoGmGSB2B6B5iAiBgYDsYRjGSbIJo4RgqDuIpIAoLoLmMCJGDKDJjJiLA7xqUAAgGTwYnYPoPmQCQGEKEJkEkFg9gGY44BoRoSmSSQ2EKEggHgRhShSZRJFYVoVm' + 
	'WCRmFKFAgGOTheheZgJgYYoYmYSYWGaF4lkMMJ0hqZpJjYbobmcCZGHKHJmjmJh0h2Z4JmYcIaE8WZ2H6H5oAoBoCiCaBKBYfdjGoJoKiKaJKDaDojmkChGgmIgpCoVo' + 
	'WiWaJZiSd4mmmSh2h6J5qAqBoiiiaY5iSeIpmqComiqKpqkqNouiuah6hqMIsmsSpWiuGhP1kOoumuSp2j6L5sAsBo54gKwWkaMZsgsJpKjKbJLDaRYxYWRpSjSbIZiS' + 
	'e41m2CxmlqNptksdpejebR5iSfI4m4S4W16boLiaao6m5fJ9jubwLkaco8m8S5WnaPZunuOp4j6b5Lnac4SA0PAGlgP4wEwFwGkGcIMCcCpCnCCxiA8NYAAmMJfkSbhF' + 
	'CcFpFnGDBnBqRpUhuEwTDeZ5lHCfw6HIQxLCaAxygyJwqgGcATE4FA6hWY4tjEAAQBAgIA==');
	end;
	Background[EXSWIMLANELib_TLB.exCheckBoxState0] := $1000000;
	Background[EXSWIMLANELib_TLB.exCheckBoxState1] := $2000000;
	Background[EXSWIMLANELib_TLB.exCheckBoxState2] := $3000000;
	Background[EXSWIMLANELib_TLB.exContextMenuSelBackColor] := $4000000;
	Background[EXSWIMLANELib_TLB.exContextMenuSelForeColor] := $1;
	with Elements do
	begin
		with Add('Element Check 2',Null,Null) do
		begin
			Checked := EXSWIMLANELib_TLB.exChecked;
			Pictures := '1,2';
		end;
	end;
	Home();
	EndUpdate();
end
74
ImageSize property on 16 (default) (specifies the size of control' icons)

// AddElement event - A new element has been added to the surface.
procedure TForm1.SwimLane1AddElement(ASender: TObject; Element : IElement);
begin
	// Element.ShowCheckBox = True
end;

with SwimLane1 do
begin
	BeginUpdate();
	ImageSize := 16;
	Images('gBJJgBAIDAAEg4ACEKAD/hz/EMNh8TIRNGwAjEZAEXjAojJAjMLjABAAgjUYkUnlUrlktl0vmExmUzmk1m03nE5nU7nkrQCAntBoVDolFo1HoM/ADAplLptImdMYFOqd' + 
	'SqlXq1QrVbrlGpVWsFNrNdnNjsk7pQAtNroFnt0sh8Yr9iulTuNxs1Eu8OiT/vsnsNVutXlk/oGGtVKxGLxWNtsZtN8iUYuNvy0Zvd+xNYwdwvl4p870GCqc8vOeuVtt' + 
	'mp1knyOayWVy+WzN/ze1wOElenm+12WUz/Bv2/3UyyWrzeutux2GSyGP2dQ33C1ur3GD3M4zUNzHdlWjq/E3nGzVpjWv4HA7fRy/Tv2IrN8rPW6nZ3ve7mUlfu20Z8ac' + 
	'vQyb+vY9jasYoDwMm+LytVBDqKG3z8O3Cb8P+mkAuY9cCQ2uL4KaxDKvkp8RNLEjqugnrwQo/UWPzFyeQw5sNLZFENrI4kOqU66pw8uzmOKvTqNqjULJvGL1JO48GtTG' + 
	'sbLdEL3scxLlyiw8dQeoUVxdLTtyKmUjwGlslRPJsnK1HbAKbKCrsQo8uQk/CeP44iaR/ATnTNPLvyxPU+z9P9AUDQVBowiofJXQ6Oo+kKMpIkjztE4TKn4P6JowfgPn' + 
	'wD5/nAjB8AOeAPo0eAA1IAFH07UhAIMpYAVIYFHqBUhwVjV1S1EtQAHxW65V0AZwAeuQAnwB5gAPYViEDVhwAHTQBkCjB4gOhwDmCyhH0sACAg==');
	with Elements do
	begin
		with Add('Element Check 2',Null,Null) do
		begin
			Checked := EXSWIMLANELib_TLB.exChecked;
			Pictures := '1,2';
		end;
	end;
	Home();
	EndUpdate();
end
73
We want to have option to start/end connectors at the middle of each side of the elements
with SwimLane1 do
begin
	BeginUpdate();
	ShowLinks := EXSWIMLANELib_TLB.exShowLinks;
	with Elements do
	begin
		Add('Element <sha ;;0>1',Null,Null);
		Add('Element <sha ;;0>2',OleVariant(164),OleVariant(64));
		Add('Element <sha ;;0>3',OleVariant(0),OleVariant(132));
	end;
	with Links do
	begin
		Add(SwimLane1.Elements.Item[OleVariant(1)],SwimLane1.Elements.Item[OleVariant(2)],Null);
		Add(SwimLane1.Elements.Item[OleVariant(3)],SwimLane1.Elements.Item[OleVariant(2)],Null);
	end;
	FitToClient();
	EndUpdate();
end
72
How can I determine the position the user clicks within the element's boundaries (Click event)

// Click event - Occurs when the user presses and then releases the left mouse button over the control.
procedure TForm1.SwimLane1Click(ASender: TObject; );
begin
	with SwimLane1 do
	begin
		e := (IUnknown(ElementFromPoint[-1,-1]) as _TLB.Object);
		X := -1;
		Y := -1;
		PointToPosition(X,Y);
			OutputDebugString( e );
		OutputDebugString( X );
		OutputDebugString( Y );
	end
end;

with SwimLane1 do
begin
	BeginUpdate();
	with Elements do
	begin
		Add('Element 1',Null,Null);
		Add('Element 2',OleVariant(128),OleVariant(64));
	end;
	FitToClient();
	EndUpdate();
end
71
How can I determine the position the user clicks within the element's boundaries (MouseMove event)

// MouseMove event - Occurs when the user moves the mouse.
procedure TForm1.SwimLane1MouseMove(ASender: TObject; Button : Smallint;Shift : Smallint;X : Integer;Y : Integer);
begin
	with SwimLane1 do
	begin
		e := (IUnknown(ElementFromPoint[X,Y]) as _TLB.Object);
		PointToPosition(X,Y);
			OutputDebugString( e );
		OutputDebugString( X );
		OutputDebugString( Y );
	end
end;

with SwimLane1 do
begin
	BeginUpdate();
	with Elements do
	begin
		Add('Element 1',Null,Null);
		Add('Element 2',OleVariant(128),OleVariant(64));
	end;
	FitToClient();
	EndUpdate();
end
70
How can I convert the screen position (mouse) to surface position

// MouseMove event - Occurs when the user moves the mouse.
procedure TForm1.SwimLane1MouseMove(ASender: TObject; Button : Smallint;Shift : Smallint;X : Integer;Y : Integer);
begin
	with SwimLane1 do
	begin
		OutputDebugString( 'Point ' );
		OutputDebugString( X );
		OutputDebugString( Y );
		PointToPosition(X,Y);
		OutputDebugString( 'Position ' );
		OutputDebugString( X );
		OutputDebugString( Y );
	end
end;

with SwimLane1 do
begin
	BeginUpdate();
	with Elements do
	begin
		Add('Element <sha ;;0>1',Null,Null);
		Add('Element <sha ;;0>2',OleVariant(164),OleVariant(64));
		Add('Element <sha ;;0>3',OleVariant(0),OleVariant(132));
	end;
	with Links do
	begin
		Add(SwimLane1.Elements.Item[OleVariant(1)],SwimLane1.Elements.Item[OleVariant(2)],Null);
		Add(SwimLane1.Elements.Item[OleVariant(3)],SwimLane1.Elements.Item[OleVariant(2)],Null);
		Add(SwimLane1.Elements.Item[OleVariant(3)],SwimLane1.Elements.Item[OleVariant(1)],Null);
	end;
	FitToClient();
	AxisStyle := EXSWIMLANELib_TLB.exLinesSolid;
	AxisColor := RGB(128,128,128);
	EndUpdate();
end
69
Is is possible to show just the positive coordinates

with SwimLane1 do
begin
	BeginUpdate();
	Coord := Integer(EXSWIMLANELib_TLB.exAllowPositiveOnly) Or Integer(EXSWIMLANELib_TLB.exCartesian);
	AxisColor := RGB(128,128,128);
	AxisStyle := Integer(EXSWIMLANELib_TLB.exLinesThick) Or Integer(EXSWIMLANELib_TLB.exLinesDot);
	ShowLinks := EXSWIMLANELib_TLB.exShowLinks;
	with Elements do
	begin
		Add('Element <sha ;;0>1',Null,Null);
		Add('Element <sha ;;0>2',OleVariant(164),OleVariant(64));
		Add('Element <sha ;;0>3',OleVariant(0),OleVariant(132));
	end;
	with Links do
	begin
		Add(SwimLane1.Elements.Item[OleVariant(1)],SwimLane1.Elements.Item[OleVariant(2)],Null);
		Add(SwimLane1.Elements.Item[OleVariant(3)],SwimLane1.Elements.Item[OleVariant(2)],Null);
	end;
	FitToClient();
	EndUpdate();
end
68
Cartesian coordinates (positive coordinates are shown top-right to the origin)

with SwimLane1 do
begin
	BeginUpdate();
	Coord := EXSWIMLANELib_TLB.exCartesian;
	with Elements do
	begin
		Add('Element <sha ;;0>1',Null,Null);
		Add('Element <sha ;;0>2',OleVariant(164),OleVariant(64));
		Add('Element <sha ;;0>3',OleVariant(0),OleVariant(132));
	end;
	with Links do
	begin
		Add(SwimLane1.Elements.Item[OleVariant(1)],SwimLane1.Elements.Item[OleVariant(2)],Null);
		Add(SwimLane1.Elements.Item[OleVariant(3)],SwimLane1.Elements.Item[OleVariant(2)],Null);
		Add(SwimLane1.Elements.Item[OleVariant(3)],SwimLane1.Elements.Item[OleVariant(1)],Null);
	end;
	FitToClient();
	EndUpdate();
end
67
Default coordinates (positive coordinates are shown bottom-right to the origin)

with SwimLane1 do
begin
	BeginUpdate();
	Coord := EXSWIMLANELib_TLB.exDefCoord;
	with Elements do
	begin
		Add('Element <sha ;;0>1',Null,Null);
		Add('Element <sha ;;0>2',OleVariant(164),OleVariant(64));
		Add('Element <sha ;;0>3',OleVariant(0),OleVariant(132));
	end;
	with Links do
	begin
		Add(SwimLane1.Elements.Item[OleVariant(1)],SwimLane1.Elements.Item[OleVariant(2)],Null);
		Add(SwimLane1.Elements.Item[OleVariant(3)],SwimLane1.Elements.Item[OleVariant(2)],Null);
		Add(SwimLane1.Elements.Item[OleVariant(3)],SwimLane1.Elements.Item[OleVariant(1)],Null);
	end;
	FitToClient();
	EndUpdate();
end
66
Is it possible to customize the path of the links orthogonally similar with Microsoft Visio tool

with SwimLane1 do
begin
	BeginUpdate();
	AllowLinkControlPoint := Integer(EXSWIMLANELib_TLB.exOrthoArrange) Or Integer(EXSWIMLANELib_TLB.exMiddleControlPoint) Or Integer(EXSWIMLANELib_TLB.exControlPoint) Or Integer(EXSWIMLANELib_TLB.exEndControlPoint) Or Integer(EXSWIMLANELib_TLB.exStartControlPoint);
	with Elements do
	begin
		Add('Element <sha ;;0>1',Null,Null);
		Add('Element <sha ;;0>2',OleVariant(164),OleVariant(64));
		Add('Element <sha ;;0>3',OleVariant(0),OleVariant(132));
	end;
	with Links do
	begin
		Add(SwimLane1.Elements.Item[OleVariant(1)],SwimLane1.Elements.Item[OleVariant(2)],Null);
		Add(SwimLane1.Elements.Item[OleVariant(3)],SwimLane1.Elements.Item[OleVariant(2)],Null);
		Add(SwimLane1.Elements.Item[OleVariant(3)],SwimLane1.Elements.Item[OleVariant(1)],Null);
	end;
	Zoom := 200;
	FitToClient();
	EndUpdate();
end
65
Does your control supports OLE Drag and Drop
// OLEDragDrop event - Occurs when a source component is dropped onto a target component when the source component determines that a drop can occur.
procedure TForm1.SwimLane1OLEDragDrop(ASender: TObject; Data : IExDataObject;var Effect : Integer;Button : Smallint;Shift : Smallint;X : Integer;Y : Integer);
begin
	with SwimLane1 do
	begin
		OutputDebugString( Data );
	end
end;

// OLEStartDrag event - Occurs when the OLEDrag method is called.
procedure TForm1.SwimLane1OLEStartDrag(ASender: TObject; Data : IExDataObject;var AllowedEffects : Integer);
begin
	// Data.SetData("some data to drag")
end;

with SwimLane1 do
begin
	BeginUpdate();
	OLEDropMode := EXSWIMLANELib_TLB.exOLEDropManual;
	with Pools.Add(OleVariant(-250),OleVariant(-150),OleVariant(500),OleVariant(250)) do
	begin
		Lane[EXSWIMLANELib_TLB.exLaneHorizontal].Children.Count := 2;
		Lane[EXSWIMLANELib_TLB.exLaneVertical].Children.Count := 1;
	end;
	with Elements do
	begin
		with Add('Click the Element wait for .5 second until + cursor is shown, to start <b>OLE Drag and Drop</b>',Null,Null) do
		begin
			CaptionSingleLine := EXSWIMLANELib_TLB.exCaptionWordWrap;
			AutoSize := False;
			X := -125;
			Y := -105;
			Width := 256;
			Height := 56;
		end;
		with Add('Click the Element wait for .5 second until + cursor is shown, to start <b>OLE Drag and Drop</b>',Null,Null) do
		begin
			CaptionSingleLine := EXSWIMLANELib_TLB.exCaptionWordWrap;
			AutoSize := False;
			X := -125;
			Width := 256;
			Height := 56;
		end;
	end;
	EndUpdate();
end
64
Is it possible to disable customizing the path of a specified link

with SwimLane1 do
begin
	BeginUpdate();
	AllowLinkControlPoint := EXSWIMLANELib_TLB.LinkControlPointEnum($ffffffe0 Or Integer(EXSWIMLANELib_TLB.exOrthoArrange) Or Integer(EXSWIMLANELib_TLB.exMiddleControlPoint) Or Integer(EXSWIMLANELib_TLB.exControlPoint) Or Integer(EXSWIMLANELib_TLB.exEndControlPoint) Or Integer(EXSWIMLANELib_TLB.exStartControlPoint));
	with Elements do
	begin
		Add('Element <sha ;;0>A',Null,Null);
		Add('Element <sha ;;0>B',OleVariant(164),OleVariant(64));
		Add('Element <sha ;;0>B',OleVariant(0),OleVariant(132));
	end;
	with Links do
	begin
		Add(SwimLane1.Elements.Item[OleVariant(1)],SwimLane1.Elements.Item[OleVariant(2)],Null).CustomPath := '0.5,0.25,0.5,.75';
		Add(SwimLane1.Elements.Item[OleVariant(3)],SwimLane1.Elements.Item[OleVariant(2)],Null).CustomPath := '0.5,0.25,0.5,.75';
		with Add(SwimLane1.Elements.Item[OleVariant(3)],SwimLane1.Elements.Item[OleVariant(1)],Null) do
		begin
			ShowLinkType := EXSWIMLANELib_TLB.exLinkRound;
			StartPos := EXSWIMLANELib_TLB.LeftAlignment;
			Color := $808080;
			AllowControlPoint := EXSWIMLANELib_TLB.exNoControlPoint;
		end;
	end;
	Zoom := 200;
	FitToClient();
	EndUpdate();
end
63
How do I let user customizes the link's path

with SwimLane1 do
begin
	BeginUpdate();
	AllowLinkControlPoint := EXSWIMLANELib_TLB.LinkControlPointEnum($ffffffe0 Or Integer(EXSWIMLANELib_TLB.exOrthoArrange) Or Integer(EXSWIMLANELib_TLB.exMiddleControlPoint) Or Integer(EXSWIMLANELib_TLB.exControlPoint) Or Integer(EXSWIMLANELib_TLB.exEndControlPoint) Or Integer(EXSWIMLANELib_TLB.exStartControlPoint));
	with Elements do
	begin
		Add('Element <sha ;;0>A',Null,Null);
		Add('Element <sha ;;0>B',OleVariant(164),OleVariant(64));
		Add('Element <sha ;;0>B',OleVariant(0),OleVariant(132));
	end;
	with Links do
	begin
		Add(SwimLane1.Elements.Item[OleVariant(1)],SwimLane1.Elements.Item[OleVariant(2)],Null).CustomPath := '0.5,0.25,0.5,.75';
		Add(SwimLane1.Elements.Item[OleVariant(3)],SwimLane1.Elements.Item[OleVariant(2)],Null).CustomPath := '0.5,0.25,0.5,.75';
		with Add(SwimLane1.Elements.Item[OleVariant(3)],SwimLane1.Elements.Item[OleVariant(1)],Null) do
		begin
			ShowLinkType := EXSWIMLANELib_TLB.exLinkRound;
			StartPos := EXSWIMLANELib_TLB.LeftAlignment;
		end;
	end;
	Zoom := 200;
	FitToClient();
	EndUpdate();
end
62
How can I generate a picture/image/graph from my diagram
with SwimLane1 do
begin
	with Elements do
	begin
		Add('Element A',Null,Null).ID := 'A';
		Add('Element B',Null,Null).ID := 'B';
		Add('Element C',Null,Null).ID := 'C';
		Add('Element D',Null,Null).ID := 'D';
		Add('Element E',Null,Null).ID := 'E';
		Add('Element E',Null,Null).ID := 'F';
	end;
	with Links do
	begin
		Add(SwimLane1.Elements.Item['A'],SwimLane1.Elements.Item['B'],Null);
		Add(SwimLane1.Elements.Item['A'],SwimLane1.Elements.Item['C'],Null);
		Add(SwimLane1.Elements.Item['B'],SwimLane1.Elements.Item['D'],Null);
		Add(SwimLane1.Elements.Item['B'],SwimLane1.Elements.Item['C'],Null);
		Add(SwimLane1.Elements.Item['A'],SwimLane1.Elements.Item['E'],Null);
		Add(SwimLane1.Elements.Item['A'],SwimLane1.Elements.Item['F'],Null);
	end;
	DefArrange[EXSWIMLANELib_TLB.exDefArrangeCompact] := OleVariant(False);
	Arrange(Null);
	var_CopyTo := CopyTo['c:/temp/xtest.jpg'];
	OutputDebugString( '!!!check the file c:/temp/xtest.jpg!!!' );
end
61
How can I generate a picture/image/graph from my diagram
with SwimLane1 do
begin
	with Elements do
	begin
		Add('Element A',Null,Null).ID := 'A';
		Add('Element B',Null,Null).ID := 'B';
		Add('Element C',Null,Null).ID := 'C';
		Add('Element D',Null,Null).ID := 'D';
		Add('Element E',Null,Null).ID := 'E';
		Add('Element E',Null,Null).ID := 'F';
	end;
	with Links do
	begin
		Add(SwimLane1.Elements.Item['A'],SwimLane1.Elements.Item['B'],Null);
		Add(SwimLane1.Elements.Item['A'],SwimLane1.Elements.Item['C'],Null);
		Add(SwimLane1.Elements.Item['B'],SwimLane1.Elements.Item['D'],Null);
		Add(SwimLane1.Elements.Item['B'],SwimLane1.Elements.Item['C'],Null);
		Add(SwimLane1.Elements.Item['A'],SwimLane1.Elements.Item['E'],Null);
		Add(SwimLane1.Elements.Item['A'],SwimLane1.Elements.Item['F'],Null);
	end;
	DefArrange[EXSWIMLANELib_TLB.exDefArrangeCompact] := OleVariant(False);
	Arrange(Null);
	with (IUnknown(ComObj.CreateComObject(ComObj.ProgIDToClassID('Exontrol.Print'))) as EXPRINTLib_TLB.Print) do
	begin
		PrintExt := (IUnknown(SwimLane1.DefaultInterface) as EXSWIMLANELib_TLB.SwimLane);
		CopyTo('c:/temp/xtest.jpg');
	end;
	OutputDebugString( '!!!check the file c:/temp/xtest.jpg!!!' );
end
60
How can I print the component
with SwimLane1 do
begin
	with Elements do
	begin
		Add('Element <sha ;;0>A',Null,Null);
		Add('Element <sha ;;0>B',OleVariant(0),OleVariant(76));
		with Add('Element <sha ;;0>C',OleVariant(-76),OleVariant(32)) do
		begin
			AutoSize := False;
			Height := 32;
		end;
		with Add('Element <sha ;;0>D',OleVariant(76),OleVariant(32)) do
		begin
			AutoSize := False;
			Height := 32;
		end;
	end;
	with Links do
	begin
		with Add(SwimLane1.Elements.Item[OleVariant(1)],SwimLane1.Elements.Item[OleVariant(2)],Null) do
		begin
			StartPos := EXSWIMLANELib_TLB.CenterAlignment;
			EndPos := EXSWIMLANELib_TLB.CenterAlignment;
		end;
		with Add(SwimLane1.Elements.Item[OleVariant(2)],SwimLane1.Elements.Item[OleVariant(1)],Null) do
		begin
			StartPos := EXSWIMLANELib_TLB.CenterAlignment;
			EndPos := EXSWIMLANELib_TLB.CenterAlignment;
		end;
		Add(SwimLane1.Elements.Item[OleVariant(3)],SwimLane1.Elements.Item[OleVariant(4)],Null);
		with Add(SwimLane1.Elements.Item[OleVariant(4)],SwimLane1.Elements.Item[OleVariant(3)],Null) do
		begin
			StartPos := EXSWIMLANELib_TLB.LeftAlignment;
			EndPos := EXSWIMLANELib_TLB.RightAlignment;
		end;
	end;
	with (IUnknown(ComObj.CreateComObject(ComObj.ProgIDToClassID('Exontrol.Print'))) as EXPRINTLib_TLB.Print) do
	begin
		PrintExt := (IUnknown(SwimLane1.DefaultInterface) as EXSWIMLANELib_TLB.SwimLane);
		Preview();
	end;
end
59
How can I show direct-links

with SwimLane1 do
begin
	ShowLinksType := EXSWIMLANELib_TLB.exLinkDirect;
	with Elements do
	begin
		Add('Element A',Null,Null).ID := 'A';
		Add('Element B',OleVariant(128),OleVariant(64)).ID := 'B';
		Add('Element C',OleVariant(128),OleVariant(-64)).ID := 'C';
	end;
	with Links do
	begin
		Add(SwimLane1.Elements.Item['A'],SwimLane1.Elements.Item['B'],Null);
		Add(SwimLane1.Elements.Item['A'],SwimLane1.Elements.Item['C'],Null);
	end;
end
58
How can I show straight-links

with SwimLane1 do
begin
	ShowLinksType := EXSWIMLANELib_TLB.exLinkStraight;
	with Elements do
	begin
		Add('Element A',Null,Null).ID := 'A';
		Add('Element B',OleVariant(128),OleVariant(64)).ID := 'B';
		Add('Element C',OleVariant(128),OleVariant(-64)).ID := 'C';
	end;
	with Links do
	begin
		Add(SwimLane1.Elements.Item['A'],SwimLane1.Elements.Item['B'],Null);
		Add(SwimLane1.Elements.Item['A'],SwimLane1.Elements.Item['C'],Null);
	end;
end
57
How can I show round-links

with SwimLane1 do
begin
	ShowLinksType := EXSWIMLANELib_TLB.exLinkRound;
	with Elements do
	begin
		Add('Element A',Null,Null).ID := 'A';
		Add('Element B',OleVariant(128),OleVariant(64)).ID := 'B';
		Add('Element C',OleVariant(128),OleVariant(-64)).ID := 'C';
	end;
	with Links do
	begin
		Add(SwimLane1.Elements.Item['A'],SwimLane1.Elements.Item['B'],Null);
		Add(SwimLane1.Elements.Item['A'],SwimLane1.Elements.Item['C'],Null);
	end;
end
56
I've tried to insert a "<br>" in the Caption property text and it just ignores it

with SwimLane1 do
begin
	BeginUpdate();
	with Elements do
	begin
		with Add('caption',Null,Null) do
		begin
			CaptionSingleLine := EXSWIMLANELib_TLB.exCaptionWordWrap;
			Caption := 'first caption<br>second caption<br>third caption';
		end;
	end;
	EndUpdate();
end
55
How do I align the extra-caption

with SwimLane1 do
begin
	BeginUpdate();
	with Elements do
	begin
		with Add('caption',Null,Null) do
		begin
			CaptionAlign := EXSWIMLANELib_TLB.exTopLeft;
			AutoSize := False;
			Width := 128;
			Height := 64;
			ExtraCaption := 'extra-caption';
			ExtraCaptionAlign := EXSWIMLANELib_TLB.exBottomRight;
		end;
	end;
	EndUpdate();
end
54
How can I add an extra caption

with SwimLane1 do
begin
	BeginUpdate();
	with Elements do
	begin
		Add('caption',Null,Null).ExtraCaption := 'extra-caption';
	end;
	EndUpdate();
end
53
I am using the reserve-neighbors feature, the question is how to shift left/right the neighbors instead of up/down
with SwimLane1 do
begin
	BeginUpdate();
	AllowMoveNeighbors := EXSWIMLANELib_TLB.exMoveNeighborsHorizontally;
	DefArrange[EXSWIMLANELib_TLB.exDefArrangeDir] := OleVariant(1);
	with Elements do
	begin
		Add('Element <sha ;;0>A',Null,Null);
		Add('Element <sha ;;0>B ( move it )',OleVariant(16),OleVariant(32));
		Add('Element <sha ;;0>C',OleVariant(128),OleVariant(0));
	end;
	EndUpdate();
end
52
I am using the reserve-neighbors feature, the question is if possible to specify the distance between neighbors
with SwimLane1 do
begin
	BeginUpdate();
	AllowMoveNeighbors := EXSWIMLANELib_TLB.exMoveNeighborsVertically;
	DefArrange[EXSWIMLANELib_TLB.exDefArrangeDX] := OleVariant(0);
	DefArrange[EXSWIMLANELib_TLB.exDefArrangeDY] := OleVariant(0);
	with Elements do
	begin
		Add('Element <sha ;;0>A',Null,Null);
		Add('Element <sha ;;0>B ( move it )',OleVariant(0),OleVariant(32));
		Add('Element <sha ;;0>C',OleVariant(0),OleVariant(64));
	end;
	EndUpdate();
end
51
How do I enable the reserve-neighbors feature
with SwimLane1 do
begin
	BeginUpdate();
	AllowMoveNeighbors := EXSWIMLANELib_TLB.exMoveNeighborsVertically;
	with Elements do
	begin
		Add('Element <sha ;;0>A',Null,Null);
		Add('Element <sha ;;0>B ( move it )',OleVariant(0),OleVariant(32));
		Add('Element <sha ;;0>C',OleVariant(0),OleVariant(64));
	end;
	EndUpdate();
end
50
I've noticed that recently, the elements get compacted once the Arrange method is performed. How can I prevent that

with SwimLane1 do
begin
	with Elements do
	begin
		Add('Element A',Null,Null).ID := 'A';
		Add('Element B',Null,Null).ID := 'B';
		Add('Element C',Null,Null).ID := 'C';
		Add('Element D',Null,Null).ID := 'D';
		Add('Element E',Null,Null).ID := 'E';
		Add('Element E',Null,Null).ID := 'F';
	end;
	with Links do
	begin
		Add(SwimLane1.Elements.Item['A'],SwimLane1.Elements.Item['B'],Null);
		Add(SwimLane1.Elements.Item['A'],SwimLane1.Elements.Item['C'],Null);
		Add(SwimLane1.Elements.Item['B'],SwimLane1.Elements.Item['D'],Null);
		Add(SwimLane1.Elements.Item['B'],SwimLane1.Elements.Item['C'],Null);
		Add(SwimLane1.Elements.Item['A'],SwimLane1.Elements.Item['E'],Null);
		Add(SwimLane1.Elements.Item['A'],SwimLane1.Elements.Item['F'],Null);
	end;
	DefArrange[EXSWIMLANELib_TLB.exDefArrangeCompact] := OleVariant(False);
	Arrange(Null);
end
49
How can I move an element to a specified lane/phase/pool

with SwimLane1 do
begin
	BeginUpdate();
	DefPoolHeaderCaptionFormat[True] := '<fgcolor 808080>Faza <off -4><b><font ;6>%i';
	DefPoolHeaderCaptionFormat[False] := '<fgcolor 808080>Culoar <off -4><b><font ;6>%i';
	with Pools.Add(OleVariant(-100),OleVariant(-100),OleVariant(250),OleVariant(180)) do
	begin
		Lane[EXSWIMLANELib_TLB.exLaneHorizontal].Children.Count := 3;
		Lane[EXSWIMLANELib_TLB.exLaneVertical].Children.Count := 3;
		Lane[EXSWIMLANELib_TLB.exLaneVertical].Children.Item[OleVariant(1)].Header.Caption := '<fgcolor FF0000><b>NEW';
	end;
	with Elements.Add('element 1',OleVariant(200),OleVariant(200)) do
	begin
		LaneID[True] := '0:H.0,0:V.0';
	end;
	with Elements.Add('element 2',OleVariant(200),OleVariant(200)) do
	begin
		LaneID[True] := '0:H.2,0:V.2';
	end;
	EndUpdate();
end
48
Is it possible to add a link to show from bottom/down to top/up, rather that right to left (method-2)

// AddLink event - A new link has been added to the links collection.
procedure TForm1.SwimLane1AddLink(ASender: TObject; Link : ILink);
begin
	with SwimLane1 do
	begin
		with Link do
		begin
		end;
	end
end;

with SwimLane1 do
begin
	with Elements do
	begin
		Add('Element <sha ;;0>A',Null,Null);
		Add('Element <sha ;;0>B',OleVariant(48),OleVariant(48));
	end;
	with Links do
	begin
		Add(SwimLane1.Elements.Item[OleVariant(1)],SwimLane1.Elements.Item[OleVariant(2)],Null);
	end;
end
47
Is it possible to add a link to show from bottom/down to top/up, rather that right to left (method-1)

with SwimLane1 do
begin
	with Elements do
	begin
		Add('Element <sha ;;0>A',Null,Null);
		Add('Element <sha ;;0>B',OleVariant(48),OleVariant(48));
	end;
	with Links do
	begin
		with Add(SwimLane1.Elements.Item[OleVariant(1)],SwimLane1.Elements.Item[OleVariant(2)],Null) do
		begin
			StartPos := EXSWIMLANELib_TLB.DownAlignment;
			EndPos := EXSWIMLANELib_TLB.UpAlignment;
		end;
	end;
end
46
How do I enable the cross link support ( mixed )

with SwimLane1 do
begin
	with Elements do
	begin
		Add('Element <sha ;;0>A',Null,Null);
		Add('Element <sha ;;0>B',OleVariant(0),OleVariant(76));
		with Add('Element <sha ;;0>C',OleVariant(-76),OleVariant(32)) do
		begin
			AutoSize := False;
			Height := 32;
		end;
		with Add('Element <sha ;;0>D',OleVariant(76),OleVariant(32)) do
		begin
			AutoSize := False;
			Height := 32;
		end;
	end;
	with Links do
	begin
		with Add(SwimLane1.Elements.Item[OleVariant(1)],SwimLane1.Elements.Item[OleVariant(2)],Null) do
		begin
			StartPos := EXSWIMLANELib_TLB.CenterAlignment;
			EndPos := EXSWIMLANELib_TLB.CenterAlignment;
		end;
		with Add(SwimLane1.Elements.Item[OleVariant(2)],SwimLane1.Elements.Item[OleVariant(1)],Null) do
		begin
			StartPos := EXSWIMLANELib_TLB.CenterAlignment;
			EndPos := EXSWIMLANELib_TLB.CenterAlignment;
		end;
		Add(SwimLane1.Elements.Item[OleVariant(3)],SwimLane1.Elements.Item[OleVariant(4)],Null);
		with Add(SwimLane1.Elements.Item[OleVariant(4)],SwimLane1.Elements.Item[OleVariant(3)],Null) do
		begin
			StartPos := EXSWIMLANELib_TLB.LeftAlignment;
			EndPos := EXSWIMLANELib_TLB.RightAlignment;
		end;
	end;
	ShowLinks := Integer(EXSWIMLANELib_TLB.exShowCrossLinksMixt) Or Integer(EXSWIMLANELib_TLB.exShowExtendedLinks);
end
45
How do I enable the cross link support ( triangular )

with SwimLane1 do
begin
	with Elements do
	begin
		Add('Element <sha ;;0>A',Null,Null);
		Add('Element <sha ;;0>B',OleVariant(0),OleVariant(76));
		with Add('Element <sha ;;0>C',OleVariant(-76),OleVariant(32)) do
		begin
			AutoSize := False;
			Height := 32;
		end;
		with Add('Element <sha ;;0>D',OleVariant(76),OleVariant(32)) do
		begin
			AutoSize := False;
			Height := 32;
		end;
	end;
	with Links do
	begin
		with Add(SwimLane1.Elements.Item[OleVariant(1)],SwimLane1.Elements.Item[OleVariant(2)],Null) do
		begin
			StartPos := EXSWIMLANELib_TLB.CenterAlignment;
			EndPos := EXSWIMLANELib_TLB.CenterAlignment;
		end;
		with Add(SwimLane1.Elements.Item[OleVariant(2)],SwimLane1.Elements.Item[OleVariant(1)],Null) do
		begin
			StartPos := EXSWIMLANELib_TLB.CenterAlignment;
			EndPos := EXSWIMLANELib_TLB.CenterAlignment;
		end;
		Add(SwimLane1.Elements.Item[OleVariant(3)],SwimLane1.Elements.Item[OleVariant(4)],Null);
		with Add(SwimLane1.Elements.Item[OleVariant(4)],SwimLane1.Elements.Item[OleVariant(3)],Null) do
		begin
			StartPos := EXSWIMLANELib_TLB.LeftAlignment;
			EndPos := EXSWIMLANELib_TLB.RightAlignment;
		end;
	end;
	ShowLinks := Integer(EXSWIMLANELib_TLB.exShowCrossLinksTriangle) Or Integer(EXSWIMLANELib_TLB.exShowExtendedLinks);
end
44
How do I enable the cross link support ( rectangular )

with SwimLane1 do
begin
	with Elements do
	begin
		Add('Element <sha ;;0>A',Null,Null);
		Add('Element <sha ;;0>B',OleVariant(0),OleVariant(76));
		with Add('Element <sha ;;0>C',OleVariant(-76),OleVariant(32)) do
		begin
			AutoSize := False;
			Height := 32;
		end;
		with Add('Element <sha ;;0>D',OleVariant(76),OleVariant(32)) do
		begin
			AutoSize := False;
			Height := 32;
		end;
	end;
	with Links do
	begin
		with Add(SwimLane1.Elements.Item[OleVariant(1)],SwimLane1.Elements.Item[OleVariant(2)],Null) do
		begin
			StartPos := EXSWIMLANELib_TLB.CenterAlignment;
			EndPos := EXSWIMLANELib_TLB.CenterAlignment;
		end;
		with Add(SwimLane1.Elements.Item[OleVariant(2)],SwimLane1.Elements.Item[OleVariant(1)],Null) do
		begin
			StartPos := EXSWIMLANELib_TLB.CenterAlignment;
			EndPos := EXSWIMLANELib_TLB.CenterAlignment;
		end;
		Add(SwimLane1.Elements.Item[OleVariant(3)],SwimLane1.Elements.Item[OleVariant(4)],Null);
		with Add(SwimLane1.Elements.Item[OleVariant(4)],SwimLane1.Elements.Item[OleVariant(3)],Null) do
		begin
			StartPos := EXSWIMLANELib_TLB.LeftAlignment;
			EndPos := EXSWIMLANELib_TLB.RightAlignment;
		end;
	end;
	ShowLinks := Integer(EXSWIMLANELib_TLB.exShowCrossLinksRect) Or Integer(EXSWIMLANELib_TLB.exShowExtendedLinks);
end
43
How do I show a link frmo bottom to top, or reverse, not from left to right

with SwimLane1 do
begin
	with Elements do
	begin
		Add('Element <sha ;;0>A',Null,Null);
		Add('Element <sha ;;0>B',OleVariant(0),OleVariant(64));
	end;
	with Links do
	begin
		with Add(SwimLane1.Elements.Item[OleVariant(1)],SwimLane1.Elements.Item[OleVariant(2)],Null) do
		begin
			StartPos := EXSWIMLANELib_TLB.CenterAlignment;
			EndPos := EXSWIMLANELib_TLB.CenterAlignment;
		end;
	end;
end
42
Is it possible to control the links, so that they are always centered

with SwimLane1 do
begin
	with Elements do
	begin
		Add('Element A',Null,Null).ID := 'A';
		Add('Element B',Null,Null).ID := 'B';
		Add('Element C',Null,Null).ID := 'C';
		Add('Element D',Null,Null).ID := 'D';
	end;
	with Links do
	begin
		Add(SwimLane1.Elements.Item['A'],SwimLane1.Elements.Item['B'],Null);
		Add(SwimLane1.Elements.Item['A'],SwimLane1.Elements.Item['C'],Null);
		Add(SwimLane1.Elements.Item['B'],SwimLane1.Elements.Item['D'],Null);
		Add(SwimLane1.Elements.Item['B'],SwimLane1.Elements.Item['C'],Null);
	end;
	ShowLinks := EXSWIMLANELib_TLB.exShowLinks;
	DefArrange[EXSWIMLANELib_TLB.exDefArrangeDir] := OleVariant(1);
	Arrange(Null);
end
41
What options to align the elements do I have if I use Arrange method

with SwimLane1 do
begin
	BeginUpdate();
	ShowGridLines := True;
	with Elements do
	begin
		h1 := Add('Top Alignment',Null,Null).ID;
		Add('Element',Null,Null);
		Add('Element',Null,Null);
		Add('Element',Null,Null);
		h2 := Add('Center Alignment',Null,OleVariant(96)).ID;
		Add('Element',Null,OleVariant(96));
		Add('Element',Null,OleVariant(96));
		Add('Element',Null,OleVariant(96));
		h3 := Add('Bottom Alignment',Null,OleVariant(178)).ID;
		Add('Element',Null,OleVariant(192));
		Add('Element',Null,OleVariant(192));
		Add('Element',Null,OleVariant(192));
	end;
	with Links do
	begin
		Add(SwimLane1.Elements.Item[OleVariant(1)],SwimLane1.Elements.Item[OleVariant(2)],Null);
		Add(SwimLane1.Elements.Item[OleVariant(1)],SwimLane1.Elements.Item[OleVariant(3)],Null);
		Add(SwimLane1.Elements.Item[OleVariant(2)],SwimLane1.Elements.Item[OleVariant(4)],Null);
		Add(SwimLane1.Elements.Item[OleVariant(2)],SwimLane1.Elements.Item[OleVariant(3)],Null);
		Add(SwimLane1.Elements.Item[OleVariant(5)],SwimLane1.Elements.Item[OleVariant(6)],Null);
		Add(SwimLane1.Elements.Item[OleVariant(5)],SwimLane1.Elements.Item[OleVariant(7)],Null);
		Add(SwimLane1.Elements.Item[OleVariant(6)],SwimLane1.Elements.Item[OleVariant(8)],Null);
		Add(SwimLane1.Elements.Item[OleVariant(6)],SwimLane1.Elements.Item[OleVariant(7)],Null);
		Add(SwimLane1.Elements.Item[OleVariant(9)],SwimLane1.Elements.Item[OleVariant(10)],Null);
		Add(SwimLane1.Elements.Item[OleVariant(9)],SwimLane1.Elements.Item[OleVariant(11)],Null);
		Add(SwimLane1.Elements.Item[OleVariant(10)],SwimLane1.Elements.Item[OleVariant(12)],Null);
		Add(SwimLane1.Elements.Item[OleVariant(10)],SwimLane1.Elements.Item[OleVariant(11)],Null);
	end;
	DefArrange[EXSWIMLANELib_TLB.exDefArrangeAlign] := OleVariant(0);
	Arrange(OleVariant(h1));
	DefArrange[EXSWIMLANELib_TLB.exDefArrangeAlign] := OleVariant(1);
	Arrange(OleVariant(h2));
	DefArrange[EXSWIMLANELib_TLB.exDefArrangeAlign] := OleVariant(2);
	Arrange(OleVariant(h3));
	EndUpdate();
end
40
Is there an auto-arrange feature that will display the flow-chart centered and zoomed correctly after we are finished building it

with SwimLane1 do
begin
	with Elements do
	begin
		Add('Element A',Null,Null).ID := 'A';
		Add('Element B',Null,Null).ID := 'B';
		Add('Element C',Null,Null).ID := 'C';
		Add('Element D',Null,Null).ID := 'D';
	end;
	with Links do
	begin
		Add(SwimLane1.Elements.Item['A'],SwimLane1.Elements.Item['B'],Null);
		Add(SwimLane1.Elements.Item['A'],SwimLane1.Elements.Item['C'],Null);
		Add(SwimLane1.Elements.Item['B'],SwimLane1.Elements.Item['D'],Null);
		Add(SwimLane1.Elements.Item['B'],SwimLane1.Elements.Item['C'],Null);
	end;
	Arrange(Null);
end
39
Is it possible to change the distance between elements, when calling the Arrange method

with SwimLane1 do
begin
	with Elements do
	begin
		Add('Element A',Null,Null).ID := 'A';
		Add('Element B',Null,Null).ID := 'B';
		Add('Element C',Null,Null).ID := 'C';
		Add('Element D',Null,Null).ID := 'D';
	end;
	with Links do
	begin
		Add(SwimLane1.Elements.Item['A'],SwimLane1.Elements.Item['B'],Null);
		Add(SwimLane1.Elements.Item['A'],SwimLane1.Elements.Item['C'],Null);
		Add(SwimLane1.Elements.Item['B'],SwimLane1.Elements.Item['D'],Null);
		Add(SwimLane1.Elements.Item['B'],SwimLane1.Elements.Item['C'],Null);
	end;
	DefArrange[EXSWIMLANELib_TLB.exDefArrangeDX] := OleVariant(0);
	DefArrange[EXSWIMLANELib_TLB.exDefArrangeDY] := OleVariant(0);
	Arrange(Null);
end
38
How do I organize vertically the elements

with SwimLane1 do
begin
	with Elements do
	begin
		Add('Element A',Null,Null).ID := 'A';
		Add('Element B',Null,Null).ID := 'B';
		Add('Element C',Null,Null).ID := 'C';
		Add('Element D',Null,Null).ID := 'D';
	end;
	with Links do
	begin
		Add(SwimLane1.Elements.Item['A'],SwimLane1.Elements.Item['B'],Null);
		Add(SwimLane1.Elements.Item['A'],SwimLane1.Elements.Item['C'],Null);
		Add(SwimLane1.Elements.Item['B'],SwimLane1.Elements.Item['D'],Null);
		Add(SwimLane1.Elements.Item['B'],SwimLane1.Elements.Item['C'],Null);
	end;
	ShowLinksType := EXSWIMLANELib_TLB.exLinkStraight;
	DefArrange[EXSWIMLANELib_TLB.exDefArrangeDir] := OleVariant(1);
	Arrange(Null);
end
37
How can I add programatically a link

with SwimLane1 do
begin
	with Elements do
	begin
		Add('Element <sha ;;0>A',Null,Null);
		Add('Element <sha ;;0>B',OleVariant(96),OleVariant(24));
	end;
	with Links do
	begin
		Add(SwimLane1.Elements.Item[OleVariant(1)],SwimLane1.Elements.Item[OleVariant(2)],Null);
	end;
end
36
How do I get the link from the cursor
// MouseMove event - Occurs when the user moves the mouse.
procedure TForm1.SwimLane1MouseMove(ASender: TObject; Button : Smallint;Shift : Smallint;X : Integer;Y : Integer);
begin
	with SwimLane1 do
	begin
		l := (IUnknown(LinkFromPoint[-1,-1]) as _TLB.Object);
		OutputDebugString( l );
	end
end;

with SwimLane1 do
begin
	with Elements do
	begin
		Add('Element <sha ;;0>A',Null,Null);
		Add('Element <sha ;;0>B',OleVariant(96),OleVariant(24));
	end;
	with Links do
	begin
		Add(SwimLane1.Elements.Item[OleVariant(1)],SwimLane1.Elements.Item[OleVariant(2)],Null);
	end;
end
35
Is there a way to create a link which has the same start and end element

with SwimLane1 do
begin
	with Elements do
	begin
		Add('Element',Null,Null);
	end;
	with Links do
	begin
		Add(SwimLane1.Elements.Item[OleVariant(1)],SwimLane1.Elements.Item[OleVariant(1)],Null);
	end;
end
34
How can I show the pool's caption not-rotated or mirrored

with SwimLane1 do
begin
	BeginUpdate();
	AllowDesignHeader := EXSWIMLANELib_TLB.exDesignHeaderSingle;
	with Pools.Add(OleVariant(-150),OleVariant(-150),OleVariant(300),OleVariant(150)) do
	begin
		HeaderCaptionSupportRotate := False;
		HeaderSize[EXSWIMLANELib_TLB.exHeaderLeft] := 48;
		HeaderSize[EXSWIMLANELib_TLB.exHeaderRight] := 48;
		Lane[EXSWIMLANELib_TLB.exLaneHorizontal].Children.Count := 3;
	end;
	EndUpdate();
end
33
How can I prevent creating sub-lanes or sub-phases

with SwimLane1 do
begin
	BeginUpdate();
	AllowDesignHeader := EXSWIMLANELib_TLB.exDesignHeaderSingle;
	with Pools.Add(OleVariant(-150),OleVariant(-150),OleVariant(300),OleVariant(150)) do
	begin
		HeaderSize[EXSWIMLANELib_TLB.exHeaderLeft] := 32;
		HeaderSize[EXSWIMLANELib_TLB.exHeaderRight] := 32;
		Lane[EXSWIMLANELib_TLB.exLaneHorizontal].Children.Count := 3;
	end;
	EndUpdate();
end
32
How do I show a complete frame/border around the header

with SwimLane1 do
begin
	BeginUpdate();
	with Pools.Add(OleVariant(-150),OleVariant(-150),OleVariant(300),OleVariant(150)) do
	begin
		HeaderSize[EXSWIMLANELib_TLB.exHeaderTop] := 32;
		HeaderSize[EXSWIMLANELib_TLB.exHeaderBottom] := 32;
		with Lane[EXSWIMLANELib_TLB.exLaneVertical].Children do
		begin
			Count := 3;
			Item[OleVariant(1)].Header.Pattern.Type := EXSWIMLANELib_TLB.exPatternFrameThick;
		end;
	end;
	EndUpdate();
end
31
How do I show a complete frame/border around the lane

with SwimLane1 do
begin
	BeginUpdate();
	with Pools.Add(OleVariant(-150),OleVariant(-150),OleVariant(300),OleVariant(150)) do
	begin
		HeaderSize[EXSWIMLANELib_TLB.exHeaderTop] := 32;
		HeaderSize[EXSWIMLANELib_TLB.exHeaderBottom] := 32;
		with Lane[EXSWIMLANELib_TLB.exLaneVertical].Children do
		begin
			Count := 3;
			Item[OleVariant(1)].Pattern.Type := EXSWIMLANELib_TLB.exPatternFrameThick;
		end;
	end;
	EndUpdate();
end
30
How can I define sub-lanes

with SwimLane1 do
begin
	BeginUpdate();
	with Pools.Add(OleVariant(-150),OleVariant(-150),OleVariant(300),OleVariant(250)) do
	begin
		HeaderSize[EXSWIMLANELib_TLB.exHeaderTop] := 32;
		HeaderSize[EXSWIMLANELib_TLB.exHeaderBottom] := 32;
		with Lane[EXSWIMLANELib_TLB.exLaneVertical].Children do
		begin
			Count := 3;
			Item[OleVariant(1)].Children.Count := 2;
		end;
	end;
	EndUpdate();
end
29
How can I add default lanes when the user creates a new pool
// AddPool event - A new pool has been added to the surface.
procedure TForm1.SwimLane1AddPool(ASender: TObject; Pool : IPool);
begin
	// Pool.HeaderSize(1) = 24
	// Pool.HeaderVisible(0) = False
	// Pool.HeaderVisible(1) = True
	// Pool.HeaderVisible(2) = False
	// Pool.HeaderVisible(3) = False
	// Pool.Lane(1).Children.Count = 2
end;

with SwimLane1 do
begin
	BeginUpdate();
	Pools.Add(OleVariant(-100),OleVariant(-100),OleVariant(250),OleVariant(250));
	EndUpdate();
end
28
How do I prevent showing headers when the user creates new pools

// AddPool event - A new pool has been added to the surface.
procedure TForm1.SwimLane1AddPool(ASender: TObject; Pool : IPool);
begin
	with SwimLane1 do
	begin
		with Pool do
		begin
		end;
	end
end;

with SwimLane1 do
begin
	BeginUpdate();
	Pools.Add(OleVariant(-100),OleVariant(-100),OleVariant(250),OleVariant(250)).Lane[EXSWIMLANELib_TLB.exLaneHorizontal].Children.Count := 3;
	EndUpdate();
end
27
How can I display icons on headers

with SwimLane1 do
begin
	BeginUpdate();
	Images('gBJJgBAIDAAGAAEAAQhYAf8Pf4hh0QihCJo2AEZjQAjEZFEaIEaEEaAIAkcbk0olUrlktl0vmExmUzmk1m03nE5nU7nk9n0/oFBoVDolFo1HpFJpVLplNp1PqFRqVTql' + 
	'Vq1XrFZrVbrldr1fsFhsVjslls1ntFptVrtltt1vuFxuVzul1u13vF5vV7vl9v1/wGBwWDwmFw2HxGJxWLxmNx0xiFdyOTh8Tf9ZymXx+QytcyNgz8r0OblWjyWds+m0' + 
	'ka1Vf1ta1+r1mos2xrG2xeZ0+a0W0qOx3GO4NV3WeyvD2XJ5XL5nN51aiw+lfSj0gkUkAEllHanHI5j/cHg8EZf7w8vl8j4f/qfEZeB09/vjLAB30+kZQAP/P5/H6/yN' + 
	'AOAEAwCjMBwFAEDwJBMDwLBYAP2/8Hv8/gAGAD8LQs9w/nhDY/oygIA=');
	with Pools.Add(OleVariant(-100),OleVariant(-100),OleVariant(250),OleVariant(250)) do
	begin
		HeaderVisible[EXSWIMLANELib_TLB.exHeaderLeft] := False;
		HeaderVisible[EXSWIMLANELib_TLB.exHeaderRight] := False;
		HeaderVisible[EXSWIMLANELib_TLB.exHeaderBottom] := False;
		HeaderSize[EXSWIMLANELib_TLB.exHeaderTop] := 24;
		with Lane[EXSWIMLANELib_TLB.exLaneVertical].Children do
		begin
			Count := 3;
			Item[OleVariant(0)].Header.Caption := '<img>1</img> A';
			Item[OleVariant(1)].Header.Caption := '<img>2</img> B';
			Item[OleVariant(2)].Header.Caption := '<img>3</img> C';
		end;
	end;
	EndUpdate();
end
26
How do I change the Lane and Phase strings being displayed on the lanes

with SwimLane1 do
begin
	BeginUpdate();
	DefPoolHeaderCaptionFormat[True] := '<fgcolor 808080>Faza <off -4><b><font ;6>%i';
	DefPoolHeaderCaptionFormat[False] := '<fgcolor 808080>Culoar <off -4><b><font ;6>%i';
	with Pools.Add(OleVariant(-100),OleVariant(-100),OleVariant(250),OleVariant(250)) do
	begin
		Lane[EXSWIMLANELib_TLB.exLaneHorizontal].Children.Count := 3;
		Lane[EXSWIMLANELib_TLB.exLaneVertical].Children.Count := 3;
		Lane[EXSWIMLANELib_TLB.exLaneVertical].Children.Item[OleVariant(1)].Header.Caption := '<fgcolor FF0000><b>NEW';
	end;
	EndUpdate();
end
25
How can I enlarge the node while AutoSize property is True (method 2)

with SwimLane1 do
begin
	Background[EXSWIMLANELib_TLB.exElementBackColor] := $ffffff;
	with Elements.Add('Element',OleVariant(0),OleVariant(0)).Copy(Null,Null) do
	begin
		Caption := 'Enlarged Element';
		InflateSize := 16;
	end;
end
24
How can I enlarge the node while AutoSize property is True (method 1)

with SwimLane1 do
begin
	Background[EXSWIMLANELib_TLB.exElementBackColor] := $ffffff;
	with Elements.Add('Element',OleVariant(0),OleVariant(0)).Copy(Null,Null) do
	begin
		Caption := 'Enlarged Element';
		Padding[EXSWIMLANELib_TLB.exPaddingAll] := 16;
	end;
end
23
How can I get the lane of the element

with SwimLane1 do
begin
	BeginUpdate();
	Pools.Add(OleVariant(-150),OleVariant(-150),OleVariant(500),OleVariant(250)).Lane[EXSWIMLANELib_TLB.exLaneHorizontal].Children.Count := 3;
	with Elements.Add('Element',Null,Null) do
	begin
		CenterOnLane(False);
		lane := LaneID[False];
		OutputDebugString( SwimLane1.LaneByID[OleVariant(lane)].Header.Caption );
	end;
	EndUpdate();
end
22
How can I define a different shape for elements

// AddElement event - A new element has been added to the surface.
procedure TForm1.SwimLane1AddElement(ASender: TObject; Element : IElement);
begin
	with SwimLane1 do
	begin
		with Element do
		begin
		end;
	end
end;

with SwimLane1 do
begin
	BeginUpdate();
	with VisualAppearance do
	begin
		Add(1,'gBFLBCJwBAEHhEJAAChABAQDg6AADACAxRDQNABQKAAzQFAYahuHKGAAGEaBYgmFgAQhFcZQSKUOQTDKMIziYBYJhEMQwDiAUIjIK8IhkGIcZAGIBJCjWGodQLOEgwHI' + 
	'ERQjEyUJAGGYqEjaO41SpAdI0PCxUScACnDQiegJRgmQ4cTJSchSAKENx1JaeYReewwAqNd5TRwNIiydZUIhqGC1YRte4ZWiCWoJVzSVDLfbgAT4X60IIlCi5Mi6MIgD' + 
	'ZJFDUNLUdRBMKNJ7qagaWoWOaQRbmAQQTRYLQ/TiEXZDQRAAyLJIWVRQWTAAKVbw1LiEcznGCcejzIIDaZpOh4DplWzTOgALjta4IRpvNwAbIAF4gBqsLyXXLcdQyORM' + 
	'iwbxZgSDhgnQbJFC6F5JhECA8CADwIgMeQnmoQJlh0eAfGcXYZjwccOHiWx/moAJ6jed4DC2dJnnmQRxBcKABBoWAcHULZLHyV4mmGOx0FmdpZAMAgQhEQBpBiRxBlQc' + 
	'gZFUdAMEYAxQDECBNgaUYglkCQKBGZANk0QgBgQXAQgcGI0FwJAHA6WI+DGDAjCiVg0g2Yw4mYNg7E0eJ1H+DpkAiYhBg6JApBYRMvDkJhGhKJIImEA4QledZ8H+FJlE' + 
	'EQhWBAJa8loRoCgkdhYBAExZHQKIXmUYRCFQI5mgWfZ4hMJpJC4boTGcCY0m0QJVBAIh2EIZZ5H4VIVAqeZ1H8M5oAmSg7g8TR1n4fQrmUQZCgqF5eEmYhYBgKQJiCD4' + 
	'PmaegKhWJZnAQDZkhqaYKFocYnGadZ8h+KJoiGQhfEIURAmKEAYAgeo1H8OZrAoeoyhGKYngaHInmuCpOjmKAkHMHo+iiSZxmKQoXkGCwWigRQlnqLh7jKSh7DYUYzm0' + 
	'CgAk+DIrFCAo3i6LYKnKWYuk6Wp4keKIqDsLh7BYLhJmaZo5mcYAijAOZtFsXpajubZLG6co8CSShtnYeJrGeVpzjwbxLnafI/mcK5ZnmPgtGuap+j6cIMB8CocDAK43' + 
	'AaQAwjwJwQkSaZsDcBI7jETBHBqRhxkibwWkCMQsgcG5Ii2TB+nkN5yEyJwjkqcJMh8DpKDKTIrB2TBmnyGwFkwMw8mcMpOmQbJbBiTwziyUxBDsc5sD8QJRnQKprEWT' + 
	'g0g0DxNlKMpsF8RpSHUTQ7BuUp0n0VxZi4MxrDSJ40DYDYHGKWJ2E2FxmyADYnGqMRBgeYh0FOLh9kccpcncJsVw7RdjvA2M4eovRmCSFkMwQIoAQEBA');
		Add(2,'gBFLBCJwBAEHhEJAAChABAIDg6AADACAxRDQNABQKAAzQFAYaBmG6GAAGEaBYgmFgAQhFcZQSKUOQTDKMIziYBYJhEMQ1DAAUIjKLMIhmGAYJAGIBJCjWGodQLOEgwHI' + 
	'ERQjEyUpIyVAkYw5HqNaQjICoJoSOwAU47IaCIAFJSpCygKKgSjhRpoAAyU5IUgVPC4XSbD6zYDqapaTheEQyDSJNr3DCMUTlFYYLrmaQKMhqZJhWjbFSWXUpJ4pSrLM' + 
	'IyfTwZRJGzIK7jabLIjaP6GUDhVaYbRUL46CiEb5AAJsVpCCZrYRJOYVdQeDYbQCNLDhHQIDqaA6kZRAdQ2bpMBznPSvbovDgLWhGYqhbLCNibRC+d4HNrCYIlCjpMw3' + 
	'CYGIOHOMRsm0OxFjSZppneHQNFcSwRAOaprjqY4dgYe4VgGWwADucRuHYCpdByYROH8AAOC8D4NgEXwYBWEZyGAWoHg2MRCECBAkFAGhGDGUB1ByBhQkUIAPgCRAMEIE' + 
	'xhIuNhCEKBAlnAcwQgAYQXAIIRWEUFwJAGQ42CiCoihiLgugsYwDjSZ4MkICJWCaDZjgiZg6EIQQInSV4PmKeIyEKEBkBQDhEgwZBzjSd4SlEQJgk+E5khkRhIhSZA5F' + 
	'IUoVGWCQkl+FpkliTJnhXSYaFaGJOlEIhmC2ZoJgIZIaiWGYuG62IpDyT4TGSM5eGyCpmCnPIcCeQg+H6HZmnoAh6iAaBDjSL4hkUCgmgKHhlHmeIPh8BwKAqEohGkOg' + 
	'OHCI4pAmMoMhUKByj6CQUCkWoGhSKJpGkJoQiOJR6G4cYTmcSQuiKKRqEqPovhmBIJiCN4YEACQGFsN5lliToyiwbAKkKQoSGcWQ2HKERrhiJJvjLUR8leL5sDsBpQiU' + 
	'ZZpDaO4eAACZWh+LYtDsSpejQbmJnIEAuEsLJvECRgLiSH46m2W4Gl+OxpFqWo0ECSR7lQaI9m8C4+nqO4uAIHp+B4MAJmcAAeC+YgenmPwwHwHInkKRYMDaWIQGmeh3' + 
	'AmPpxDsCJHkWbhBAIdZDmMGZXBmRZMHwVwikUIwam0MAMC4awiEmOYyHsXwkkIMp5jMLBMDKaRiiqEBsmkNwpkwc5MyiHRrEKfxCiobIaFsQgvmsTBvD2SJuAwNBYkKS' + 
	'h6GsRYbDUDQ7EyVZmEwDwFiKdQ6BQf5XnYDRjD6IIujIfppBgKRcl6BZZnYXYLBWLYpn0KpglqLAtAIZoOneBsZw9RJjnQ+AYQAgCAg=');
		Add(3,'gBFLBCJwBAEHhEJAAChABQsMACAADACAxRDQNABQKAAzQFAYawLBgABhGUZoJhUAIIRZGMIjFDcEwxC6NIpAWCYQgUNQCQiNAzxAKQchhD4ZAIkGY4ZhyA42SBAcbyDC' + 
	'EShoGqPRhmCg5UjmM4oQLSFDULC0fSBBIYaSGEY5QoqIYfArGQYQTRUPyUdoOBIACwLChWLA1CTZdowSKoYTXBq3IgqerIapmSYaV7YNh3VY1IR/JSVJYlaYJDoyNI4T' + 
	'hHc5xVLtfSfAiiJrxOKcTAAFJ0QKFUbRUz+OgBTpvaZxagaSpSG5WRpWEI5PAdN4zTa7YDsS67FiSG5oWpEFq2eAGdzlVLMMqhG5gAxqNKzbLfMCXfJIbyrBIcYLoXIt' + 
	'CqFYskMTwxlgAY+haFZRlQZQ4HwHR3AoMx5jEch2lMfZGl8eY+jYXBvBsAAHFeRQDmuRR8nsSI2CoEgIEIRQBiQYwdAcUZIGUUIQhGGAGECRAhDYChGFERAMCgQheEcG' + 
	'QgHkEAwkICx2BCFoAj+B5iAiBgigiYhIgid4JkIQBwm2ChijiKgsguYpokYLYMmKQIiDYDgjgEAg6g6Y5InYPoPmOIAiEKEJFgkFIvhGYwIlIMoSTmAhOGgJJJC4UoSi' + 
	'USIcncKZlp8WoOAOAxeF6FBlEkNhPGcZgJhYU4ZiMMweGoDAmkGfhuhWJoJDgIIUCYeZWGGHYkhkWhuB+ZYhEIcIUmcKZSHeIJmgoFgyCeaIBgKCoYCgGYSHiI5oEoQg' + 
	'siKBgKCCH4SOAfoGiQaZKPmJ5jGCIJniiZgpk6DonGkKomgOHpnjqFoCiaawKioSYXg0eoGi6KZrBqIo6hgEIal6GosiwCpuDIBgsEqDJniYa4bVuFYkDqepKjCLQJii' + 
	'R4XCyawGk+JpGgsZIXjabRbEKV4disSYwDCH5OlsIpWjmaA5HKUomCYOp+l6OgkhoUoWiMLpbH6bw7G0KRynOHYuGuXobhWB4MAaaoaimO52naB4hnkYInhERYLBAGAh' + 
	'nECw+H2BwhkmSg7kMMIqHyb49hAECAg=');
		Add(4,'gBFLBCJwBAEHhEJAAChABOIDg6AADACAxRDQNABQKAAzQFAYaBqGCGAAGEZRSgmFgAQhFcZQTCsBw7DCEYxjOAwFgmEQxDIOIBQSKYcwiGQaRrkIYgEiONoaR7HchSFI' + 
	'cIxPFKRBhkKYocjyG5GRoBcIyXAcRSYAB2Q4ESoKShePw5UDTcCzHR8RxEDKNRLpOQbDgOUZTWbVUaDKIsXzZCKHbZhG4YRp6CZKRpYEB1bYtKTRKqLKrpeTbOoSHolT' + 
	'biIATTYlG4THyEZQrDIaDjOSIXZaGFzwSDWGgBJ60bRwHIaAxGWoHRxfEZVfBONQHMSBc5xa64JyHAImWrcUbWfaYYZ0AC6MRkK8cXABPQANixKZsCizE4DDbTYzjRhe' + 
	'C2F4nnEOJRG0BRXEWOICEocByiyCJTiQOJVGYIQ8gofpDgsG5uF+ah6D2Xp+GGP5gkCfwRHofwOnuSB2heVpZnIUZQhAIQJBQBoRgwdAdEcIYVEIQhGGAMQDBCBJYEUG' + 
	'gNhCEMcHsXIkCIAAMIILQWAkAZDjYJIJiIWIeCqCRMHiNI/guYwIkYMoMmMSJWDaDZjgiTIzg6Yo4iIPoPGIdAmECChiFKXhGAQJIAmISgQCSSQ2E6E5lAkRhShSZRJF' + 
	'QOoVkCaRkAqFpQhIPhehCY54hYQoRCOYo+GaExOnmJhghqZhJjIYYbmaaJ0l+HJkiCYgtDGY5RkIegfmeSY6GOD4MnoBh1D2aBJkYbYhmcCgigaIhOloEJ3h0aATD4bg' + 
	'WCkQoehaGAnniHhNgwKI6HaConmiSYCF4I5niGQoLDmaoAiKKoaE6eJ2H+HZnFoeohigKwqCwGItmqA4ejIHgrkIHo+iuEA4h6PGMmIHo1i0LIKk6SoMCSWwcm2LAkis' + 
	'AAAgmQgLFYcw3myaxmkmG4GgsdIXjebYjjaVQIC0eQFAONADguBpqjaaIKlwGIuG4GwOkWOYAAqDoljqbIrmIJ41m4O5iGYK5FAwBp0ikag7mqbI+GoCwyEyPgpBCQwO' + 
	'j0KRBGKFgpnAbAjXWMQ8EaeIuG6a5SHWHZxFyBoIjEbA8FQCJJmiZAmmOORwHyCwXgkbwqn8LYoDKOZNAmJpinyOzTm8aZrBWH5QhGAxCCedBMm8L5Fi+fAEFCPgvksV' + 
	'p0h8NQBn8RpLi7NQKBALxLHyF43EaDRPDOMoxkqXp4kYaRLlMTQIDWbQeguR5iluBxCBgNBCH6dIJnaSZjF+LQZgGQSh5DOFEa4dQsi5GILsaA8ReBuHoEYZ4ZwkDFFw' + 
	'JEYo2grjcHOFUAoFA7gJFqFEDYrQyilC+PwNgyRBBLH4C8FIzxiD8CeBYEgUQ9CtAiEwYgtQyDqDWPUTjBhXBrCmAcKoJQ6iGF6DEMA8BpieA4BgMQdxDg9GSOkLQgRC' + 
	'jhHiDMV4Ewfh3AoGULIiBujRAuJ0c4+gEi4ASOkRAfhWgjCKKEFACCAg');
		Add(5,'gBFLBCJwBAEHhEJAAChABGgDg6AADACAxRDQNABQKAAzQFAYZBwGiGAAGEaRWgmFgAQhFcZQSKUOQTDKMIziYBYJAKCQ3DTJUBjIKcIhiGsgAzAJIUaw1DqGY7nKZoRi' + 
	'oAIoSAMM7DCKUQSLGyQZqBSCQGjsAI+OyHAiABSNJwtHygIRoKqqHg2PoiSAEUZhdRlHShKSqLQiaIRSDUJZsW5EIyjBZ8EznOqbJApOKrCgOTYaWbUdSxPTEUwTFiXJ' + 
	'gmKRKIoiOAAY7IEgSFLsThrIKha5yDI4bxyAwXQjeYABbY0E4HQarcqzCrKGp/HYJXyAGgQHYkB5JAaQMBtGpoJrCeKQXDdVyXFwdET1BLZQA2HeUTTRVCScqnaTMZh8' + 
	'DgGxniKfYbngAxFkmVJAnSdougwDhRlMGZ1GEPR9HQapDGWWhyCMe4ugQDx9naYRvm6cQfAUJ47m8cofBYAZOGCHg2mETgCBCERAGkGJHEGVByBkUwUCSIgChAMQIE2B' + 
	'JRiQVQDAoEIWlWIxOgGBBcGyBQYlQXAkAcDpYh4KYKCKKI2CyC5ijONJvgySZ4lQWINkKCJmCWDpjkQaJPg+UA4joMYQiQI4eEYHAkgAYhKBgJJCh43JlAkEgwhSJA5E' + 
	'4VoVE6UQCFoL5lkkBhXhUCR5gYOQKAieYUneGZlEmJhfhqZYJFIWgQCWQp+F6GxigmHJ3BoJ4JmYMw7maKZSH6HxoAiQhvhwZ1VHYFAogmBIXiAZ55jKDIQgeChGG+G5' + 
	'BAoVJHiWaBYkIecznoOoeiMZYCj6IoYmcGhckeCophONoKh4aZagKLYrGkEZggeLJkCmThGDmZg5m6L4nmuOoCHaGJNnsBooAAIopCAcIZEiep2kqLwpnqCIviIBQLA4' + 
	'dolEECZakuK4sksYhYAgLZLOsQJLHuBBIjibR7haWYfGwawhAOJpmBuGpajuJRJkYbxAmgORynCOZvgqApejcAgIG4OYUA0e5em+PhokQXhKAYKx8AsCo+FEcJDA6D5M' + 
	'nwLwDkTWJulQQJuDEIphC2cQsHYbJEDCYJBAOLBrDIHwekUMBIiITgpmMcRhAOKYDgyRwnkyYwMjcK4cnAfAnCmSgzkoGhnkGZ45k6SIxjMTPIFCZOZEKSBxA0Fpui2b' + 
	'5LFoKIqGoaY/FKUY1gmdpQjOKxbBIV4zi0DQ6nmOhmFkUophCLILEMV5YiWCZkH+W5nl2HxfiiMwQmMTZOmqLhaLsx9iUH6JAMI1hCDjECFQawhghjBG2DseoGQzhNHw' + 
	'DwTAMAsgTEeCUZI1Q5jFHyLodYmWxB8GsPEVIPwxhSD6Awb4dgJD2HsAQQIoAQEB');
	end;
	Background[EXSWIMLANELib_TLB.exElementBackColor] := $ffffff;
	with Elements do
	begin
		Add('Rectangular',OleVariant(0),OleVariant(0)).Shape := EXSWIMLANELib_TLB.exShapeRectangular;
		Add('Round',OleVariant(82),OleVariant(0)).Shape := EXSWIMLANELib_TLB.exShapeRound;
		Add('Rhomb',OleVariant(138),OleVariant(0)).Shape := EXSWIMLANELib_TLB.exShapeRhomb;
		Add('Circle',OleVariant(196),OleVariant(0)).Shape := EXSWIMLANELib_TLB.exShapeCircle;
		with Add('EBN 1',OleVariant(0),OleVariant(36)) do
		begin
			BackColor := $1000000;
			Border := EXSWIMLANELib_TLB.exNoLines;
		end;
		with Add('EBN 2',OleVariant(54),OleVariant(36)) do
		begin
			BackColor := $2000000;
			Border := EXSWIMLANELib_TLB.exNoLines;
		end;
		with Add('EBN 3',OleVariant(108),OleVariant(36)) do
		begin
			BackColor := $3000000;
			Border := EXSWIMLANELib_TLB.exNoLines;
		end;
		with Add('EBN 4   ',OleVariant(160),OleVariant(36)) do
		begin
			BackColor := $4000000;
			Border := EXSWIMLANELib_TLB.exNoLines;
		end;
		with Add('EBN 5 ',OleVariant(220),OleVariant(36)) do
		begin
			BackColor := $5000000;
			MinHeight := 64;
			MinWidth := 64;
			Border := EXSWIMLANELib_TLB.exNoLines;
		end;
	end;
	ScrollPos[False] := -160;
	EndUpdate();
end
21
Is it possible to add an inner control on the surface

// OleEvent event - Occurs once an inside control fires an event.
procedure TForm1.SwimLane1OleEvent(ASender: TObject; Element : IElement;Ev : IOleEvent);
begin
	with SwimLane1 do
	begin
		OutputDebugString( Ev );
	end
end;

with SwimLane1 do
begin
	with Elements do
	begin
		with Add('activex hosting',Null,Null) do
		begin
			Type := EXSWIMLANELib_TLB.exElementHostControl;
			Control := 'Forms.CommandButton.1';
			Caption := 'Command Button';
			Height := 64;
			Width := 128;
			ElementFormat := '14;"caption"/"client"';
			CaptionAlign := EXSWIMLANELib_TLB.exTopCenter;
		end;
	end;
end
20
How can I create a copy of the element
with SwimLane1 do
begin
	Background[EXSWIMLANELib_TLB.exElementBackColor] := $ffffff;
	Elements.Add('Element 1',OleVariant(0),OleVariant(0)).Copy(Null,Null).Caption := 'Aka';
end
19
How can I define an opaque background for elements

with SwimLane1 do
begin
	Background[EXSWIMLANELib_TLB.exElementBackColor] := $ffffff;
	Elements.Add('Element 1',OleVariant(0),OleVariant(0));
	Elements.Add('Element 2',OleVariant(16),OleVariant(16));
end
18
How can I show a different context-menu for all elements
// ActionContextMenu event - Occurs when the user selects an item from the object's context menu.
procedure TForm1.SwimLane1ActionContextMenu(ASender: TObject; Action : ContextMenuObjectActionEnum;ObjectType : ContextMenuObjectTypeEnum;ObjectID : OleVariant;CommandID : Integer;CommandChecked : WordBool;CommandCaption : OleVariant;CommandValue : OleVariant;var Cancel : WordBool);
begin
	with SwimLane1 do
	begin
		OutputDebugString( Action );
		OutputDebugString( ObjectID );
		OutputDebugString( CommandID );
	end
end;

with SwimLane1 do
begin
	ContextMenu[EXSWIMLANELib_TLB.exContextMenuElement] := 'Item 1[id=1000],Item 2[id=2000]';
	Background[EXSWIMLANELib_TLB.exElementBackColor] := $ffffff;
	Elements.Add('Element 1',OleVariant(0),OleVariant(0));
	Elements.Add('Element 2',OleVariant(16),OleVariant(16));
end
17
How can I show a different context-menu for element
with SwimLane1 do
begin
	OutputDebugString( Elements.Add('Element',OleVariant(0),OleVariant(0)).InvokeContextMenu('Item 1[id=1000],Item 2[id=2000]') );
end
16
How can I change the design-modes being shown on the control's toolbar

with SwimLane1 do
begin
	DesignModes := 'Read-Only#0,Allow Any#3,Only-Element#1,Only-Pool#2';
end
15
How can I change the default header's background color

with SwimLane1 do
begin
	BeginUpdate();
	with Pools.Add(OleVariant(-250),OleVariant(-150),OleVariant(500),OleVariant(250)) do
	begin
		Lane[EXSWIMLANELib_TLB.exLaneHorizontal].Children.Count := 4;
		Lane[EXSWIMLANELib_TLB.exLaneVertical].Children.Count := 4;
	end;
	Background[EXSWIMLANELib_TLB.exPoolHorizontalHeaderBackColor] := $ff00;
	Background[EXSWIMLANELib_TLB.exPoolVerticalHeaderBackColor] := $c000;
	EndUpdate();
end
14
How can I remove the Design item from the control's toolbar, to be locked ( no-design )

with SwimLane1 do
begin
	ToolBarFormat := '-1,100,101';
	DesignMode := EXSWIMLANELib_TLB.exDesignLock;
end
13
How can I remove/disable the Color and Display-Grid from the surface's context menu

with SwimLane1 do
begin
	ContextMenu[EXSWIMLANELib_TLB.exContextMenuSurface] := 'Delete[id=-32004](All[id=-32000][ttp=Deletes all the objects from the surface],[sep],Elements[id=-32001][ttp=Deletes all element' + 
	's from the surface],Links[id=-32002][ttp=Deletes all links from the surface],Pools[id=-32003][ttp=Deletes all pools from the sur' + 
	'face])';
end
12
How can I change the element's context-menu when the user right-clicks the element

// ActionContextMenu event - Occurs when the user selects an item from the object's context menu.
procedure TForm1.SwimLane1ActionContextMenu(ASender: TObject; Action : ContextMenuObjectActionEnum;ObjectType : ContextMenuObjectTypeEnum;ObjectID : OleVariant;CommandID : Integer;CommandChecked : WordBool;CommandCaption : OleVariant;CommandValue : OleVariant;var Cancel : WordBool);
begin
	// ContextMenuObjectFromID(ObjectType,ObjectID).BackColor = RGB(255,255,0)
	with SwimLane1 do
	begin
		OutputDebugString( Action );
		OutputDebugString( CommandCaption );
	end
end;

with SwimLane1 do
begin
	BeginUpdate();
	Elements.Add('element',OleVariant(0),OleVariant(0));
	ContextMenu[EXSWIMLANELib_TLB.exContextMenuElement] := 'Simple,Value[edit=123],[sep],Popup(Check 1[chk],Check 2[chk=1])';
	EndUpdate();
end
11
How do I prevent showing the context-menu when user right-clicks the surface
with SwimLane1 do
begin
	ContextMenu[EXSWIMLANELib_TLB.exContextMenuSurface] := '';
end
10
How do I create parent-child (tree) lanes

with SwimLane1 do
begin
	BeginUpdate();
	with Pools.Add(OleVariant(-250),OleVariant(-150),OleVariant(500),OleVariant(250)) do
	begin
		HeaderSize[EXSWIMLANELib_TLB.exHeaderTop] := 32;
		HeaderVisible[EXSWIMLANELib_TLB.exHeaderBottom] := False;
		with Lane[EXSWIMLANELib_TLB.exLaneVertical].Children do
		begin
			Count := 2;
			with Item[OleVariant(0)].Children do
			begin
				Count := 2;
				Item[OleVariant(0)].Header.Caption := 'Phase <b>1.1';
				Item[OleVariant(1)].Header.Caption := 'Phase <b>1.2';
			end;
		end;
	end;
	EndUpdate();
end
9
How do I create a pool with horizontal and lanes

with SwimLane1 do
begin
	BeginUpdate();
	with Pools.Add(OleVariant(-250),OleVariant(-150),OleVariant(500),OleVariant(250)) do
	begin
		Lane[EXSWIMLANELib_TLB.exLaneHorizontal].Children.Count := 4;
		Lane[EXSWIMLANELib_TLB.exLaneVertical].Children.Count := 4;
	end;
	EndUpdate();
end
8
How do I add programatically a pool with horizontal lanes

with SwimLane1 do
begin
	BeginUpdate();
	with Pools.Add(OleVariant(-250),OleVariant(-150),OleVariant(500),OleVariant(250)) do
	begin
		Lane[EXSWIMLANELib_TLB.exLaneHorizontal].Children.Count := 4;
	end;
	EndUpdate();
end
7
How do I add programatically a pool with vertical lanes

with SwimLane1 do
begin
	BeginUpdate();
	with Pools.Add(OleVariant(-250),OleVariant(-150),OleVariant(500),OleVariant(250)) do
	begin
		Lane[EXSWIMLANELib_TLB.exLaneVertical].Children.Count := 4;
	end;
	EndUpdate();
end
6
How can I change the toolbar's visual appearance

with SwimLane1 do
begin
	VisualAppearance.Add(1,'c:\exontrol\images\normal.ebn');
	Background[EXSWIMLANELib_TLB.exToolBarAppearance] := $1000000;
	Background[EXSWIMLANELib_TLB.exToolBarBackColor] := $ffffff;
	Background[EXSWIMLANELib_TLB.exToolBarForeColor] := $282828;
	Background[EXSWIMLANELib_TLB.exToolBarButtonDownBackColor] := $1606060;
	Background[EXSWIMLANELib_TLB.exToolBarButtonDownForeColor] := $f0f0f0;
	Background[EXSWIMLANELib_TLB.exToolBarButtonHotBackColor] := $1a0a0a0;
	Background[EXSWIMLANELib_TLB.exToolBarButtonHotForeColor] := $ffffff;
end
5
How can I change the toolbar's background color

with SwimLane1 do
begin
	Background[EXSWIMLANELib_TLB.exToolBarBackColor] := $ffffff;
end