Writing Scripts

 

Pisanie skryptów

Istnieje szereg kluczowych pojęć i terminów związanych z pisaniem skryptów:

  • Procesy to ciągi poleceń, których można używać do wykonywania komend w skryptach.
  • Komponenty to wizualne elementy sterujące na panelu Tool Palette panel, które można przeciągać i upuszczać na formularz skryptu, aby manipulować projektem.
  • Komponent umieszczony na formularzu skryptu ma metody, właściwości i zdarzenia.
  • Object Interfaces to specjalne interfejsy obiektów, których można używać do wyodrębniania i modyfikowania danych w dokumentach projektowych z poziomu skryptów.

Języki skryptowe

Domyślny język skryptowy jest ustawiony na DelphiScript (*.pas). Sam silnik skryptowy jest napisany w Embarcadero Delphi, a panel Tool Palette jest oparty na VCL (Visual Component Library) Delphi.

  • Możesz otwierać i uruchamiać istniejące skrypty napisane w VBScript i JavaScript (Jscript). Aby móc tworzyć nowe skrypty w VBScript, musisz włączyć opcję Legacy.Scripts.SupportOldLanguages w oknie dialogowym Advanced Settings dialog.

  • Dokumentację dla API skryptowego można znaleźć tutaj: Scripting API Objects. Pamiętaj, że ta dokumentacja była ostatnio aktualizowana dla starszej wersji Altium Designer. Chociaż wiele zasad i podejść pozostanie takich samych, miej na uwadze, że interfejsy, obiekty, metody, właściwości itp. od tego czasu uległy zmianie i nie odzwierciedlają pełnego zakresu tych dostępnych w nowszych wersjach oprogramowania.

Jednostka DelphiScript

Szybkie i podstawowe ćwiczenie skryptowe można wykonać, tworząc najpierw nowy projekt i plik skryptu. Zakładając, że projekt i plik skryptu są ustawione na język DelphiScript, można wprowadzić prosty skrypt „Hello World”, jak poniżej.

Procedure ShowAMessage;
Var
 DefaultMessage;
Begin
 DefaultMessage := 'Hello World!';
 ShowMessage(DefaultMessage);
End;
Gdy dokument jest edytowany, obok dokumentu skryptu pojawia się gwiazdka, a ikona na panelu Projects panel zmienia kolor na czerwony. Gdy edytowana jest linia kodu skryptu, w lewym marginesie tej linii pojawia się czerwony blok, wskazujący, że linia została zmieniona.

Wewnątrz procedury znajduje się standardowa funkcja DelphiScript ShowMessage, która otwiera okno dialogowe z komunikatem „Hello World”, zdefiniowanym przez zmienną DefaultMessage.

Ponieważ wszystkie zmienne w skryptach są typu variant, nie ma potrzeby definiowania typu zmiennej DefaultMessage w skrypcie.

Uruchamianie skryptu

Aby uruchomić jeden ze skryptów, wybierz File » Run Script z menu głównego, a następnie wskaż dostępną procedurę skryptu w oknie dialogowym Select Item To Run. Po uruchomieniu wersji zostanie otwarte okno dialogowe wyświetlające komunikat.

Uruchamianie prostej jednostki skryptu HelloWorld z menu File » Run Script.
Uruchamianie prostej jednostki skryptu HelloWorld z menu File » Run Script.

Ten skrypt ma procedurę bez parametrów. W oknie dialogowym Select Item To Run pojawiają się tylko procedury lub funkcje, które don't mają parametry. Procedury wymagające przekazania parametrów są wywoływane z poziomu skryptu (lub innego skryptu), ale nie z systemu zewnętrznego, takiego jak okno dialogowe Select Item To Run, gdzie parametry nie są przekazywane.

Skrypt można również wykonać za pomocą polecenia Run w edytorze, dostępnego przez przycisk Run (), klawisz skrótu F9 lub przez wybranie Run » Run z menu głównego.

Oprócz samego polecenia Run, rozwijane Run menu oferuje szereg poleceń sterowania skryptem i debugowania.Oprócz samego polecenia Run, rozwijane Run menu oferuje szereg poleceń sterowania skryptem i debugowania.

Gdy polecenie Run zostanie wybrane po raz pierwszy, otworzy się okno dialogowe Select Item to Run, umożliwiające wskazanie głównej procedury skryptu (ShowAMessage w tym przypadku). Po ustawieniu skrypt można łatwo uruchamiać wielokrotnie z edytora, używając polecenia Run . Użyj Run » Set Project Startup Procedure, aby zmienić ustawienie na inną procedurę, albo zamknij i ponownie otwórz projekt skryptu, aby wyczyścić to ustawienie.

