DelphiScriptとDelphiの違い
DelphiScriptとDelphiの違い
このセクションでは、DelphiScriptスクリプト言語とEmbarcadero社のDelphiプログラミング言語との本質的な違い、およびそれがAltium Designer APIにどのように適用されるかについて説明します。
Altium Designer のスクリプトシステムは、型のない DelphiScript 言語を使用しているため、スクリプトにはデータ型が存在しません。可読性を高めるために変数とその型を宣言したり、関数/プロシージャやメソッドのパラメータの型を指定したりすることは可能ですが、DelphiScript はスクリプトの実行時に、宣言されていない変数を自動的に変換します。 したがって、たとえば、レコードやクラスを定義することはできません。
DelphiScriptの変数
スクリプト内のすべての変数はVariant型であり、変数宣言における型指定は無視されるため、省略可能です。したがって、以下の3つの宣言は正しいものです:
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;
ネストされたルーチン
ネストされたルーチンはサポートされていますが、最上位の関数の変数はネストされたルーチンからは使用できません。
配列要素
配列要素の型は無視されるため、省略可能です。したがって、次の2つの宣言は同等です:
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.
DelphiScript では、以下の Delphi RTL 関数はサポートされていません:
-
Abort, Addr, Assert, Dec, FillChar, Finalize, Hi, High, Inc, Initialize, Lo, Low, New, Ptr, SetString, SizeOf, Str, UniqueString, VarArrayRedim, VarArrayRef, VarCast, VarClear, VarCopy.
DelphiのWindowsユニット( windows.pasRGB
スクリプトでの Altium Designer API の使用
DelphiScript を使用して独自のレコードやクラス型を作成し、スクリプト内でインスタンス化することはできませんが、Altium Designer API の特定のクラスを使用することは可能です。例えば、 TStringListTList
Altium Designer オブジェクトを表す API のオブジェクトインターフェースは、スクリプト内で使用可能です。たとえば、Schematic オブジェクトインターフェースや PCB オブジェクトインターフェースを使用することで、回路図や PCB ドキュメント上の設計オブジェクトを更新することができます。
慣例として、インターフェース名には名前の前に「I」が付加されます。例えば、 IPCB_Board
スクリプト例におけるPCBインターフェース:
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を使用できます:
- 特定のエムバーカデロ Delphi™ 関数およびクラス、ならびに DelphiScript 拡張機能
- クライアントAPI
- PCBサーバーAPI
- 回路図サーバーAPI
- ワークスペース・マネージャー・サーバー API
- 統合ライブラリ API
- Altium Designer API 関数
- パラメトリック処理
詳細情報
ダウンロード可能なスクリプト集内のスクリプトを確認し、Altium Designerのオブジェクトインターフェースや関数、およびスクリプト内で使用されているDelphiのオブジェクトや関数についてご確認ください。
Altium Designer 用のスクリプト作成に関する情報は、スクリプト作成のメインドキュメントを参照してください。
スクリプト内で設計オブジェクトやそのインターフェースを使用する方法の詳細については、『Altium Designer API の使用』ガイドを参照してください。
Altium Designer API リファレンスを参照して、Altium Designer API の範囲およびスクリプト用のインターフェース・オブジェクトに関する情報を確認してください。