Различия между DelphiScript и Delphi
Различия между DelphiScript и Delphi
В этом разделе рассматриваются основные различия между языком сценариев DelphiScript и языком программирования Delphi от Embarcadero, а также их влияние на API Altium Designer.
Система скриптов Altium Designer использует язык DelphiScript без типизации, поэтому в скриптах отсутствуют типы данных. Хотя для удобства чтения можно объявлять переменные и их типы, а также указывать типы для функций/процедур или параметров методов, DelphiScript преобразует необъявленные переменные при выполнении скрипта. Так, например, нельзя определять записи или классы.
Переменные DelphiScript
Все переменные в скрипте имеют тип Variant, а типы в объявлении переменной игнорируются и могут быть пропущены. Таким образом, следующие три объявления являются правильными:
Var a : Integer; Var b : Integer; Var c, d;
Типы параметров в объявлении процедуры/функции также игнорируются и могут быть опущены. Например, этот код является корректным:
Function Sum(a, b) : Integer; Begin Result := a + b; End;
В целом, варианты можно использовать для хранения данных любого типа и выполнения многочисленных операций и преобразований типов. Тип варианта проверяется и вычисляется во время выполнения. Компилятор не выдаёт предупреждений о возможных ошибках в коде, которые можно обнаружить только с помощью тщательного тестирования. В целом фрагменты кода, использующие варианты, можно считать интерпретируемым кодом, поскольку многие операции не могут быть разрешены до момента выполнения. Это может повлиять на скорость работы кода.
В результате, как только переменная-вариант объявлена и получила значение типа «вариант», её можно скопировать в любой совместимый или несовместимый тип данных:
Var V; Begin // variable V can be assigned values of several different types: V := 10; V := 'Hello, World'; V := 45.55; End;
Если переменной присвоен несовместимый тип данных, интерпретатор DelphiScript выполняет преобразование, если это возможно. В противном случае выдается ошибка выполнения. На практике вариант хранит информацию о типе вместе с данными, поэтому DelphiScript работает медленнее, чем эквивалентный скомпилированный код Embarcadero Delphi.
Наборы в скриптах
В DelphiScript нет типов наборов и не поддерживаются операторы с наборами, в отличие от языка Delphi, в котором есть типы наборов и поддерживаются операторы с наборами.
Для использования множеств в скриптах DelphiScript следует использовать встроенные функции, которые позволяют работать с множествами в скрипте.
Дополнительную информацию см. в разделе «Использование множеств в DelphiScript»
Внутренние функции или процедуры
При рассмотрении возможности использования функций и процедур
Следующий фрагмент кода функции не рекомендуется:
Function A Function B Begin // blah End; Begin B; End;
Рекомендуемая структура функции:
Function B Begin // blah End; Function A Begin B; End;
Ключевое слово Result
Используйте Result
Function Foo : String; Begin Result := 'Foo Foo'; End;
Вложенные подпрограммы
Вложенные процедуры поддерживаются, однако переменные функции верхнего уровня не могут использоваться из вложенной процедуры.
Элементы массива
Тип элементов массива игнорируется и может быть опущен, поэтому эти два объявления равнозначны:
Var x : array [1..2] of double; Var x : array [1..2];
Обратите внимание, что объявлять типы массивов нельзя, но можно объявлять массивы как переменные.
Type TVertices = Array [1..50] Of TLocation; Var NewVertices : TVertices;
Var NewVertices : Array [1..50] of TLocation;
Открыть объявление массива
Объявление Open Array
Ключевое слово «Case»
Ключевое Case
Case UserName of 'Alex', 'John' : IsAdministrator := true; 'Peter' : IsAdministrator := false; Else Raise('Unknown user'); End;
Объявления классов
В DelphiScript нельзя определять новые классы, но можно использовать существующие классы DelphiScript и создавать их экземпляры. Например, ключевое слово TListTStringList
TList
TStringList
Функция CreateObject
Функцию CreateObject
Поэтому вместо:
Procedure Proc; Var l; Begin l := TList.Create; Try // do something with l Finally L.Free; End;
...можно написать:
Procedure Proc; Var l; Begin l := CreateObject(TList); // Do something with l End;
ФункцияCreateObject.
Генерирование исключений
Ключевое RaiseOn
Raise(Format('Invalid value : %d', [Height]));
Ключевые слова Try, Finally и Raise.
ThreadVar
В DelphiScript ThreadvarVarThreadvar
Операторы Set
Оператор Set InInSet
If InSet(fsBold, Font.Style) then ShowMessage('Bold');
Обратите внимание, что операторы множеств в Delphi +, -, *, =, >=MkSet, MkSetRange, SetUnion, SetDifference, SetIntersection, SubSet and InSet
ASet := BSet + CSet; \\ should be changed to ASet := SetUnion(BSet, CSet);
Конструкторы [...]MkSet
Font.Style := MkSet(fsBold, fsItalic);
Ключевое слово MkSet
Ключевое слово MkSetRange
Ключевое слово InSet
Ключевое слово SetDifference
Ключевое слово SetIntersection
Ключевое слово SetUnion
Ключевое слово SubSet
Ключевое слово InSet
Операторы
Ключевое ^@
Директивы
Следующие директивы не поддерживаются (обратите внимание, что некоторые из них устарели и также не поддерживаются Embarcadero Delphi): absolute, abstract, assembler, automated, cdecl, contains, default, dispid, dynamic, export, external, far, implements, index, message, name, near, nodefault, overload, override, package, pascal, private protected, public, published, read, readonly, register, reintroduce, requires, resident, safecall, stdcall, stored, virtual, write, writeonly.
Также обратите внимание, что inUses
Игнорируемые ключевые слова
Ключевое слово interfaceimplementationprogramunit
Неподдерживаемые ключевые слова
Следующие ключевые слова не поддерживаются в DelphiScript:
-
as, asm, class, dispinterface, exports, finalization, inherited, initialization, inline, interface, is, library, object, out, property, record, resourcestring, set, supports, type.
Следующие функции Delphi RTL не поддерживаются в DelphiScript:
-
Abort, Addr, Assert, Dec, FillChar, Finalize, Hi, High, Inc, Initialize, Lo, Low, New, Ptr, SetString, SizeOf, Str, UniqueString, VarArrayRedim, VarArrayRef, VarCast, VarClear, VarCopy.
Функции из модуля Windows языка Delphi (файл windows.pasRGB
Использование API Altium Designer в скриптах
Вы не можете создавать собственные типы записей или классов с помощью DelphiScript и создавать их экземпляры в скрипте, однако вы можете использовать определенные классы из API Altium Designer. Например, TStringListTList
Объектные интерфейсы API, представляющие объекты Altium Designer, доступны для использования в скриптах. Например, у вас есть возможность обновлять объекты проекта в документах схемы и печатной платы с помощью интерфейсов объектов схемы и интерфейсов объектов печатной платы.
По соглашению к названиям интерфейсов добавляется префикс «I». Например, IPCB_Board
Пример использования интерфейсов печатной платы в скрипте:
Procedure ViaCreation; Var Board : IPCB_Board; Via : IPCB_Via; Begin Board := PCBServer.GetCurrentPCBBoard; If Board = Nil Then Exit; (\* Create a Via object\* ) Via := PCBServer.PCBObjectFactory(eViaObject, eNoDimension, eCreate_Default); Via.X := MilsToCoord(7500); Via.Y := MilsToCoord(7500); Via.Size := MilsToCoord(50); Via.HoleSize := MilsToCoord(20); Via.LowLayer := eTopLayer; Via.HighLayer := eBottomLayer; (* Put this via in the Board object*) Board.AddPCBObject(Via); End;
В скриптах можно использовать следующие API:
- некоторые функции и классы Embarcadero Delphi™, а также расширения DelphiScript
- Клиентский API
- API сервера PCB
- API сервера схем
- API сервера Workspace Manager
- API интегрированной библиотеки
- Функции API Altium Designer
- Параметрические процессы
Дополнительная информация
Ознакомьтесь со скриптами в коллекции скриптов, доступной для скачивания, чтобы увидеть интерфейсы и функции объектов Altium Designer, а также объекты и функции Delphi, используемые в скриптах.
Обратитесь к основной документации по скриптам, чтобы получить информацию о написании скриптов для Altium Designer.
Обратитесь к руководству «Использование API Altium Designer », чтобы узнать подробности об использовании объектов проектирования и их интерфейсов в ваших скриптах.
Ознакомьтесь со справочником по API Altium Designer, чтобы получить информацию о наборе API Altium Designer и их объектах интерфейса для скриптов.