Aby zatrzymać uruchomiony skrypt, użyj przycisku Stop (), wybierz Run » Stop z menu głównego lub użyj skrótu Ctrl+F3.

Formularz DelphiScript

Rozwijając projekt HelloWorld utworzony powyżej, można stworzyć podobny skrypt z użyciem jednostki formularza.

Formularz skryptu to okno dialogowe, które może zawierać różne kontrolki, takie jak przyciski, pola memo i listy. Ma procedury obsługi zdarzeń, które reagują, gdy kontrolka wygeneruje zdarzenie, na przykład po kliknięciu przycisku.

Aby utworzyć nowy formularz skryptu, kliknij prawym przyciskiem nazwę projektu w panelu Projects panel, wybierz opcję Add New to Project i wskaż Script Form. Skrypt można zapisać i zmienić jego nazwę, używając File » Save As z menu głównego.

Po utworzeniu nowego projektu skryptu dodaj do niego nowy skrypt. Po utworzeniu nowego projektu skryptu dodaj do niego nowy skrypt.

Formularz skryptu tworzy dwa pliki: plik *.dfm, który definiuje elementy i uchwyty okna formularza, oraz plik *.pas, który zawiera procedury obsługi zdarzeń formularza oraz procedury lub funkcje.

Aby wyświetlić i edytować wartości właściwości aktualnie aktywnego formularza lub jego komponentów, otwórz panel Object Inspector. Panel Object Inspector służy do zmiany właściwości formularza oraz wstawiania kodu w procedurach obsługi zdarzeń powiązanych z bieżącym formularzem.

Konfiguracja okna i właściwości formularza skryptu są prezentowane w panelu Object Inspector.
Konfiguracja okna i właściwości formularza skryptu są prezentowane w panelu Object Inspector.

Zwróć uwagę, że formularz skryptu oferuje na dole dokumentu dwie zakładki: Code oraz Form .

Zakładka Code zawiera procedury obsługi zdarzeń i procedury, jak pokazano powyżej, natomiast zakładka Form reprezentuje okno dialogowe i zawiera kontrolki oraz powiązane procedury obsługi zdarzeń. Użyj zakładek lub skrótu klawiszowego F12, aby przełączać się między nimi.

Terminy „dialog” i „formularz skryptu” są w tym przewodniku opisowo równoważne. Termin „formularz” odnosi się do okna projektowanego w czasie rzeczywistym w systemie skryptowym, a „dialog” to aktywny formularz w oprogramowaniu, który oczekuje na reakcję użytkownika i wykonuje działanie po kliknięciu przycisku okna dialogowego lub kontrolki.

Panel Object Inspector umożliwia przeglądanie i edycję właściwości oraz zdarzeń komponentów w aktywnym formularzu skryptu. Kliknięcie pojedynczego komponentu na aktywnym formularzu skryptu w oknie edytora projektu spowoduje jego zaznaczenie i wyświetlenie powiązanych atrybutów w panelu Object Inspector. Alternatywnie użyj listy rozwijanej u góry panelu, aby wybrać z listy wszystkie komponenty aktualnie umieszczone na aktywnym formularzu. Sam formularz również jest uwzględniony.

Użyj panelu Object Inspector, aby skonfigurować okno dialogowe formularza i jego działanie. 
Użyj panelu Object Inspector, aby skonfigurować okno dialogowe formularza i jego działanie.

Informacje są wyświetlane na dwóch zakładkach – Properties oraz Events:

  • Zakładka Properties panelu zawiera listę wszystkich atrybutów właściwości dla wybranego komponentu. Dokładna lista dostępnych atrybutów zależy od konkretnego typu komponentu aktualnie analizowanego. Właściwość to cecha obiektu, która wpływa na jego widoczne zachowanie lub działanie. Na przykład właściwość Visible (w podkategorii Behavior ) określa, czy obiekt jest wyświetlany na formularzu skryptu, na którym został umieszczony. Właściwości komponentu można modyfikować według potrzeb. Kliknij w pole po prawej stronie właściwości i wpisz wartość bezpośrednio, przełącz pole wyboru lub wybierz pozycję z listy rozwijanej — zależnie od przypadku.
  • Zakładka Events panelu udostępnia listę wszystkich zdarzeń, na które może reagować aktualnie wybrany komponent. Ponownie, dokładna lista dostępnych zdarzeń zależy od konkretnego typu komponentu aktualnie analizowanego. Gdy wystąpi zdarzenie, na przykład kliknięcie przycisku na formularzu, skrypt wykona odpowiednie działanie — pod warunkiem, że w kodzie zdefiniowano procedurę obsługi tego zdarzenia. Taka procedura nazywana jest procedurą obsługi zdarzeń (event handler).

