Funkcje

Poniżej omówiono typowe instrukcje funkcji używane w języku DelphiScript. Zakres funkcji DelphiScript przedstawiono w sekcjach dotyczących procedur FileIO, procedur matematycznych, procedur łańcuchowych oraz procedur rozszerzeń.

Obliczanie wyrażeń za pomocą funkcji Evaluate

Wbudowana funkcja Evaluate interpretuje w czasie wykonywania ciąg znaków zawierający poprawne wyrażenie matematyczne i zwraca wynik. Na przykład możesz napisać skrypt taki jak Evaluate(ProcNames[ProcIndex]);, a procedura określona w ProcNames[ProcIndex] zostanie wywołana.

Aby obliczyć takie wyrażenie, możesz użyć metody Evaluate, gdzie wyrażenie jest określone przez parametr Expr. Na przykład możesz obliczać wyrażenia takie jak poniższe:

Evaluate('2+5');
Evaluate('((10+15)-5)/2*5');
Evaluate('sin(3.1415926/2)*10');
Evaluate('2.5*log(3)');

Przekazywanie parametrów do funkcji i procedur

Zarówno funkcje, jak i procedury zdefiniowane w skrypcie mogą być zadeklarowane tak, aby przyjmowały parametry. Dodatkowo funkcje są definiowane tak, aby zwracały wartość. Typy parametrów w deklaracjach procedur/funkcji są ignorowane i można je pominąć. Na przykład poniższy kod jest poprawny:

Function sum(a, b) : integer;
Begin
  Result := a + b;
End;

Wychodzenie z procedury

DelphiScript udostępnia instrukcje Exit i Break, aby wymusić zakończenie procedury, zanim zakończyłaby się naturalnie. Na przykład, jeśli wartość parametru nie jest odpowiednia, możesz chcieć wyświetlić użytkownikowi ostrzeżenie i zakończyć działanie, jak pokazuje poniższy przykład.

Procedure DisplayName (s);
Begin
  If s = '' Then
  Begin
    ShowMessage('Please enter a name');
    Exit;
  End;
  ShowMessage(S + ' is shown');
End;

Procedury File IO

DelphiScript ma następujące procedury IO:

Append

AssignFile

ChDir

CloseFIle

Eof

Eoln

Erase

GetDir

MkDir

Read

Readln

Reset

Rewrite

RmDir

Write

Writeln

 

 

DelphiScript umożliwia zapisywanie informacji do pliku tekstowego, a ponieważ DelphiScript jest językiem nietypowanym, wszystkie wartości muszą zostać najpierw przekonwertowane na łańcuchy znaków.

Tutaj procedury Read i ReadLn są równoważne — odczytują wiersz aż do, ale nie włącznie z, następnym znakiem nowej linii. Procedura Writeln(String) jest równoważna procedurom Write(S) i Write(LineFeed + CarriageReturn).

Aby zapisać plik tekstowy, użyj procedur AssignFile, ReWrite, Writeln oraz CloseFile. Aby odczytać plik tekstowy, użyj procedur AssignFile, Reset, Readln oraz CloseFile. Poniższy przykład zapisuje do pliku tekstowego i dodaje znacznik końca linii. Zaleca się użycie bloku Try / Finally / End w celu zabezpieczenia skryptów na wypadek awarii IO.

Example:

Var
  InputFile : TextFile;
  OutputFile : TextFile;
  I          : Integer;
  Line       : String;
Begin
  AssignFile(OutputFile,eConvertedFile.Text);
  Rewrite(OutputFile);
  AssignFile(InputFIle,eOriginalFIle.Text);
  Reset(InputFile);
 
  Try
  While not EOF(InputFile) do
  Begin
    Readln(InputFile,Line);
    For I := 1 to Length(Line) Do
      Line[I] := UpperCase(Line[I]);
      Writeln(Outputfile, Line);
    End;
  Finally
    CloseFile(InputFile);
    CloseFile(OutputFile);
  End;
