Différences entre DelphiScript et Delphi
Différences entre DelphiScript et Delphi
Cette section présente les principales différences entre le langage de script DelphiScript et le langage de programmation Delphi d’Embarcadero, ainsi que leur incidence sur l’API d’Altium Designer.
Le système de script d’Altium Designer utilise le langage DelphiScript, qui est non typé ; il n’y a donc pas de types de données dans les scripts. Bien que vous puissiez déclarer des variables et leurs types, et spécifier les types des fonctions/procédures ou des paramètres de méthode pour plus de lisibilité, DelphiScript convertira les variables non déclarées lors de l’exécution d’un script. Ainsi, par exemple, vous ne pouvez pas définir d’enregistrements ni de classes.
Variables DelphiScript
Toutes les variables d’un script sont de type Variant ; les types indiqués dans une déclaration de variable sont ignorés et peuvent être omis. Les trois déclarations suivantes sont donc correctes :
Var a : Integer; Var b : Integer; Var c, d;
Les types des paramètres dans une déclaration de procédure ou de fonction sont également ignorés et peuvent être omis. Par exemple, ce code est correct :
Function Sum(a, b) : Integer; Begin Result := a + b; End;
En général, les variants peuvent être utilisés pour stocker n’importe quel type de données et effectuer de nombreuses opérations et conversions de types. Un variant fait l’objet d’une vérification de type et est évalué au moment de l’exécution. Le compilateur n’émettra aucun avertissement concernant d’éventuelles erreurs dans le code, qui ne peuvent être détectées qu’à l’aide de tests approfondis. Dans l’ensemble, les parties de code qui utilisent des variants peuvent être considérées comme du code interprété, car de nombreuses opérations ne peuvent être résolues qu’au moment de l’exécution. Cela peut affecter la vitesse d’exécution du code.
Il en résulte qu’une fois qu’une variable de type « variant » a été déclarée et a reçu une valeur de type « variant », elle peut être copiée vers n’importe quel type de données, qu’il soit compatible ou incompatible :
Var V; Begin // variable V can be assigned values of several different types: V := 10; V := 'Hello, World'; V := 45.55; End;
Si un type de données incompatible est attribué à une variable, l’interpréteur DelphiScript effectue une conversion lorsque cela est possible. Dans le cas contraire, une erreur d’exécution est générée. En pratique, un variant stocke des informations de type en plus des données, ce qui rend DelphiScript plus lent que le code compilé équivalent d’Embarcadero Delphi.
Les ensembles dans les scripts
DelphiScript ne dispose pas de types « Set » et ne prend pas en charge les opérateurs « Set », contrairement au langage Delphi qui, lui, dispose de types « Set » et prend en charge les opérateurs « Set ».
Pour utiliser des ensembles dans des scripts DelphiScript, utilisez les fonctions intégrées qui permettent de manipuler des ensembles dans un script.
Pour plus d’informations, consultez l’entrée « Utilisation des ensembles dans DelphiScript ».
Fonctions ou procédures internes
Lorsque vous envisagez d'utiliser des fonctions et des procédures
L'extrait de fonction suivant n'est pas recommandé :
Function A Function B Begin // blah End; Begin B; End;
Structure de fonction recommandée :
Function B Begin // blah End; Function A Begin B; End;
Mot-clé « Result »
Utilisez le Result
Function Foo : String; Begin Result := 'Foo Foo'; End;
Routines imbriquées
Les routines imbriquées sont prises en charge, mais les variables de la fonction de niveau supérieur ne peuvent pas être utilisées depuis la routine imbriquée.
Éléments de tableau
Le type des éléments du tableau est ignoré et peut être omis ; ces deux déclarations sont donc équivalentes :
Var x : array [1..2] of double; Var x : array [1..2];
Notez que vous ne pouvez pas déclarer de types de tableaux, mais que vous pouvez attribuer des tableaux à des variables.
Type TVertices = Array [1..50] Of TLocation; Var NewVertices : TVertices;
Var NewVertices : Array [1..50] of TLocation;
Déclaration de tableau ouverte
La Open Array
Mot-clé « Case »
Le Case
Case UserName of 'Alex', 'John' : IsAdministrator := true; 'Peter' : IsAdministrator := false; Else Raise('Unknown user'); End;
Déclarations de classes
Il n'est pas possible de définir de nouvelles classes en DelphiScript, mais vous pouvez utiliser des classes DelphiScript existantes et les instancier. Par exemple, le TListTStringList
TList
TStringList
Fonction CreateObject
La CreateObject
Ainsi, au lieu d’écrire :
Procedure Proc; Var l; Begin l := TList.Create; Try // do something with l Finally L.Free; End;
...vous pouvez écrire :
Procedure Proc; Var l; Begin l := CreateObject(TList); // Do something with l End;
fonctionCreateObject.
Lancer des exceptions
Le RaiseOn
Raise(Format('Invalid value : %d', [Height]));
Mots-clés Try, Finally et Raise.
ThreadVar
Dans DelphiScript, le ThreadvarVarThreadvar
Opérateurs Set
L'opérateur Set InInSet
If InSet(fsBold, Font.Style) then ShowMessage('Bold');
Notez que les opérateurs d'ensemble de Delphi +, -, *, =, >=MkSet, MkSetRange, SetUnion, SetDifference, SetIntersection, SubSet and InSet
ASet := BSet + CSet; \\ should be changed to ASet := SetUnion(BSet, CSet);
Les [...]MkSet
Font.Style := MkSet(fsBold, fsItalic);
Mot-clé MkSet
Mot-clé MkSetRange
Mot-clé InSet
Mot-clé SetDifference
Mot-clé SetIntersection
Mot-clé SetUnion
Mot-clé SubSet
Mot-clé InSet
Opérateurs
Le ^@
Directives
Les directives suivantes ne sont pas prises en charge (notez que certaines sont obsolètes et ne sont pas non plus prises en charge par 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.
Notez également que la inUses
Mots-clés ignorés
La interfaceimplementationprogramunit
Mots-clés non pris en charge
Les mots-clés suivants ne sont pas pris en charge dans DelphiScript :
-
as, asm, class, dispinterface, exports, finalization, inherited, initialization, inline, interface, is, library, object, out, property, record, resourcestring, set, supports, type.
Les fonctions RTL Delphi suivantes ne sont pas prises en charge dans DelphiScript :
-
Abort, Addr, Assert, Dec, FillChar, Finalize, Hi, High, Inc, Initialize, Lo, Low, New, Ptr, SetString, SizeOf, Str, UniqueString, VarArrayRedim, VarArrayRef, VarCast, VarClear, VarCopy.
Les fonctions de l'unité Windows de Delphi (le windows.pasRGB
Utilisation de l’API d’Altium Designer dans les scripts
Vous ne pouvez pas créer vos propres types d'enregistrements ou de classes à l'aide de DelphiScript ni les instancier dans un script ; vous pouvez toutefois utiliser certaines classes de l'API d'Altium Designer. Par exemple, la TStringListTList
Les interfaces d’objets de l’API qui représentent les objets d’Altium Designer sont disponibles pour une utilisation dans les scripts. Par exemple, vous avez la possibilité de mettre à jour des objets de conception dans les documents de schéma et de circuit imprimé grâce à l’utilisation des interfaces d’objets de schéma et des interfaces d’objets de circuit imprimé.
Par convention, les noms d’interface sont précédés d’un « I ». Par exemple, IPCB_Board
Exemple d’interfaces PCB dans un script :
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;
Les API suivantes peuvent être utilisées dans les scripts :
- Certaines fonctions et classes Embarcadero Delphi™, ainsi que les extensions DelphiScript
- API client
- API du serveur PCB
- API du serveur de schémas
- API du serveur Workspace Manager
- API de la bibliothèque intégrée
- Fonctions de l’API Altium Designer
- Processus paramétriques
Plus d'informations
Consultez les scripts de la collection de scripts téléchargeables pour découvrir les interfaces et fonctions des objets Altium Designer, ainsi que les objets et fonctions Delphi utilisés dans les scripts.
Reportez-vous à la documentation principale sur les scripts pour obtenir des informations sur l'écriture de scripts pour Altium Designer.
Consultez le guide « Utilisation de l’API Altium Designer » pour savoir comment utiliser les objets de conception et leurs interfaces dans vos scripts.
Consultez la référence de l'API d'Altium Designer pour obtenir des informations sur la gamme des API d'Altium Designer et leurs objets d'interface destinés aux scripts.