Szkielet procedury obsługi zdarzenia można dodać do kodu dokumentu skryptu z poziomu panelu Object Inspector. Wystarczy wybrać komponent, dla którego chcesz zdefiniować zdarzenie, wybrać konkretny typ zdarzenia, a następnie dwukrotnie kliknąć w polu po prawej stronie zdarzenia. Tworzona jest nazwa zdarzenia i używana w definicji nazwy procedury obsługi zdarzenia — FormName.EventName. Następnie kod szkieletowy procedury obsługi zdarzenia jest dodawany do głównego kodu skryptu, który staje się aktywną zakładką w obszarze projektowania. „Wypełnienie” procedury obsługi zdarzenia można potem zakodować tak, aby zapewnić pożądaną reakcję, gdy zdarzenie wystąpi i zostanie wykryte przez uruchomiony skrypt.

Dolna część panelu zawiera opis podsumowujący aktualnie wybraną właściwość lub zdarzenie, jeśli jest dostępny.

Można jednocześnie zaznaczyć i edytować wiele komponentów. W panelu będą wyświetlane te właściwości/zdarzenia, które są wspólne dla wszystkich zaznaczonych komponentów. Właściwości/zdarzenia o różnych wartościach między komponentami będą wyświetlane jako puste. Po prostu edytuj właściwości i/lub zdarzenia według potrzeb — wprowadzone zmiany zostaną natychmiast zastosowane do każdego komponentu w zaznaczeniu. Na przykład możesz chcieć zmienić czcionkę tekstu na wielu przyciskach. Zaznacz wszystkie przyciski i zmień właściwości wymienione w kategorii Font zgodnie z potrzebą — wszystkie przyciski zostaną zaktualizowane tak, aby wyświetlały tekst tą samą czcionką.

Dla tego skryptu formularza zmień właściwości Caption formularza w panelu Object Inspector z HelloWorldForm na Hello World!. Te ciągi odpowiadają tym użytym w przykładowym kodzie procedury obsługi zdarzenia i procedury pokazanym dalej poniżej.

Aby uzyskać bardziej szczegółowe informacje dotyczące komponentów oraz ich właściwości, metod i zdarzeń, zobacz stronę Component Categories.

Dodawanie i konfigurowanie kontrolek

Po skonfigurowaniu podstawowego formularza można w razie potrzeby dodać do okna dialogowego kontrolki, korzystając z panelu Tool Palette. Panel Tool Palette, oparty na bibliotece Visual Component Library (VCL) środowiska Delphi, jest paletą komponentów oferującą szeroki wybór kontrolek okienkowych, uporządkowanych w kategorie komponentów (więcej informacji na stronach  Scripting Graphical Components oraz Component Categories).

Sekcje panelu  Tool Palette można rozwijać i zwijać za pomocą zakładek nagłówków obszarów.
Sekcje panelu Tool Palette można rozwijać i zwijać za pomocą zakładek nagłówków obszarów.

Użyj kontrolek u góry panelu, nazw kategorii oraz menu kontekstowego (prawy przycisk myszy), aby skonfigurować sposób prezentacji kontrolek w panelu: rozwijanie/zwijanie kategorii, zmiana sposobu wyświetlania elementów palety itp.

Wszystkie komponenty używane w panelu dziedziczą po TComponent w bibliotece Borland Delphi Visual Component Library.

Dla wersji dialogowej projektu „Hello World” na formularzu znajdują się dwa przyciski – Display oraz Close. Kliknij TButton w obszarze Standard panelu Tool Palette.

Wykonaj to dwukrotnie, aby umieścić na formularzu dwa przyciski. Jeden przycisk posłuży do wyświetlenia komunikatu „Hello World!” w osobnym oknie dialogowym, a drugi do zamknięcia głównego okna dialogowego.

Komponenty można umieszczać na formularzu skryptu, klikając dwukrotnie komponent w panelu Tool Palette, albo klikając komponent raz, a następnie klikając na formularzu w miejscu, w którym ma się pojawić.