End;

Procedury matematyczne

DelphiScript ma następujące procedury matematyczne:

Abs

ArcTan

Cos

Exp

Frac

Int

Random

Randomize

Round

Sin

Sqr

Sqrt

Trunc

 

 

Procedury łańcuchowe

DelphiScript ma następujące procedury łańcuchowe, które mogą manipulować łańcuchami znaków lub znakami. W poniższej tabeli pokazano tylko podzbiór procedur łańcuchowych (większość procedur łańcuchowych używanych przez DelphiScript jest importowana z jednostki SysUtils Embarcadero Delphi):

AnsiCompareStr

AnsiCompareText

AnsiDequotedStr

AnsiExtractQuotedStr

AnsiLowerCase

AnsiPos

AnsiQuotedStr

AnsiSameStr

AnsiSameText

AnsiUpperCase

CompareStr

CompareText

Copy

Delete

FloatToStr

FloatToStrF

Format

Frac

Insert

Int

IsDelimiter

LastDelimiter

Length

LowerCase

Ord

Pos

Pred

QuotedStr

Round

SameText

SetLength

StringOfChar

StringToGUID

Succ

Trim

TrimLeft

TrimRight

UpCase

UpperCase

WideUpperCase

WideLowerCase

WideSameStr

WideSameText

 

 

Procedury łańcuchowe, które są not obsługiwane przez DelphiScript, przedstawiono w poniższej tabeli:

AnsiContainsStr

AnsiContainsText

AnsiEndsStr

AnsiEndsText

AnsiIndexText

AnsiMatchStr

AnsiMatchText

AnsiReplaceStr

AnsiReplaceText

AnsiResemblesProc

AnsiResemblesText

AnsiStartsStr

AnsiStartsText

Concat

DecodeSoundExInt

DecodeSoundExWord

DupeString

LeftStr

MidStr

NullStr

ReverseString

RightStr

SetString

SoundEx

SoundExCompare

SoundExInt

SoundExProc

SoundExSimilar

SoundExWord

Str

StuffString

Val

 

Procedury rozszerzeń

Procedury rozszerzeń są używane podczas pracy z procesami serwera (polecenie to opakowany proces serwera z parametrami, jeśli występują) w skryptach, szczególnie jeśli trzeba wyodrębnić lub ustawić łańcuchy znaków dla parametrów procesów. Niektóre z procedur wymieniono poniżej.

Aby wykonywać parametry procesów w skrypcie, mogą być potrzebne następujące funkcje:

AddColorParameter

AddIntegerParameter

AddLongIntParameter

AddSingleParameter

AddWordParameter

GetIntegerParameter

GetStringParameter

ResetParameters

RunProcess

Useful functions:

SetCursorBusy

ResetCursor

CheckActiveServer

GetActiveServerName

GetCurrentDocumentFileName

RunApplication

SaveCurrentDocument

 

 

Useful dialogs:

ConfirmNoYes

ConfirmNoYesCancel

ShowError

ShowInfo

ShowWarning

 

Używanie zbiorów w DelphiScript

Słowa kluczowe Embarcadero Delphi Set i In oraz operatory zbiorów +, -, *, <= i >= nie są obsługiwane w DelphiScript. Równoważne słowa kluczowe operatorów zbiorów zestawiono w poniższej tabeli.

DelphiScript nie ma typów zbiorów. Aby używać zbiorów w skryptach DelphiScript, użyj wbudowanych funkcji: MkSet, MkSetRange, InSet, SetUnion, SetDifference, SetIntersection oraz SubSet, które umożliwiają manipulowanie zbiorami w skrypcie DelphiScript. Poniżej opisano je bardziej szczegółowo.

Operatory zbiorów

Embarcadero Delphi Set Operator keyword

Equivalent DelphiScript Set Operator keyword

+

SetUnion

-

SetDifference

*

SetIntersection

<=

SubSet

=

=

<>

<>

In

InSet

Funkcja MkSet

