156
|
Fullfit the caption on the element's width
![](images/exsurfaceq156.png)
with Surface1 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 := EXSURFACELib_TLB.exCaptionBreakWrap;
BackColor := $f8f8f8;
AutoSize := False;
Width := 194;
Height := 76;
CaptionAlign := EXSURFACELib_TLB.ContentAlignmentEnum($4);
end;
end
|
155
|
Wrap the caption by <br> or "\r\n" sequence only
![](images/exsurfaceq155.png)
with Surface1 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 := EXSURFACELib_TLB.exCaptionBreakWrap;
BackColor := $f8f8f8;
end;
end
|
154
|
Display a custom tooltip
// MouseMove event - Occurs when the user moves the mouse.
procedure TForm1.Surface1MouseMove(ASender: TObject; Button : Smallint;Shift : Smallint;X : Integer;Y : Integer);
begin
with Surface1 do
begin
ShowToolTip('new content','',Null,'+8','+8');
end
end;
|
153
|
Shows the tooltip of the object moved relative to its default position
// MouseMove event - Occurs when the user moves the mouse.
procedure TForm1.Surface1MouseMove(ASender: TObject; Button : Smallint;Shift : Smallint;X : Integer;Y : Integer);
begin
with Surface1 do
begin
ShowToolTip('<null>','<null>',Null,'+8','+8');
end
end;
with Surface1 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
|
152
|
Rename Undo/Redo commands into the control's toolbar
![](images/exsurfaceq152.png)
with Surface1 do
begin
BeginUpdate();
AllowUndoRedo := True;
ToolBarFormat := '-1,100,101,|,103,104';
ToolBarCaption[100] := '<img>1</img>Acasa';
ToolBarCaption[103] := 'Anuleaza <img>3</img>';
ToolBarCaption[104] := '<img>4</img>Reface';
ToolBarToolTip[100] := 'Restabileste vizualizarea la origine.';
ToolBarToolTip[101] := 'Mareste vizualizarea.';
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.';
with Elements do
begin
Add('Item <b>1',OleVariant(-64),OleVariant(-48));
Add('Item <b>2',OleVariant(32),OleVariant(32));
end;
Links.Add(Surface1.Elements.Item[OleVariant(1)],Surface1.Elements.Item[OleVariant(2)],Null);
EndUpdate();
end
|
151
|
Add Undo/Redo commands to control's toolbar
![](images/exsurfaceq151.png)
with Surface1 do
begin
BeginUpdate();
AllowUndoRedo := True;
ToolBarFormat := '-1,100,101,|,103,104';
with Elements do
begin
Add('Item <b>1',OleVariant(-64),OleVariant(-48));
Add('Item <b>2',OleVariant(32),OleVariant(32));
end;
Links.Add(Surface1.Elements.Item[OleVariant(1)],Surface1.Elements.Item[OleVariant(2)],Null);
EndUpdate();
end
|
150
|
Clear Undo/Redo queue (method 2)
with Surface1 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(Surface1.Elements.Item[OleVariant(1)],Surface1.Elements.Item[OleVariant(2)],Null);
c := UndoRedoQueueLength;
UndoRedoQueueLength := 0;
UndoRedoQueueLength := c;
OutputDebugString( UndoListAction[Null,Null] );
EndUpdate();
end
|
149
|
Clear Undo/Redo queue (method 1)
with Surface1 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(Surface1.Elements.Item[OleVariant(1)],Surface1.Elements.Item[OleVariant(2)],Null);
AllowUndoRedo := True;
OutputDebugString( UndoListAction[Null,Null] );
EndUpdate();
end
|
148
|
Removes Redo operations
with Surface1 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(Surface1.Elements.Item[OleVariant(1)],Surface1.Elements.Item[OleVariant(2)],Null);
Undo();
RedoRemoveAction(OleVariant(10),Null);
OutputDebugString( RedoListAction[Null,Null] );
EndUpdate();
end
|
147
|
Removes Undo operations
with Surface1 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(Surface1.Elements.Item[OleVariant(1)],Surface1.Elements.Item[OleVariant(2)],Null);
UndoRemoveAction(OleVariant(10),Null);
OutputDebugString( UndoListAction[Null,Null] );
EndUpdate();
end
|
146
|
Record the UI operations as a block of undo/redo operations
![](images/exsurfaceq146.png)
with Surface1 do
begin
BeginUpdate();
AllowUndoRedo := True;
StartBlockUndoRedo();
with Elements do
begin
Add('Item <b>1',OleVariant(-64),OleVariant(-64));
Add('Item <b>2',Null,Null);
end;
Links.Add(Surface1.Elements.Item[OleVariant(1)],Surface1.Elements.Item[OleVariant(2)],Null);
EndBlockUndoRedo();
OutputDebugString( UndoListAction[Null,Null] );
EndUpdate();
end
|
145
|
Groups the next to current Undo/Redo Actions in a single block
![](images/exsurfaceq145.png)
with Surface1 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(Surface1.Elements.Item[OleVariant(1)],Surface1.Elements.Item[OleVariant(2)],Null);
GroupUndoRedoActions(3);
OutputDebugString( UndoListAction[Null,Null] );
EndUpdate();
end
|
144
|
Limits the number of entries within the Undo/Redo queue
![](images/exsurfaceq144.png)
with Surface1 do
begin
BeginUpdate();
AllowUndoRedo := True;
UndoRedoQueueLength := 1;
with Elements do
begin
Add('Item <b>1',OleVariant(-64),OleVariant(-64));
Add('Item <b>2',Null,Null);
end;
Links.Add(Surface1.Elements.Item[OleVariant(1)],Surface1.Elements.Item[OleVariant(2)],Null);
OutputDebugString( UndoListAction[Null,Null] );
EndUpdate();
end
|
143
|
Lists the Redo actions that can be performed on the surface
![](images/exsurfaceq143.png)
with Surface1 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(Surface1.Elements.Item[OleVariant(1)],Surface1.Elements.Item[OleVariant(2)],Null);
Undo();
OutputDebugString( RedoListAction[Null,Null] );
EndUpdate();
end
|
142
|
Lists the Undo actions that can be performed on the surface
![](images/exsurfaceq142.png)
with Surface1 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(Surface1.Elements.Item[OleVariant(1)],Surface1.Elements.Item[OleVariant(2)],Null);
OutputDebugString( UndoListAction[Null,Null] );
EndUpdate();
end
|
141
|
Checks whether the Undo operation is possible
![](images/exsurfaceq141.png)
with Surface1 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(Surface1.Elements.Item[OleVariant(1)],Surface1.Elements.Item[OleVariant(2)],Null);
Undo();
OutputDebugString( 'CanRedo' );
OutputDebugString( CanRedo );
EndUpdate();
end
|
140
|
Call Redo by code
![](images/exsurfaceq140.png)
with Surface1 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(Surface1.Elements.Item[OleVariant(1)],Surface1.Elements.Item[OleVariant(2)],Null);
Undo();
Redo();
EndUpdate();
end
|
139
|
Checks whether the Undo operation is possible
![](images/exsurfaceq139.png)
with Surface1 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(Surface1.Elements.Item[OleVariant(1)],Surface1.Elements.Item[OleVariant(2)],Null);
OutputDebugString( 'CanUndo' );
OutputDebugString( CanUndo );
EndUpdate();
end
|
138
|
Call Undo by code
![](images/exsurfaceq138.png)
with Surface1 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(Surface1.Elements.Item[OleVariant(1)],Surface1.Elements.Item[OleVariant(2)],Null);
Undo();
EndUpdate();
end
|
137
|
Save the element's properties for Undo/Redo operations, by code
![](images/exsurfaceq137.png)
with Surface1 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(Surface1.Elements.Item[OleVariant(1)],Surface1.Elements.Item[OleVariant(2)],Null) do
begin
h := StartUpdateLink;
Color := $ff;
Width := 2;
ShowDir := False;
ShowLinkType := EXSURFACELib_TLB.exLinkStraight;
EndUpdateLink(h);
end;
EndBlockUndoRedo();
EndUpdate();
end
|
136
|
No color is restored for the link when Undo/Redo operation is executed
![](images/exsurfaceq136.png)
// AddElement event - A new element has been added to the surface.
procedure TForm1.Surface1AddElement(ASender: TObject; Element : IElement);
begin
// Element.ShowCheckBox = True
// Element.CheckBoxAlign = 2
end;
with Surface1 do
begin
BeginUpdate();
AllowUndoRedo := True;
with Elements do
begin
Add('Check <b>1',OleVariant(-64),OleVariant(-64));
Add('Check <b>2',Null,Null).Checked := EXSURFACELib_TLB.exChecked;
end;
StartBlockUndoRedo();
with Links.Add(Surface1.Elements.Item[OleVariant(1)],Surface1.Elements.Item[OleVariant(2)],Null) do
begin
h := StartUpdateLink;
Color := $ff;
Width := 2;
ShowDir := False;
ShowLinkType := EXSURFACELib_TLB.exLinkStraight;
EndUpdateLink(h);
end;
EndBlockUndoRedo();
EndUpdate();
end
|
135
|
Save the element's properties for Undo/Redo operations, by code
![](images/exsurfaceq135.png)
with Surface1 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
|
134
|
No color is restored for the element when Undo/Redo operation is executed
![](images/exsurfaceq134.png)
with Surface1 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
|
133
|
How can I ensure that a specified element fits the surface's visible area
![](images/exsurfaceq133.png)
with Surface1 do
begin
with Elements do
begin
with Add('Element A',OleVariant(-100),Null).Pattern do
begin
Type := EXSURFACELib_TLB.exPatternBDiagonal;
Color := $e0e0e0;
end;
Add('Element B',OleVariant(2000),Null).EnsureVisible();
end;
end
|
132
|
LayoutEndChanging(exUndo), LayoutEndChanging(exRedo) or LayoutEndChanging(exUndoRedoUpdate) notifiy your application once a Undo/Redo operation is executed (CTRL+Z, CTRL+Y) or updated
![](images/exsurfaceq132.png)
// AddElement event - A new element has been added to the surface.
procedure TForm1.Surface1AddElement(ASender: TObject; Element : IElement);
begin
// Element.ShowCheckBox = True
// Element.CheckBoxAlign = 2
end;
// LayoutEndChanging event - Notifies your application once the control's layout has been changed.
procedure TForm1.Surface1LayoutEndChanging(ASender: TObject; Operation : LayoutChangingEnum);
begin
with Surface1 do
begin
OutputDebugString( 'LayoutEndChanging' );
OutputDebugString( Operation );
end
end;
with Surface1 do
begin
BeginUpdate();
AllowUndoRedo := True;
with Elements do
begin
Add('Check <b>1',OleVariant(-64),OleVariant(-64));
Add('Check <b>2',Null,Null).Checked := EXSURFACELib_TLB.exChecked;
end;
Links.Add(Surface1.Elements.Item[OleVariant(1)],Surface1.Elements.Item[OleVariant(2)],Null);
EndUpdate();
end
|
131
|
Turn on the Undo/Redo feature
![](images/exsurfaceq131.png)
// AddElement event - A new element has been added to the surface.
procedure TForm1.Surface1AddElement(ASender: TObject; Element : IElement);
begin
// Element.ShowCheckBox = True
// Element.CheckBoxAlign = 2
end;
with Surface1 do
begin
BeginUpdate();
AllowUndoRedo := True;
with Elements do
begin
Add('Check <b>1',OleVariant(-64),OleVariant(-64));
Add('Check <b>2',Null,Null).Checked := EXSURFACELib_TLB.exChecked;
end;
Links.Add(Surface1.Elements.Item[OleVariant(1)],Surface1.Elements.Item[OleVariant(2)],Null);
EndUpdate();
end
|
130
|
ImageSize property on 32 (specifies the size of control' icons/images/check-boxes/radio-buttons)
![](images/exsurfaceq130.png)
// AddElement event - A new element has been added to the surface.
procedure TForm1.Surface1AddElement(ASender: TObject; Element : IElement);
begin
// Element.ShowCheckBox = True
end;
with Surface1 do
begin
BeginUpdate();
ImageSize := 32;
Font.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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');
end;
Background[EXSURFACELib_TLB.exCheckBoxState0] := $1000000;
Background[EXSURFACELib_TLB.exCheckBoxState1] := $2000000;
Background[EXSURFACELib_TLB.exCheckBoxState2] := $3000000;
with Elements do
begin
var_Element := Surface1.Elements.Add('Element Check 1',OleVariant(-64),OleVariant(-64));
Add('Child',Null,Null).Parent := (IUnknown(var_Element) as EXSURFACELib_TLB.Element);
with var_Element do
begin
Pictures := '1/2';
Expanded := False;
end;
with Add('Element Check 2',OleVariant(32),OleVariant(96)) do
begin
Checked := EXSURFACELib_TLB.exChecked;
Pictures := '1,2';
end;
end;
Home();
EndUpdate();
end
|
129
|
ImageSize property on 16 (default) (specifies the size of control' icons)
![](images/exsurfaceq129.png)
// AddElement event - A new element has been added to the surface.
procedure TForm1.Surface1AddElement(ASender: TObject; Element : IElement);
begin
// Element.ShowCheckBox = True
end;
with Surface1 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
var_Element := Surface1.Elements.Add('Element Check 1',OleVariant(-64),OleVariant(-64));
Add('Child',Null,Null).Parent := (IUnknown(var_Element) as EXSURFACELib_TLB.Element);
with var_Element do
begin
Pictures := '1/2';
Expanded := False;
end;
with Add('Element Check 2',OleVariant(0),OleVariant(32)) do
begin
Checked := EXSURFACELib_TLB.exChecked;
Pictures := '1,2';
end;
end;
Home();
EndUpdate();
end
|
128
|
We want to have option to start/end connectors at the middle of each side of the elements
![](images/exsurfaceq128.png)
with Surface1 do
begin
BeginUpdate();
ShowLinks := EXSURFACELib_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(Surface1.Elements.Item[OleVariant(1)],Surface1.Elements.Item[OleVariant(2)],Null);
Add(Surface1.Elements.Item[OleVariant(3)],Surface1.Elements.Item[OleVariant(2)],Null);
end;
FitToClient();
EndUpdate();
end
|
127
|
How can I determine the position the user clicks within the element's boundaries (Click event)
![](images/exsurfaceq127.png)
// Click event - Occurs when the user presses and then releases the left mouse button over the control.
procedure TForm1.Surface1Click(ASender: TObject; );
begin
with Surface1 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 Surface1 do
begin
BeginUpdate();
with Elements do
begin
Add('Element 1',Null,Null);
Add('Element 2',OleVariant(128),OleVariant(64));
end;
FitToClient();
EndUpdate();
end
|
126
|
How can I determine the position the user clicks within the element's boundaries (MouseMove event)
![](images/exsurfaceq126.png)
// MouseMove event - Occurs when the user moves the mouse.
procedure TForm1.Surface1MouseMove(ASender: TObject; Button : Smallint;Shift : Smallint;X : Integer;Y : Integer);
begin
with Surface1 do
begin
e := (IUnknown(ElementFromPoint[X,Y]) as _TLB.Object);
PointToPosition(X,Y);
OutputDebugString( e );
OutputDebugString( X );
OutputDebugString( Y );
end
end;
with Surface1 do
begin
BeginUpdate();
with Elements do
begin
Add('Element 1',Null,Null);
Add('Element 2',OleVariant(128),OleVariant(64));
end;
FitToClient();
EndUpdate();
end
|
125
|
How can I convert the screen position (mouse) to surface position
![](images/exsurfaceq125.png)
// MouseMove event - Occurs when the user moves the mouse.
procedure TForm1.Surface1MouseMove(ASender: TObject; Button : Smallint;Shift : Smallint;X : Integer;Y : Integer);
begin
with Surface1 do
begin
OutputDebugString( 'Point ' );
OutputDebugString( X );
OutputDebugString( Y );
PointToPosition(X,Y);
OutputDebugString( 'Position ' );
OutputDebugString( X );
OutputDebugString( Y );
end
end;
with Surface1 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(Surface1.Elements.Item[OleVariant(1)],Surface1.Elements.Item[OleVariant(2)],Null);
Add(Surface1.Elements.Item[OleVariant(3)],Surface1.Elements.Item[OleVariant(2)],Null);
Add(Surface1.Elements.Item[OleVariant(3)],Surface1.Elements.Item[OleVariant(1)],Null);
end;
FitToClient();
AxisStyle := EXSURFACELib_TLB.LinesStyleEnum($c0);
AxisColor := RGB(128,128,128);
EndUpdate();
end
|
124
|
Is is possible to show just the positive coordinates
![](images/exsurfaceq124.png)
with Surface1 do
begin
BeginUpdate();
Coord := Integer(EXSURFACELib_TLB.exAllowPositiveOnly) Or Integer(EXSURFACELib_TLB.exCartesian);
AxisColor := RGB(128,128,128);
AxisStyle := Integer(EXSURFACELib_TLB.exLinesThick) Or Integer(EXSURFACELib_TLB.exLinesDot4);
ShowLinks := EXSURFACELib_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(Surface1.Elements.Item[OleVariant(1)],Surface1.Elements.Item[OleVariant(2)],Null);
Add(Surface1.Elements.Item[OleVariant(3)],Surface1.Elements.Item[OleVariant(2)],Null);
end;
FitToClient();
EndUpdate();
end
|
123
|
Cartesian coordinates (positive coordinates are shown top-right to the origin)
![](images/exsurfaceq123.png)
with Surface1 do
begin
BeginUpdate();
Coord := EXSURFACELib_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(Surface1.Elements.Item[OleVariant(1)],Surface1.Elements.Item[OleVariant(2)],Null);
Add(Surface1.Elements.Item[OleVariant(3)],Surface1.Elements.Item[OleVariant(2)],Null);
Add(Surface1.Elements.Item[OleVariant(3)],Surface1.Elements.Item[OleVariant(1)],Null);
end;
FitToClient();
EndUpdate();
end
|
122
|
Default coordinates (positive coordinates are shown bottom-right to the origin)
![](images/exsurfaceq122.png)
with Surface1 do
begin
BeginUpdate();
Coord := EXSURFACELib_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(Surface1.Elements.Item[OleVariant(1)],Surface1.Elements.Item[OleVariant(2)],Null);
Add(Surface1.Elements.Item[OleVariant(3)],Surface1.Elements.Item[OleVariant(2)],Null);
Add(Surface1.Elements.Item[OleVariant(3)],Surface1.Elements.Item[OleVariant(1)],Null);
end;
FitToClient();
EndUpdate();
end
|
121
|
Is it possible to customize the path of the links orthogonally similar with Microsoft Visio tool
![](images/exsurfaceq121.png)
with Surface1 do
begin
BeginUpdate();
AllowLinkControlPoint := Integer(EXSURFACELib_TLB.exOrthoArrange) Or Integer(EXSURFACELib_TLB.exMiddleControlPoint) Or Integer(EXSURFACELib_TLB.exControlPoint) Or Integer(EXSURFACELib_TLB.exEndControlPoint) Or Integer(EXSURFACELib_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(Surface1.Elements.Item[OleVariant(1)],Surface1.Elements.Item[OleVariant(2)],Null);
Add(Surface1.Elements.Item[OleVariant(3)],Surface1.Elements.Item[OleVariant(2)],Null);
Add(Surface1.Elements.Item[OleVariant(3)],Surface1.Elements.Item[OleVariant(1)],Null);
end;
Zoom := 200;
FitToClient();
EndUpdate();
end
|
120
|
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.Surface1OLEDragDrop(ASender: TObject; Data : IExDataObject;var Effect : Integer;Button : Smallint;Shift : Smallint;X : Integer;Y : Integer);
begin
with Surface1 do
begin
OutputDebugString( Data );
end
end;
// OLEStartDrag event - Occurs when the OLEDrag method is called.
procedure TForm1.Surface1OLEStartDrag(ASender: TObject; Data : IExDataObject;var AllowedEffects : Integer);
begin
// Data.SetData("some data to drag")
end;
with Surface1 do
begin
OLEDropMode := EXSURFACELib_TLB.exOLEDropManual;
with Elements.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 := EXSURFACELib_TLB.exCaptionWordWrap;
AutoSize := False;
Width := 256;
Height := 56;
end;
end
|
119
|
Is it possible to disable customizing the path of a specified link
![](images/exsurfaceq119.png)
with Surface1 do
begin
BeginUpdate();
AllowLinkControlPoint := EXSURFACELib_TLB.LinkControlPointEnum($ffffffe0 Or Integer(EXSURFACELib_TLB.exOrthoArrange) Or Integer(EXSURFACELib_TLB.exMiddleControlPoint) Or Integer(EXSURFACELib_TLB.exControlPoint) Or Integer(EXSURFACELib_TLB.exEndControlPoint) Or Integer(EXSURFACELib_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(Surface1.Elements.Item[OleVariant(1)],Surface1.Elements.Item[OleVariant(2)],Null).CustomPath := '0.5,0.25,0.5,.75';
Add(Surface1.Elements.Item[OleVariant(3)],Surface1.Elements.Item[OleVariant(2)],Null).CustomPath := '0.5,0.25,0.5,.75';
with Add(Surface1.Elements.Item[OleVariant(3)],Surface1.Elements.Item[OleVariant(1)],Null) do
begin
ShowLinkType := Integer(EXSURFACELib_TLB.exLinkStraight) Or Integer(EXSURFACELib_TLB.exLinkDirect);
StartPos := EXSURFACELib_TLB.LeftAlignment;
Color := $808080;
AllowControlPoint := EXSURFACELib_TLB.exNoControlPoint;
end;
end;
Zoom := 200;
FitToClient();
EndUpdate();
end
|
118
|
How do I let user customizes the link's path
![](images/exsurfaceq118.png)
with Surface1 do
begin
BeginUpdate();
AllowLinkControlPoint := EXSURFACELib_TLB.LinkControlPointEnum($ffffffe0 Or Integer(EXSURFACELib_TLB.exOrthoArrange) Or Integer(EXSURFACELib_TLB.exMiddleControlPoint) Or Integer(EXSURFACELib_TLB.exControlPoint) Or Integer(EXSURFACELib_TLB.exEndControlPoint) Or Integer(EXSURFACELib_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(Surface1.Elements.Item[OleVariant(1)],Surface1.Elements.Item[OleVariant(2)],Null).CustomPath := '0.5,0.25,0.5,.75';
Add(Surface1.Elements.Item[OleVariant(3)],Surface1.Elements.Item[OleVariant(2)],Null).CustomPath := '0.5,0.25,0.5,.75';
with Add(Surface1.Elements.Item[OleVariant(3)],Surface1.Elements.Item[OleVariant(1)],Null) do
begin
ShowLinkType := Integer(EXSURFACELib_TLB.exLinkStraight) Or Integer(EXSURFACELib_TLB.exLinkDirect);
StartPos := EXSURFACELib_TLB.LeftAlignment;
end;
end;
Zoom := 200;
FitToClient();
EndUpdate();
end
|
117
|
How can I generate a picture/image/graph from my diagram
with Surface1 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(Surface1.Elements.Item['A'],Surface1.Elements.Item['B'],Null);
Add(Surface1.Elements.Item['A'],Surface1.Elements.Item['C'],Null);
Add(Surface1.Elements.Item['B'],Surface1.Elements.Item['D'],Null);
Add(Surface1.Elements.Item['B'],Surface1.Elements.Item['C'],Null);
Add(Surface1.Elements.Item['A'],Surface1.Elements.Item['E'],Null);
Add(Surface1.Elements.Item['A'],Surface1.Elements.Item['F'],Null);
end;
DefArrange[EXSURFACELib_TLB.exDefArrangeCompact] := OleVariant(False);
Arrange(Null);
var_CopyTo := CopyTo['c:/temp/xtest.jpg'];
OutputDebugString( '!!!check the file c:/temp/xtest.jpg!!!' );
end
|
116
|
How can I generate a picture/image/graph from my diagram
with Surface1 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(Surface1.Elements.Item['A'],Surface1.Elements.Item['B'],Null);
Add(Surface1.Elements.Item['A'],Surface1.Elements.Item['C'],Null);
Add(Surface1.Elements.Item['B'],Surface1.Elements.Item['D'],Null);
Add(Surface1.Elements.Item['B'],Surface1.Elements.Item['C'],Null);
Add(Surface1.Elements.Item['A'],Surface1.Elements.Item['E'],Null);
Add(Surface1.Elements.Item['A'],Surface1.Elements.Item['F'],Null);
end;
DefArrange[EXSURFACELib_TLB.exDefArrangeCompact] := OleVariant(False);
Arrange(Null);
with (IUnknown(ComObj.CreateComObject(ComObj.ProgIDToClassID('Exontrol.Print'))) as EXPRINTLib_TLB.Print) do
begin
PrintExt := (IUnknown(Surface1.DefaultInterface) as EXSURFACELib_TLB.Surface);
CopyTo('c:/temp/xtest.jpg');
end;
OutputDebugString( '!!!check the file c:/temp/xtest.jpg!!!' );
end
|
115
|
How can I print the component
with Surface1 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(Surface1.Elements.Item[OleVariant(1)],Surface1.Elements.Item[OleVariant(2)],Null) do
begin
StartPos := EXSURFACELib_TLB.CenterAlignment;
EndPos := EXSURFACELib_TLB.CenterAlignment;
end;
with Add(Surface1.Elements.Item[OleVariant(2)],Surface1.Elements.Item[OleVariant(1)],Null) do
begin
StartPos := EXSURFACELib_TLB.CenterAlignment;
EndPos := EXSURFACELib_TLB.CenterAlignment;
end;
Add(Surface1.Elements.Item[OleVariant(3)],Surface1.Elements.Item[OleVariant(4)],Null);
with Add(Surface1.Elements.Item[OleVariant(4)],Surface1.Elements.Item[OleVariant(3)],Null) do
begin
StartPos := EXSURFACELib_TLB.LeftAlignment;
EndPos := EXSURFACELib_TLB.RightAlignment;
end;
end;
with (IUnknown(ComObj.CreateComObject(ComObj.ProgIDToClassID('Exontrol.Print'))) as EXPRINTLib_TLB.Print) do
begin
PrintExt := (IUnknown(Surface1.DefaultInterface) as EXSURFACELib_TLB.Surface);
Preview();
end;
end
|
114
|
How can I show direct-links
![](images/exsurfaceq114.png)
with Surface1 do
begin
ShowLinksType := EXSURFACELib_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(Surface1.Elements.Item['A'],Surface1.Elements.Item['B'],Null);
Add(Surface1.Elements.Item['A'],Surface1.Elements.Item['C'],Null);
end;
end
|
113
|
How can I show straight-links
![](images/exsurfaceq113.png)
with Surface1 do
begin
ShowLinksType := EXSURFACELib_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(Surface1.Elements.Item['A'],Surface1.Elements.Item['B'],Null);
Add(Surface1.Elements.Item['A'],Surface1.Elements.Item['C'],Null);
end;
end
|
112
|
How can I show round-links
![](images/exsurfaceq112.png)
with Surface1 do
begin
ShowLinksType := EXSURFACELib_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(Surface1.Elements.Item['A'],Surface1.Elements.Item['B'],Null);
Add(Surface1.Elements.Item['A'],Surface1.Elements.Item['C'],Null);
end;
end
|
111
|
I've tried to insert a "<br>" in the Caption property text and it just ignores it
![](images/exsurfaceq111.png)
with Surface1 do
begin
BeginUpdate();
with Elements do
begin
with Add('caption',Null,Null) do
begin
CaptionSingleLine := EXSURFACELib_TLB.exCaptionWordWrap;
Caption := 'first caption<br>second caption<br>third caption';
end;
end;
EndUpdate();
end
|
110
|
How do I align the extra-caption
![](images/exsurfaceq110.png)
with Surface1 do
begin
BeginUpdate();
with Elements do
begin
with Add('caption',Null,Null) do
begin
AutoSize := False;
Width := 128;
Height := 64;
ExtraCaption := 'extra-caption';
ExtraCaptionAlign := EXSURFACELib_TLB.exBottomRight;
end;
end;
EndUpdate();
end
|
109
|
How can I add an extra caption
![](images/exsurfaceq109.png)
with Surface1 do
begin
BeginUpdate();
with Elements do
begin
Add('caption',Null,Null).ExtraCaption := 'extra-caption';
end;
EndUpdate();
end
|
108
|
I am using the reserve-neighbors feature, the question is how to shift left/right the neighbors instead of up/down
with Surface1 do
begin
BeginUpdate();
AllowMoveNeighbors := EXSURFACELib_TLB.exMoveNeighborsHorizontally;
DefArrange[EXSURFACELib_TLB.exDefArrangeDir] := OleVariant(1);
AllowInsertObject := False;
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
|
107
|
I am using the reserve-neighbors feature, the question is if possible to specify the distance between neighbors
with Surface1 do
begin
BeginUpdate();
AllowMoveNeighbors := EXSURFACELib_TLB.exMoveNeighborsVertically;
DefArrange[EXSURFACELib_TLB.exDefArrangeDX] := OleVariant(0);
DefArrange[EXSURFACELib_TLB.exDefArrangeDY] := OleVariant(0);
AllowInsertObject := False;
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
|
106
|
How do I enable the reserve-neighbors feature
with Surface1 do
begin
BeginUpdate();
AllowMoveNeighbors := EXSURFACELib_TLB.exMoveNeighborsVertically;
AllowInsertObject := False;
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
|
105
|
I've noticed that recently, the elements get compacted once the Arrange method is performed. How can I prevent that
![](images/exsurfaceq105.png)
with Surface1 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(Surface1.Elements.Item['A'],Surface1.Elements.Item['B'],Null);
Add(Surface1.Elements.Item['A'],Surface1.Elements.Item['C'],Null);
Add(Surface1.Elements.Item['B'],Surface1.Elements.Item['D'],Null);
Add(Surface1.Elements.Item['B'],Surface1.Elements.Item['C'],Null);
Add(Surface1.Elements.Item['A'],Surface1.Elements.Item['E'],Null);
Add(Surface1.Elements.Item['A'],Surface1.Elements.Item['F'],Null);
end;
DefArrange[EXSURFACELib_TLB.exDefArrangeCompact] := OleVariant(False);
Arrange(Null);
end
|
104
|
Is it possible to add a link to show from bottom/down to top/up, rather that right to left (method-2)
![](images/exsurfaceq104.png)
// AddLink event - A new link has been added to the links collection.
procedure TForm1.Surface1AddLink(ASender: TObject; Link : ILink);
begin
with Surface1 do
begin
with Link do
begin
end;
end
end;
with Surface1 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(Surface1.Elements.Item[OleVariant(1)],Surface1.Elements.Item[OleVariant(2)],Null);
end;
end
|
103
|
Is it possible to add a link to show from bottom/down to top/up, rather that right to left (method-1)
![](images/exsurfaceq103.png)
with Surface1 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(Surface1.Elements.Item[OleVariant(1)],Surface1.Elements.Item[OleVariant(2)],Null) do
begin
StartPos := EXSURFACELib_TLB.DownAlignment;
EndPos := EXSURFACELib_TLB.UpAlignment;
end;
end;
end
|
102
|
How do I enable the cross link support ( mixed )
![](images/exsurfaceq102.png)
with Surface1 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(Surface1.Elements.Item[OleVariant(1)],Surface1.Elements.Item[OleVariant(2)],Null) do
begin
StartPos := EXSURFACELib_TLB.CenterAlignment;
EndPos := EXSURFACELib_TLB.CenterAlignment;
end;
with Add(Surface1.Elements.Item[OleVariant(2)],Surface1.Elements.Item[OleVariant(1)],Null) do
begin
StartPos := EXSURFACELib_TLB.CenterAlignment;
EndPos := EXSURFACELib_TLB.CenterAlignment;
end;
Add(Surface1.Elements.Item[OleVariant(3)],Surface1.Elements.Item[OleVariant(4)],Null);
with Add(Surface1.Elements.Item[OleVariant(4)],Surface1.Elements.Item[OleVariant(3)],Null) do
begin
StartPos := EXSURFACELib_TLB.LeftAlignment;
EndPos := EXSURFACELib_TLB.RightAlignment;
end;
end;
ShowLinks := Integer(EXSURFACELib_TLB.exShowCrossLinksMixt) Or Integer(EXSURFACELib_TLB.exShowExtendedLinks);
end
|
101
|
How do I enable the cross link support ( triangular )
![](images/exsurfaceq101.png)
with Surface1 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(Surface1.Elements.Item[OleVariant(1)],Surface1.Elements.Item[OleVariant(2)],Null) do
begin
StartPos := EXSURFACELib_TLB.CenterAlignment;
EndPos := EXSURFACELib_TLB.CenterAlignment;
end;
with Add(Surface1.Elements.Item[OleVariant(2)],Surface1.Elements.Item[OleVariant(1)],Null) do
begin
StartPos := EXSURFACELib_TLB.CenterAlignment;
EndPos := EXSURFACELib_TLB.CenterAlignment;
end;
Add(Surface1.Elements.Item[OleVariant(3)],Surface1.Elements.Item[OleVariant(4)],Null);
with Add(Surface1.Elements.Item[OleVariant(4)],Surface1.Elements.Item[OleVariant(3)],Null) do
begin
StartPos := EXSURFACELib_TLB.LeftAlignment;
EndPos := EXSURFACELib_TLB.RightAlignment;
end;
end;
ShowLinks := Integer(EXSURFACELib_TLB.exShowCrossLinksTriangle) Or Integer(EXSURFACELib_TLB.exShowExtendedLinks);
end
|