Moduli e componenti
Panoramica dei componenti grafici
Il sistema di scripting gestisce due tipi di componenti: componenti visivi e non visivi.
I componenti visivi servono a costruire l’interfaccia utente, mentre quelli non visivi vengono utilizzati per diverse attività, come ad esempio TimerOpenDialogMainMenu
- Il
componente non visivo può essere utilizzato per attivare codice specifico a intervalli prestabiliti e non è mai visibile all’utente.Timer - La
,Button eEdit sono componenti visivi.Memo
Entrambe le tipologie di componenti compaiono in fase di progettazione, ma i componenti non visivi non sono visibili in fase di esecuzione. I componenti del
- Proprietà
- Eventi
- Metodi
Una
Un
Una
Tutti i moduli di script hanno uno o più componenti. I componenti solitamente visualizzano informazioni o consentono all’utente di eseguire un’azione. Ad esempio, un LabelEditButton
Su un modulo è possibile inserire qualsiasi combinazione di componenti e, mentre lo script è in esecuzione, l’utente può interagire con qualsiasi componente presente sul modulo. Spetta al programmatore decidere cosa succede quando un utente fa clic su un pulsante o modifica il testo in una Edit
Il sistema di scripting fornisce una serie di componenti che possono essere utilizzati per creare interfacce utente complesse per gli script. Per inserire un componente in un modulo, individuare la relativa icona nelpannello «Tavolozza degli strumenti» e fare doppio clic su di essa. Questa azione inserisce il componente nel modulo attivo. La rappresentazione visiva della maggior parte dei componenti viene impostata tramite le relative proprietà. Inizialmente un componente viene posizionato in una posizione predefinita sul modulo, ma può essere riposizionato (trascinato) e ridimensionato (allungato) secondo necessità. È inoltre possibile modificare le dimensioni e la posizione in un secondo momento utilizzando il
Quando un componente viene trascinato su un modulo, il sistema di scripting genera automaticamente il codice necessario per utilizzarlo e aggiorna il modulo dello script. Per far funzionare il componente sul modulo, è sufficiente impostare le proprietà e implementare il codice del gestore di eventi in modo da utilizzare i metodi desiderati.
Progettazione dei moduli di script
Un modulo di script è progettato per interagire con l’utente all’interno dell’ambiente. La progettazione dei moduli di script costituisce il fulcro dello sviluppo visivo.
In pratica, tutti i componenti vengono posizionati su un modulo di script e ogni proprietà impostata viene memorizzata in un file che descrive il modulo (un *.DFM*.PAS.PAS.DFM
Quando si lavora con un modulo di script e i suoi componenti, è possibile visualizzare e modificare tutte le proprietà degli elementi utilizzando il Caption
Creazione di un nuovo modulo di script
Con un progetto di script aperto, fare clic con il tasto destro del mouse su un progetto nel EditScript1.pas
Visualizzazione di un modulo di script
Uno script deve contenere una procedura che visualizzi il modulo quando lo script viene eseguito. All’interno di questa procedura, è possibile richiamare il ShowModalVisibleShowModal
Procedure RunDialog; Begin DialogForm.ShowModal; End;
L' ShowModalRunDialogDialogFormDialogForm.ShowModal
L' ModalResultmrOkmrCancelShowModal
Procedure TForm.OKButtonClick(Sender: TObject); Begin ModalResult := mrOK; End; Procedure TForm.CancelButtonClick(Sender: TObject); Begin ModalResult := mrCancel; End; Procedure RunShowModalExample; Begin // Form's Visible property must be false for ShowModal to work correctly. If Form.ShowModal = mrOk Then ShowMessage('mrOk'); If Form.ShowModal = mrCancel Then ShowMessage('mrCancel'); End;
Quando l'utente fa clic su uno dei due pulsanti presenti in questo modulo di script, la finestra di dialogo si chiude. Non è necessario richiamare il CloseModalResult
Si noti che, se si desidera impostare il ModalResultCancelCancelTrueSender.Cancel := TrueCancelButtonClick
Accettazione dell'input da parte dell'utente
Uno dei componenti più comuni in grado di accettare input dall'utente è il TEditTMaskEdit
L'esempio riportato di seguito illustra il processo che si verifica quando l'utente fa clic sul pulsante dopo aver digitato qualcosa nella casella di modifica. Se l'utente non ha digitato nulla nel componente di modifica (campo vuoto), il gestore di eventi risponde con un messaggio di avviso.
Procedure TScriptForm.ButtonClick(Sender : TObject); Begin If Edit1.Text = '' Then Begin ShowMessage('Warning - empty input!'); Exit; End; // do something else for the input End;
Si noti che l’utente può spostare il focus di input della finestra di dialogo utilizzando il tasto
Risposta agli eventi
Quando si fa clic su un pulsante in un modulo o su un componente, il sistema di scripting risponde ricevendo una notifica di evento da Altium Designer e richiamando il metodo di gestione degli eventi appropriato.
Il progetto HelloWorld dalla Scripts\DelphiScript Scripts\General\
Lo script di esempio ShowModal dalla Scripts\DelphiScript Scripts\General\
Scrittura dei gestori di eventi
Ogni componente in uno script di un modulo dispone di una serie di nomi di eventi, che vengono utilizzati dai gestori di eventi dello script per determinare come lo script reagirà alle azioni dell’utente in Altium Designer. Ad esempio, quando un utente fa clic su un pulsante in un modulo, Altium Designer invia un messaggio allo script e lo script reagisce a questo nuovo evento. Se viene specificato l’ OnClick
Il codice per rispondere agli eventi è normalmente contenuto nei gestori di eventi DelphiScript e tutti i componenti dispongono di una serie di eventi a cui possono reagire. Ad esempio, tutti i componenti cliccabili hanno un OnClickOnEnterOnExitOnEnterOnExit
In sintesi, un evento è un collegamento tra un'azione in Altium Designer, come il clic su un pulsante, e un frammento di codice che risponde a tale azione. Il codice di risposta è un gestore di eventi. Questo codice modifica i valori delle proprietà e chiama i metodi.
Proprietà dei componenti
Per visualizzare l’elenco delle proprietà di un componente, selezionare il componente e aprire la
Eventi del componente
Per visualizzare l'elenco degli eventi a cui un componente può reagire, selezionare un componente e aprire la
Ad esempio, selezionare il TButtonOnClickOnClick

Se un pulsante dispone di un CloseCloseClickOnClickClose
In sintesi, selezionare un componente pulsante dal modulo oppure utilizzando il OnClick
Metodi dei componenti
Per visualizzare un elenco dei metodi di un componente, consultare il documento Riferimento ai componenti.
Trascinamento dei componenti su un modulo di script
Per utilizzare i componenti dal pannello "Tavolozza degli strumenti " in uno script, è necessario che esista un modulo di script prima di poter trascinare i componenti sul modulo. Normalmente, quando i componenti vengono trascinati su un modulo di script, non è necessario creare o distruggere questi oggetti: il modulo di script lo fa automaticamente.
Il sistema di scripting genera inoltre automaticamente il codice necessario per utilizzare un componente e aggiorna il modulo di script. A questo punto basta impostare le proprietà, inserire il codice nei gestori di eventi e utilizzare i metodi richiesti per implementare un modulo di script funzionante.
Creazione di componenti in uno script
I componenti possono essere creati o distrutti direttamente in uno script passando un NilConstructorOpenSaveTOpenDialogTSaveDialog
Personalizzazione dei moduli script
I punti essenziali per la personalizzazione dei moduli script sono:
- Per forzare un modulo a rimanere in primo piano rispetto agli altri pannelli aperti, impostare la
proprietà suFormStyle .fsStayOnTop - Per definire il comportamento predefinito di un modulo, impostare la
su uno dei seguenti valori;FormKind ,fkNone ,fkNormal oppurefkServerPanel .fkModal - Se
è chiuso, il modulo sarà un modulo modale — ovvero, attenderà un input da parte dell’utente prima di procedere, ad esempio alla chiusura del modulo. SefkModal allora il modulo verrà visualizzato come pannello server. SefkServerPanel allora il modulo si comporta come un normale modulo non modale.fkNormal - Per rimuovere le barre di scorrimento predefinite del modulo, modificare il valore del
eHorzScrollBar .VertScrollBar - Per rendere il modulo un frame MDI o un figlio MDI, utilizzare la
.FormStyle - Per modificare lo stile del bordo del modulo, utilizzare la proprietà
eBorderIcons (i risultati sono visibili in fase di esecuzione).BorderStyle - Per modificare l'icona del modulo ridotto a icona, utilizzare la
.Icon - Per specificare la posizione iniziale di un modulo nella finestra dell'applicazione, utilizzare la
proprietà.Position - Per specificare lo stato iniziale del modulo (ad esempio, ridotto a icona, ingrandito o normale), utilizzare la
proprietà.WindowState - Per definire l'area di lavoro del modulo in fase di esecuzione, utilizzare la
eClientHeight (si noti cheClientWidth eClientHeight rappresentano l'area all'interno del bordo del modulo;ClientWidth mentreHeight rappresentano l'intera area del modulo).Width - Per specificare quale controllo abbia il focus iniziale nel modulo in fase di esecuzione, utilizzare la
proprietà.ActiveControl - Per trasmettere tutti gli eventi da tastiera al modulo, indipendentemente dal controllo selezionato, utilizzare la
proprietà.KeyPreview - Per specificare un menu particolare, se un modulo contiene più di un menu, utilizzare la
proprietà.Menu
Aggiornamento dei moduli e dei componenti degli script
Quando l’interfaccia di un modulo script diventa obsoleta, ad esempio quando i controlli non vengono aggiornati o ridisegnati, questi ultimi possono apparire bloccati o danneggiati; ciò potrebbe essere dovuto a un’elaborazione in background intensiva da parte di quello script.
Il UpdateUpdate
Procedure TConverterForm.loadbuttonClick(Sender: TObject); Begin If OpenPictureDialog1.Execute then Begin XPProgressBar1.Position := 0; XStatusBar1.SimpleText := ' Loading...'; XStatusBar1.Update; // loading a monochrome bitmap only Image1.Picture.LoadFromFile(OpenPictureDialog1.FileName); // Check if image is monochrome, otherwise prompt a warning If Image1.Picture.Bitmap.PixelFormat > pf1bit Then Begin ShowWarning('The image is not a monochrome!'); Close; End; lImageSize.Caption := IntToStr(Image1.Picture.Width) + ' x ' + IntToStr(Image1.Picture.Height) + ' mils'; convertbutton.Enabled := True; LoadButton.Enabled := False; XStatusBar1.SimpleText := ' Ready...'; XStatusBar1.Update; End; End;
Il frammento di codice sopra riportato è tratto dal PCB Logo CreatorScripts\Delphiscript Scripts\Pcb\PCB Logo Creator