Funkcja MkSet jest konstruktorem zbioru z zmienną liczbą argumentów. Na przykład:

Font.Style = MkSet(fsBold,fsItalic);

MkSet(fsBold,fsItalic)  oznacza tutaj tylko dwa elementy zbioru: fsBold i fsItalic.

Funkcja MkSetRange

Funkcja MkSetRange jest konstruktorem zbioru z zakresem argumentów. Na przykład:

LayerSet := MkSetRange(eTopLayer,eBottomLayer);

Funkcja MkSetRange(eTopLayer,eBottomLayer) oznacza zakres warstw od eTopLayer do eBottomLayer.

Funkcja InSet

Ta funkcja InSet jest używana jako zamiennik operatora Delphi In. A in B jest równe InSet(A, B).

If InSet(A,B) then
  ShowMessage('A is in B set')
Else
  ShowMessage('A not in B set');

Funkcja SetUnion

Funkcja SetUnion jest używana jako zamiennik operatora Delphi + . A + B jest równe SetUnion(A, B).

ASet := BSet + CSet;
// should be changed to:
ASet := SetUnion(BSet,CSet);
// in order to achieve the desired script result.

Funkcja SetDifference

Funkcja SetDifference jest używana jako zamiennik operatora Delphi - . A - B jest równe SetDifference(A, B).

Funkcja SetIntersection

Funkcja SetIntersection jest używana jako zamiennik operatora Delphi * . A * B jest równe SetIntersection(A, B).

Funkcja SubSet

Funkcja SubSet jest używana jako zamiennik operatora Object Pascal <=. A <= B jest równe SubSet(A, B).

Używanie obsługi wyjątków

Słowo kluczowe Try wprowadza instrukcję Try-Except lub Try-Finally. Te dwie instrukcje są powiązane, ale służą różnym celom:

Try-Finally

W Try-Finally instrukcje w bloku Finally są zawsze wykonywane niezależnie od tego, czy wystąpi wyjątek z bloku Try, czy nastąpi Exit lub Break. Użyj bloku Try-Finally do zwalniania obiektów tymczasowych i innych zasobów oraz do wykonywania czynności porządkowych.

Zazwyczaj w podprogramie potrzebna jest tylko jedna instrukcja Try-Finally.

Example:

Reset(F);
Try
  // process file F
Finally
  CloseFile(F);
End;

Try-Except

Użyj Try-Except do obsługi przypadków wyjątkowych. Na przykład, aby przechwycić określone wyjątki i zrobić z nimi coś użytecznego, np. zapisać je w dzienniku błędów lub utworzyć przyjazne okno dialogowe. Ponieważ słowo kluczowe On nie jest obsługiwane w DelphiScript, instrukcja Raise jest używana wewnątrz bloku Except.

Example:

Try
  X := Y/Z;
Except
  Raise('A divide by zero error!');
End;

Raise

Słowo kluczowe Raise jest powiązane ze słowem kluczowym Try. Słowo kluczowe Raise może być użyte bez parametrów do ponownego zgłoszenia ostatniego wyjątku. Może też być użyte z parametrem typu string, aby zgłosić wyjątek z określonym komunikatem.

Example:

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

Zwróć uwagę, że ponieważ słowo kluczowe On nie jest obsługiwane, obiekty Exception (dostępne w Embarcadro Delphi) nie mogą być używane.

AI-LocalizedTłumaczenie SI
Jeśli znajdziesz błąd, zaznacz tekst/obraz i naciśnij Ctrl + Enter aby wysłać nam wiadomość.
Feature Availability

The features available to you depend on which Altium solution you have – Altium Develop, an edition of Altium Agile (Agile Teams or Agile Enterprise), or Altium Designer (on active term).

If you don’t see a discussed feature in your software, contact Altium Sales to find out more.

Legacy Documentation

Altium Designer documentation is no longer versioned. If you need to access documentation for older versions of Altium Designer, visit the Legacy Documentation section of the Other Installers page.

Content