Unterschiede zwischen DelphiScript und Delphi
Unterschiede zwischen DelphiScript und Delphi
Dieser Abschnitt behandelt die wesentlichen Unterschiede zwischen der Skriptsprache DelphiScript und der Programmiersprache Delphi von Embarcadero sowie deren Auswirkungen auf die Altium Designer-API.
Das Skriptsystem von Altium Designer verwendet die typfreie Sprache DelphiScript, sodass es in Skripten keine Datentypen gibt. Sie können zwar Variablen und deren Typen deklarieren sowie die Typen für Funktionen/Prozeduren oder Methodenparameter aus Gründen der Lesbarkeit angeben, doch DelphiScript konvertiert nicht deklarierte Variablen bei der Ausführung eines Skripts. So können Sie beispielsweise keine Datensätze oder Klassen definieren.
DelphiScript-Variablen
Alle Variablen in einem Skript sind vom Typ „Variant“, und Typangaben in einer Variablendeklaration werden ignoriert und können weggelassen werden. Die folgenden drei Deklarationen sind also korrekt:
Var a : Integer; Var b : Integer; Var c, d;
Auch Typangaben für Parameter in einer Prozedur- oder Funktionsdeklaration werden ignoriert und können weggelassen werden. Dieser Code ist beispielsweise korrekt:
Function Sum(a, b) : Integer; Begin Result := a + b; End;
Im Allgemeinen können Varianten verwendet werden, um beliebige Datentypen zu speichern und zahlreiche Operationen sowie Typkonvertierungen durchzuführen. Ein Variant wird zur Laufzeit typgeprüft und ausgewertet. Der Compiler gibt keine Warnung vor möglichen Fehlern im Code aus, die nur durch umfangreiche Tests aufgedeckt werden können. Insgesamt können die Codeabschnitte, die Variants verwenden, als interpretierter Code betrachtet werden, da viele Operationen erst zur Laufzeit aufgelöst werden können. Dies kann sich auf die Geschwindigkeit des Codes auswirken.
Das hat zur Folge, dass eine Variant-Variable, sobald sie deklariert wurde und einen Variant-Wert angenommen hat, in jeden kompatiblen oder inkompatiblen Datentyp kopiert werden kann:
Var V; Begin // variable V can be assigned values of several different types: V := 10; V := 'Hello, World'; V := 45.55; End;
Wurde einer Variablen ein inkompatibler Datentyp zugewiesen, führt der DelphiScript-Interpreter, soweit möglich, eine Konvertierung durch. Andernfalls wird ein Laufzeitfehler ausgegeben. In der Praxis speichert eine Variant neben den Daten auch Typinformationen, sodass DelphiScript langsamer ist als der entsprechende kompilierte Embarcadero Delphi-Code.
Sets in Skripten
DelphiScript verfügt nicht über Set-Typen und unterstützt keine Set-Operatoren, im Gegensatz zur Sprache Delphi, die über Set-Typen verfügt und Set-Operatoren unterstützt.
Um Sets in DelphiScript-Skripten zu verwenden, nutzen Sie die integrierten Funktionen, die Sets in einem Skript bearbeiten.
Weitere Informationen finden Sie im Eintrag „Verwendung von Mengen in DelphiScript“
Interne Funktionen oder Prozeduren
Wenn Sie erwägen, Funktionen und Prozeduren
Der folgende Funktionsausschnitt wird nicht empfohlen:
Function A Function B Begin // blah End; Begin B; End;
Empfohlene Funktionsstruktur:
Function B Begin // blah End; Function A Begin B; End;
Schlüsselwort „Result“
Verwenden Sie das Result
Function Foo : String; Begin Result := 'Foo Foo'; End;
Verschachtelte Routinen
Verschachtelte Routinen werden unterstützt, jedoch können Variablen der übergeordneten Funktion nicht aus der verschachtelten Routine heraus verwendet werden.
Array-Elemente
Der Typ von Array-Elementen wird ignoriert und kann weggelassen werden, daher sind diese beiden Deklarationen gleichwertig:
Var x : array [1..2] of double; Var x : array [1..2];
Beachten Sie, dass Sie keine Array-Typen deklarieren können, wohl aber Arrays für Variablen.
Type TVertices = Array [1..50] Of TLocation; Var NewVertices : TVertices;
Var NewVertices : Array [1..50] of TLocation;
Offene Array-Deklaration
Die Open Array
Schlüsselwort „Case“
Das Case
Case UserName of 'Alex', 'John' : IsAdministrator := true; 'Peter' : IsAdministrator := false; Else Raise('Unknown user'); End;
Klassendeklarationen
In DelphiScript können keine neuen Klassen definiert werden, aber Sie können vorhandene DelphiScript-Klassen verwenden und diese instanziieren. Zum Beispiel die TListTStringList
TList
TStringList
CreateObject-Funktion
Mit der CreateObject
Anstelle von:
Procedure Proc; Var l; Begin l := TList.Create; Try // do something with l Finally L.Free; End;
...können Sie schreiben:
Procedure Proc; Var l; Begin l := CreateObject(TList); // Do something with l End;
CreateObject -Funktion.
Ausnahmen auslösen
Das RaiseOn
Raise(Format('Invalid value : %d', [Height]));
Schlüsselwörter „Try“, „Finally“ und „Raise“.
ThreadVar
In DelphiScript wird das ThreadvarVarThreadvar
Set-Operatoren
Der Set-Operator InInSet
If InSet(fsBold, Font.Style) then ShowMessage('Bold');
Beachten Sie, dass die Delphi-Mengenoperatoren +, -, *, =, >=MkSet, MkSetRange, SetUnion, SetDifference, SetIntersection, SubSet and InSet
ASet := BSet + CSet; \\ should be changed to ASet := SetUnion(BSet, CSet);
Die [...]MkSet
Font.Style := MkSet(fsBold, fsItalic);
Schlüsselwort „MkSet“
Schlüsselwort „MkSetRange“
Schlüsselwort „InSet“
Schlüsselwort „SetDifference“
Schlüsselwort „SetIntersection“
Schlüsselwort „SetUnion“
Schlüsselwort „SubSet“
Schlüsselwort „InSet“
Operatoren
Das ^@
Direktiven
Die folgenden Direktiven werden nicht unterstützt (beachten Sie, dass einige davon veraltet sind und auch von Embarcadero Delphi nicht unterstützt werden): 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.
Beachten Sie außerdem, dass die inUses
Ignorierte Schlüsselwörter
Die interfaceimplementationprogramunit
Nicht unterstützte Schlüsselwörter
Die folgenden Schlüsselwörter werden in DelphiScript nicht unterstützt:
-
as, asm, class, dispinterface, exports, finalization, inherited, initialization, inline, interface, is, library, object, out, property, record, resourcestring, set, supports, type.
Die folgenden Delphi-RTL-Funktionen werden in DelphiScript nicht unterstützt:
-
Abort, Addr, Assert, Dec, FillChar, Finalize, Hi, High, Inc, Initialize, Lo, Low, New, Ptr, SetString, SizeOf, Str, UniqueString, VarArrayRedim, VarArrayRef, VarCast, VarClear, VarCopy.
Die Funktionen aus der Windows-Unit von Delphi (die windows.pasRGB
Verwendung der Altium Designer-API in Skripten
Sie können mit DelphiScript keine eigenen Datensätze oder Klassentypen erstellen und diese in einem Skript instanziieren; Sie können jedoch bestimmte Klassen aus der Altium Designer-API verwenden. Zum Beispiel die TStringListTList
Die Objekt-Schnittstellen der API, die Altium Designer-Objekte repräsentieren, stehen in Skripten zur Verfügung. So haben Sie beispielsweise die Möglichkeit, Entwurfsobjekte in Schaltplan- und Leiterplatten-Dokumenten mithilfe der Schaltplan-Objekt-Schnittstellen und der Leiterplatten-Objekt-Schnittstellen zu aktualisieren.
Gemäß einer Konvention wird den Namen der Schnittstellen ein „I“ vorangestellt. Beispielsweise IPCB_Board
PCB-Schnittstellen in einem Skriptbeispiel:
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;
Die folgenden APIs können in Skripten verwendet werden:
- Bestimmte Embarcadero Delphi™-Funktionen und -Klassen sowie DelphiScript-Erweiterungen
- Client-API
- PCB-Server-API
- Schematic-Server-API
- Workspace-Manager-Server-API
- API der integrierten Bibliothek
- Altium Designer-API-Funktionen
- Parametrische Prozesse
Weitere Informationen
Sehen Sie sich die Skripte in der Sammlung herunterladbarer Skripte an, um sich über die Altium Designer-Objektschnittstellen und -Funktionen sowie über die in den Skripten verwendeten Delphi-Objekte und -Funktionen zu informieren.
Informationen zum Schreiben von Skripten für Altium Designer finden Sie in der Hauptdokumentation zum Skripting.
Im Leitfaden „Verwendung der Altium Designer-API“ finden Sie Einzelheiten zur Verwendung von Designobjekten und deren Schnittstellen in Ihren Skripten.
Informationen zum Umfang der Altium Designer-APIs und deren Schnittstellenobjekte für Skripte finden Sie in der Altium Designer-API-Referenz.