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 inside une fonction ou une procédure, l'approche recommandée consiste à écrire des fonctions/procédures autonomes — bien que les procédures/fonctions récursives soient autorisées.

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 mot-clé pour définir la valeur de retour au sein d’un bloc de fonction. Par exemple :

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.

Illegal example:

Type
TVertices = Array [1..50] Of TLocation;
Var
NewVertices : TVertices;

Legal example:

Var
NewVertices : Array [1..50] of TLocation;

Déclaration de tableau ouverte

La Open Array déclaration n'est pas prise en charge.

Mot-clé « Case »

Le Case mot-clé peut être utilisé pour n'importe quel type. Ainsi, ce qui suit est valide :

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 TList et TStringList peuvent être créées et utilisées dans vos scripts.
See also
TList
TStringList

Fonction CreateObject

La CreateObject fonction permet de créer des objets qui seront libérés implicitement lorsqu'ils ne seront plus utilisés.

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;

See also
fonctionCreateObject.

Lancer des exceptions

Le Raise mot-clé peut être utilisé sans paramètres pour relancer la dernière exception. Raise peut également être utilisé avec un paramètre de type chaîne de caractères pour déclencher l'exception avec le message spécifié. Les objets Exception ne sont pas pris en charge dans DelphiScript, car le On mot-clé n'est pas pris en charge.

Example:

Raise(Format('Invalid value : %d', [Height]));

See also
Mots-clés Try, Finally et Raise.

ThreadVar

Dans DelphiScript, le Threadvar mot-clé est traité comme Var. Notez que dans Embarcadero Delphi, les variables déclarées à l’aide du Threadvar ont des valeurs distinctes dans chaque thread.

Opérateurs Set

L'opérateur Set In n'est pas pris en charge. L' InSet peut être utilisé pour vérifier si une valeur appartient à un ensemble. Par exemple :

If InSet(fsBold, Font.Style) then
ShowMessage('Bold');

Notez que les opérateurs d'ensemble de Delphi +, -, *, =, >= ne fonctionnent pas correctement. Les fonctions Delphiscript intégrées MkSet, MkSetRange, SetUnion, SetDifference, SetIntersection, SubSet and InSet sont utilisées à la place :

ASet := BSet + CSet; \\ should be changed to
ASet := SetUnion(BSet, CSet);

Les [...] constructeurs d'ensembles ne sont pas pris en charge — utilisez la MkSet fonction pour créer un ensemble:

Font.Style := MkSet(fsBold, fsItalic); 

See also
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 ^ et @ ne sont pas pris en charge.

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 in directive dans la Uses clause est ignorée.

Mots-clés ignorés

La interface, implementation, program et unit sont ignorés dans DelphiScript. Les scripts peuvent les contenir, mais ils n'ont aucun effet — toutefois, ces mots-clés peuvent améliorer la lisibilité des scripts.

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.pas fichier) ne sont pas prises en charge (par exemple, la RGB n'est pas prise en charge).

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 TStringList et TList peuvent être instanciées et utilisées comme conteneurs de stockage de données (généralement du même type) pour répondre aux besoins d’un script.

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 représente une interface pour un document PCB existant.

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.

AI-LocalizedLocalisé par IA
Si vous trouvez un problème, sélectionnez le texte/l’image et appuyez surCtrl + Entréepour nous envoyer vos commentaires.
Disponibilité des fonctionnalités

Les fonctionnalités auxquelles vous avez accès dépendent de la solution Altium dont vous disposez – Altium Develop, Altium Agile Teams, Altium Agile Enterprise, ou Altium Designer (avec un abonnement actif).

Si vous ne voyez pas une fonctionnalité documentée dans votre logiciel actuel, contactez le service commercial d’Altium pour en savoir plus.

Documentation héritée

La documentation d’Altium Designer n’est plus versionnée. Si vous devez accéder à la documentation des versions antérieures d’Altium Designer, consultez la section Documentation héritée de la page Other Installers.

Contenu