2011-12-05 12 views
9

Sto usando delphi 7 e sto provando a fare un'interfaccia wizard. Non so se c'è un modo più semplice per creare un wizard, quindi stavo pensando di creare moduli separati per ogni fase della procedura guidata e quando l'utente fa clic su "Avanti", il modulo attivo si chiude e viene aperto quello successivo.facendo un'interfaccia wizard in delphi 7

Ecco uno screen-shot di due forme successive: screen-shot

Ho fatto una procedura che prende 2 forme come parametri: la forma che verrà chiuso e la prossima forma di procedura guidata

class Procedure Tspad.nextForm(showForm, closeForm: TForm); 
begin 
    closeForm.Close; 
    showForm.Showmodal; 
end; 

quando clicco sul pulsante "Avanti" viene eseguito il codice folowing:

Tspad.nextForm(echipContractForm, clientContractForm); 

quando ho eseguito il programma, e si preme il pulsante "Avanti", il prossimo modulo apeare ma il curente non si chiude.

Come posso fare questo lavoro, o c'è un altro modo più efficace per creare un mago?

+4

Utilizzare TPageControl: http://delphi.about.com/od/delphitips2007/qt/hidepagectrltab.htm – SimaWB

+3

Project Jedi (JVCL) ha un componente della procedura guidata denominato [TJvWizard] (http: //wiki.delphi-jedi. org/wiki/JVCL_Help: TJvWizard). –

risposta

20

Un modo molto comune per fare una procedura guidata è quello di utilizzare un controllo pagina. Ogni pagina distinta della procedura guidata è una pagina diversa/un foglio di calcolo nel controllo della pagina. Credo che questo sia effettivamente il modo in cui Windows implementa le procedure guidate.

Ovviamente si desidera nascondere tutte le schede. A tale scopo, impostare TabVisible su False per ogni foglio di calcolo. Quando desideri spostarti avanti e indietro attraverso il wizard, ad es. quando l'utente fa clic sui pulsanti successivo o precedente, effettua questa operazione impostando ActivePage o ActivePageIndex in base alle tue preferenze.

+0

Ecco come l'ho fatto in passato. Avere un modulo separato per la procedura guidata, con il controllo della pagina e alcuni pulsanti. –

+0

Sono d'accordo con questo, ma anche con l'idea di LaKraven di creare un modulo per pagina e ancorare le pagine in fase di runtime. Altrimenti i maghi tendono a trasformarsi in una gigantesca palla di spaghetti. –

+0

@Warren LaKraven in realtà suggerisce i frame piuttosto che i moduli e presumo che li agganci in fase di progettazione. Ma in entrambi i casi funziona e può essere un'ottima tecnica per tenere a bada gli spaghetti, sono d'accordo. –

14

Una buona pratica per la divisione del contenuto visualizzato su un unico modulo è l'uso di Telai.

Un Telaio è un po 'come una forma, tranne che non ha una finestra propria, ma piuttosto si trova all'interno di un modulo ospite.

, se utilizzati insieme (come David Heffernan ha suggerito) un TPageControl o anche un TNotebook (che è pretty-più o meno esattamente la stessa di TPageControl, solo che non ha schede per cominciare), si finisce con un Wizard facilmente gestibile.

+2

+1 ma 'TNotebook' è un po 'strano. Mi sembra un legato ed è forse un po 'più difficile da usare. –

+0

Ne parlo perché non riesco a ricordare se TPageControl esiste realmente in Delphi 7 (lo uso un sacco in questi giorni, ma non ricordo di averlo visto circa Delphi 7) – LaKraven

+2

Sì era presente in D7 e molto prima di allora anche –

2

è possibile testare alcuni componenti che possono aiutare in questo compito (internamente utilizzando tPageControl o TNotebook). Vedi this link.

Saluti.

11

JVCL ha un buon controllo per effettuare una procedura guidata in modo molto semplice ed efficace (TJvWizard). Vedi http://jvcl.delphi-jedi.org/

+0

concordato. Ti fa risparmiare molto tempo per reinventare la ruota. –

0

Si può anche considerare TMS TAdvSmoothStepControl (non gratuito!). Un'altra soluzione, ma solo "esterna" al programma, è utilizzare Inno Setup per creare una procedura guidata, anche per scopi di "installazione non di installazione".

Infatti con Inno Setup è possibile fare molti pensieri (modificare il file .ini e il registro, avviare/fermare programmi ...) che può essere utile per una procedura guidata senza "installare" un programma.

+1

L'ultima istruzione nella tua risposta presuppone che l'OP sta tentando di produrre un'installazione guidata. Gli screenshot suggeriscono diversamente. Suggerisco di modificare quella parte della tua risposta e di lasciare la raccomandazione di TAdvSmoothStepControl (che è sicuramente un buon componente) – LaKraven

+0

@LaKraven Mentre l'uso principale di Inno Setup è creare una installazione, puoi anche usarla (con qualche trucco) come procedura guidata per semplici operazioni, come chiudere un programma, modificare i file .ini in base alle scelte dell'utente ed eseguire nuovamente il programma. Può essere che non è chiaro per tutti e modificherò la mia risposta. – philnext

Problemi correlati