Wszystkie komponenty w panelu mają powiązane właściwości (Properties), metody (Methods) i zdarzenia (Events), gdzie:

  • Właściwość Property to cecha obiektu, która wpływa na jego widoczne zachowanie lub działanie. Na przykład właściwość Visible określa, czy obiekt może być widoczny na formularzu skryptu.
  • Metoda Method to procedura zawsze powiązana z obiektem, definiująca zachowanie tego obiektu.
  • Zdarzenie Event to akcja lub wystąpienie wykryte przez skrypt. W skrypcie programista pisze kod dla każdego programu obsługi zdarzeń (Event Handler), który ma przechwycić konkretne zdarzenie, takie jak kliknięcie myszą.

Właściwości i zdarzenia komponentu można przeglądać i modyfikować po jego umieszczeniu, korzystając z panelu Object Inspector .

Korzystając z panelu Object Inspector, można zmienić domyślne nazwy i podpisy (captions) obu przycisków.

Ustaw nazwę pierwszego przycisku na bDisplay, a jego podpis na Display. Ustaw nazwę drugiego przycisku na bClose, a jego podpis na Close. Ma to na celu dopasowanie do przykładowego kodu obsługi zdarzeń przedstawionego poniżej.

Zaznacz komponent i edytuj jego właściwości w panelu Object Inspector.
Zaznacz komponent i edytuj jego właściwości w panelu Object Inspector.

Pole komentarzy na dole panelu Object Inspector zawiera opis podświetlonej właściwości.

Kod obsługi zdarzeń można tworzyć, odwołując się bezpośrednio do kontrolek na formularzu. W tym przykładzie przycisk Display uruchomi okno dialogowe ShowMessage nad istniejącym formularzem, a działanie przycisku Close zamknie ten formularz.

Kod obsługi zdarzeń

Dwukrotne kliknięcie przycisku Display otworzy formularz w widoku Code i utworzy szkielet kodu dla jego procedury obsługi zdarzenia. Alternatywnie zaznacz przycisk, a następnie kartę Events w panelu Object Inspector. Dwukrotne kliknięcie zdarzenia OnClick w panelu otworzy widok kodu jak wyżej. W widoku Code do procedury obsługi zdarzenia można dodać instrukcję ShowMessage, jak pokazano w zestawieniu poniżej.

Procedure THelloWorldForm.bDisplayClick(Sender: TObject);
Begin
 ShowMessage('Hello World!');
End;
Aby wyświetlić predefiniowane procedury obsługi zdarzeń dla dowolnego komponentu na formularzu skryptu, zaznacz komponent, a następnie kliknij kartę Events w panelu Object Inspector.
Podobnie procedurę obsługi zdarzenia dla przycisku Close można zdefiniować, generując zdarzenie OnClick, które zastosuje instrukcję Close (form):
Procedure THelloWorldForm.bCloseClick(Sender: TObject);
Begin
 Close;
End;

Po zdefiniowaniu procedur obsługi zdarzeń potrzebna jest w skrypcie procedura, która będzie używana jako punkt startowy podczas wywoływania okna dialogowego z poziomu oprogramowania. Dodaje się ją na końcu kodu skryptu.

Zwróć uwagę, że nazwa formularza to HelloWorldForm, a nazwa procedury to RunHelloWorld — ważne jest, aby w tym samym skrypcie nazwy formularzy były unikatowe, aby uniknąć konfliktów nazw.

Procedure RunHelloWorld;
Begin
 HelloWorldForm.ShowModal;
End;

Skrypt można zapisać, a następnie uruchomić z menu głównego (File» Run Script)), uruchamiając pozycję procedury RunHelloWorld w ramach wpisu HelloWorldDialog.

Alternatywnie procedurę można przypisać do polecenia/przycisku Run () za pomocą menu Run » Set Startup Project Procedure.

Uruchomienie skryptu formularza HelloWorld, w którym przycisk Display aktywuje okno dialogowe ShowMessage.
Uruchomienie skryptu formularza HelloWorld, w którym przycisk Display aktywuje okno dialogowe ShowMessage.

Panel Object Inspector ułatwia zmianę właściwości i zdarzeń jednostki formularza. Na przykład, aby zmienić położenie formularza w obszarze roboczym, użyj panelu, aby zmodyfikować wartość poScreenCenter dla właściwości położenia formularza. Okno dialogowe zostanie teraz umieszczone na środku ekranu pulpitu podczas uruchamiania skryptu.

