В разделе рассматриваются примеры получения данных из XML документа. Для этой цели используется свойство property TsgPluginItem.Document: IXMLDocument компонента. Рассмотрим некоторые способы получения данных:
Пример 1.
Получение версии приложения:
FClient.Document.DocumentElement.Attributes['Version']
Данный пример возвратит строку ‘7.4’.
Пример 2.
Получение имени файла чертежа:
FClient.Document.DocumentElement.ChildNodes['Session'].ChildNodes['Drawing'].ChildValues['FileName']
Данный пример возвратит строку ‘New1.dxf’.
Пример 3.
Получение записи (IXMNode) содержащей свойства выделенного примитива:
…
var
…
vId, vClassName, vEntName: string;
N1: IXMLNode;
…
begin
…
vId := FClient.Document.DocumentElement.ChildNodes['Session'].ChildNodes['Selected’].
ChildNodes[0]. Attributes[‘Id’];
// GetEntNodeFromId âåðíåò ññûëêó íà çàïèñü
// <abvwr:Entity Id="$0107D940" ClassType="$00699FF4" ClassName="TsgElementLinear">
N1 := FClient.GetEntNodeFromId(vId);
if N1 <> nil then
begin
…
vClassName := N1. Attributes[‘ClassName’]; // vClassName = ‘TsgElementLinear’
vEntName := N1.CildValues[‘EntName’]; // vEntName = ‘RIB Àâòîð = Soft Gold’
…
end;
…
end;
Пример 4.
Добавление нового тулбара с кнопкой, иконки из ресурсов плагина:
…
procedure TPlugForm.Init(Sender: TObject);
var
vCommandBar: IXMLNode;
vCommand: IXMLNode;
begin
…
vCommandBar := FClient.ClientNode.ChildNodes[sCommandBars].AddChild(sCommandBar);
vCommandBar.ChildValues['Caption'] := 'New CommandBar';
vCommand := vCommandBar.AddChild(sCommand);
vCommand.ChildValues['Name'] := 'NewButton1';
vCommand.ChildValues['Hint'] := 'New Button Hint';
vCommand.ChildValues['Caption'] := 'New Button Caption';
vCommand.ChildValues['BitmapResName'] := 'NEWBUTTON'; //NEWBUTTON – áèòìàï, èç ôàéëà ðåñóðñîâ ïëàãèíà
end;
…
При нажатии на эту кнопку выполняется обработчик:
procedure TPlugForm.ABViewerAction(Sender: TObject);
var
S: string;
begin
if Assigned(FClient.CommandNode) then
begin
S := FClient.CommandNode.ChildNodes['Name'].NodeValue;
AddLog(FClient.CommandNode.LocalName + ' with name "' + S + '"');
end;
Show;
end;
где FClient.CommandNode – соответствующий элемент XML (<Command …">)
...
<CommandBars>
<CommandBar Id="$01F62CE0">
<Caption>New CommandBar</Caption>
<Command Id="$01EB63D0">
<Name>NewButton1</Name>
<Hint>New Button Hint</Hint>
<Caption>New Button Caption</Caption>
<BitmapResName>NEWBUTTON</BitmapResName>
</Command>
</CommandBar>
</CommandBars>
Пример 5.
Экспорт текущего чертежа в файл с использованием потока:
...
procedure TPlugForm.btnExportCADClick(Sender: TObject);
var
vDrawing: IXMLNode;
vStream: TFileStream;
begin
if SaveDialog.Execute then
begin
vDrawing := FClient.GetDrawingNode;
if Assigned(vDrawing) then
begin
vStream := TFileStream.Create(SaveDialog.FileName, fmCreate);
try
FClient.ExportCADToStream(vDrawing, vStream);
finally
vStream.Free;
end;
end;
end;
end;
...
Перейти на страницу Inventory