Wersję referencyjną skryptów projektu Hello World można znaleźć w folderze Scripts\Delphiscript Scripts\General w downloadable kolekcji skryptów. Pamiętaj, że są to starsze projekty referencyjne i nie są aktualizowane.

Wywoływanie procedury

Jak wspomniano powyżej, każdy skrypt (używający tego samego zestawu językowego) w ramach projektu ma dostęp do zmiennych globalnych i procedur, więc procedura w jednym skrypcie może wywołać inną procedurę w innym skrypcie w projekcie.

Można to zademonstrować dodatkową sekcją kodu ShowAParametricMessage w przykładowym projekcie HelloWorld:

Procedure ShowAParametricMessage(S : String);
Var
    DefaultMessage;
Begin
    DefaultMessage := 'Hello World!';

    If S = '' Then ShowMessage(DefaultMessage)
              Else ShowMessage(S);
End;

Ustanawia to zmienną typu string „S”, którą można przekazać do procedury ShowAParametricMessage.

Przekazany ciąg zostanie wyświetlony przy użyciu funkcji okna dialogowego ShowMessage, natomiast prosta metoda If-Then-Else spowoduje wyświetlenie domyślnego komunikatu „Hello World!”, jeśli ciąg jest pusty.

Aby zobaczyć to w działaniu, otwórz przykładowy projekt (HelloWorld.PrjScr) i dodaj szarą, podświetloną linię do skryptu HelloWorldDialog (nie do skryptu HelloWorld), jak pokazano poniżej.

...
Procedure THelloWorldForm.bDisplayClick(Sender: TObject);
Begin
    Showmessage('Hello World!');
End;

Procedure THelloWorldForm.bCloseClick(Sender: TObject);
Begin
    ShowAParametricMessage('Goodbye World');
    close;
End;

Procedure RunHelloWorld;
Begin
    HelloWorldForm.ShowModal;
End;
...

Gdy skrypt HelloWorldDialog zostanie uruchomiony i kliknięty zostanie przycisk Close , globalna procedura ShowAParametricMessage zostanie wywołana ze skryptu HelloWorld.

Procedura parametryczna w skrypcie HelloWorld jest wywoływana ze skryptu HelloWorldDialog.
Procedura parametryczna w skrypcie HelloWorld jest wywoływana ze skryptu HelloWorldDialog.

Wywołanie przekazuje ciąg komunikatu „Goodbye World” do procedury ShowAParametricMessage, więc komunikat ten jest wyświetlany po kliknięciu przycisku Close, przed zamknięciem formularza.

Pokazane powyżej wywołanie skryptu wstawia określony komunikat w procedurze zamykania formularza HelloWoldDialog.
Pokazane powyżej wywołanie skryptu wstawia określony komunikat w procedurze zamykania formularza HelloWoldDialog.

Jeśli przekazany parametr typu string jest pusty, ShowAParametricMessage(''), zostanie wyświetlony domyślny komunikat „Hello World!”, zgodnie z definicją w procedurze ShowAParametricMessage.

Aby uzyskać listę skrótów klawiszowych, które pomagają usprawnić proces pisania i debugowania skryptów, zobacz stronę Script Editor Tools.

Przeglądanie identyfikatorów skryptu za pomocą panelu Code Explorer

Panel Code Explorer zapewnia wizualne podsumowanie wszystkich identyfikatorów (zmiennych, funkcji i procedur) używanych w aktywnym dokumencie skryptu.

Panel Code Explorer
Panel Code Explorer

Informacje o identyfikatorach wyświetlane w panelu są pogrupowane w następujących folderach najwyższego poziomu:

  • Procedures & Functions – zawiera wszystkie procedury i funkcje zadeklarowane w aktywnym dokumencie skryptu. Dla każdej procedury/funkcji wyszczególnione są także parametry przekazywane do procedury/funkcji oraz zmienne lokalne.

  • Variables – zawiera wszystkie zmienne globalne zadeklarowane w aktywnym dokumencie skryptu.

Jeśli dla procedury/funkcji zadeklarowano zmienne lokalne, pojawią się one w podfolderze zmiennych (variables) pod daną procedurą/funkcją. Do rozróżnienia poszczególnych identyfikatorów używane są unikatowe ikony:

Procedura

Funkcja

Parametr procedury/funkcji

Zmienna (lokalna lub globalna)

Dwukrotne kliknięcie wpisu w panelu (lub zaznaczenie go i naciśnięcie klawisza Enter) spowoduje przejście do odpowiadającego mu fragmentu kodu w przestrzeni projektowej.

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