PDA

Visualizza la versione completa : [C++] Consigli su interfaccia e uso di ActionList (C++Builder)


carmelov
31-01-2007, 17:12
Salve a tutti:
Sto sviluppando un'applicazione con il Borland C++ Builder 5, quindi uso le VCL, che sono comuni al Delphi, per cui pu˛ rispondermi anche qualcuno che conosce il Delphi, in quanto quello che chieder˛ Ŕ legato alle VCL, ed in ogni caso saprei tradurre il codice da Delphi a C++.
L'applicazione ha l'interfaccia come da allegato.
Io vorrei che nella form di sinistra si procedesse all'input, che deve essere del tipo controllato (nel senso che con OK si confermano i dati, e con Cancel si annullano) e nel frattempo si possa vedere sul pannello di destra l'effetto delle varie modifiche all'input. Al centro fra la form di sinistra ed il pannello di destra ci va il disegno.
La form di sinistra Ŕ di tipo non modale per consentire di effettuare zoom sul disegno ed altro.
Di queste form a sinistra ne dovrei visualizzare diverse (6), collegate ad una actionlist, a sua volta collegata ad alcune voci dei men¨.
Queste form devono funzionare come se fossimo in presenza di un RadioGroup, nel senso che non si devono potere richiamare le altre form (tramite men¨ o toolbar) se prima non si chiude quella attiva (in modo da avere un comportamento pseudo-modale) nell'ambito del gruppo.
Inoltre ad ogni tipo di form, deve essere associato un diverso pannello di risultati.
I pannelli di destra vanno associati ad un pulsante sulla toolbar che abilita o meno la visualizzazione dei risultati, e che non dovrebbe fare ridisegnare il canvas centrale se attivato o disattivato.
Spero di essere stato chiaro.

Passiamo ora alle mie domande:
1) Devo implementare la voce del men¨ con la proprietÓ radioitem a true, o devo intervenire sull'evento Onchange della actionlist?
(se implemento una delle voci del men¨ con radioitem true, tutto il GroupIndex diventa radioitem, quindi dovrei mettere un men¨ a parte)
2) Se devo intervenire sulla actionlist, conviene scrivere una procedura dinamica, nel senso che se dovessi aggiungere o eliminare una voce (form+pulsante+menu), non devo riscrivere il codice (6 voci da me ipotizzate)?
3) Esiste per caso un componente che faccia quello che penso io, e se sý, potete indicarmi quale?
4) A destra, per i risultati, conviene usare un TPanel, o una form?

Infine alcuni consigli estetici:
5) Le form di sinistra devono avere il pulsante di chiusura in alto a destra, o Ŕ meglio non metterlo?
6) Le form di sinistra devono avere i bordi?

Grazie in anticipo a tutti quelli che risponderanno a queste mie domande

alka
01-02-2007, 01:59
Originariamente inviato da carmelov
1) Devo implementare la voce del men¨ con la proprietÓ radioitem a true, o devo intervenire sull'evento Onchange della actionlist?

Suppongo che tu implementerai un'azione che, invocata, visualizza un preciso Form rimuovendo quella attualmente presente nella schermata; Ŕ sufficiente quindi inserire il codice necessario all'interno dell'evento OnExecute dell'azione stessa per creare il Form quando serve.

Detto questo, puoi sfruttare l'evento OnUpdate del componente TActionList per aggiornare lo stato delle azioni, ad esempio impostando la proprietÓ Checked delle specifiche azioni in base al Form visualizzato (True se il Form presente Ŕ quello associato all'azione, False in caso contrario); altrimenti, Ŕ possibile ricorrere alla proprietÓ AutoCheck delle azioni stesse.


Originariamente inviato da carmelov
2) Se devo intervenire sulla actionlist, conviene scrivere una procedura dinamica, nel senso che se dovessi aggiungere o eliminare una voce (form+pulsante+menu), non devo riscrivere il codice (6 voci da me ipotizzate)?

Sý, potrebbe essere utile implementare un metodo che consenta di creare un nuovo Form da visualizzare, passando come parametro il tipo corrispondente al form desiderato (ricorrendo ad un tipo class of <tipo>, peculiaritÓ di Delphi).

Da ciascun'azione, sarebbe sufficiente invocare il metodo passando il tipo specifico di Form da creare.

In alternativa, si potrebbe registrare - tramite un package designtime - una nuova "azione personalizzata" (Standard Actions), simile a quelle giÓ incorporate in Delphi/C++Builder, che supporti una proprietÓ personalizzata in grado di fare riferimento ad un Form specifico (ma forse questa soluzione, decisamente pi¨ complessa, sarebbe pi¨ adatta se tu stessi sviluppando un "framework conto terzi" per lo sviluppo di applicazioni, piuttosto che un'applicazione vera e propria).


Originariamente inviato da carmelov
3) Esiste per caso un componente che faccia quello che penso io, e se sý, potete indicarmi quale?

Non ne sono a conoscenza.


Originariamente inviato da carmelov
4) A destra, per i risultati, conviene usare un TPanel, o una form?

In generale, quando si parla di "interfacce incorporabili" in un Form che, per˛, non devono avere le caratteristiche di un Form (barra del titolo, ecc.), Ŕ meglio ricorrere ad un TFrame, risparmiando risorse, oppure ad un TPanel contenente l'interfaccia da visualizzare (l'uso di TFrame consente di separare meglio la logica di implementazione).


Originariamente inviato da carmelov
5) Le form di sinistra devono avere il pulsante di chiusura in alto a destra, o Ŕ meglio non metterlo?
6) Le form di sinistra devono avere i bordi?

A queste domande non Ŕ possibile rispondere, o meglio la risposta dipende da 1) cosa vuoi ottenere a livello comportamentale, 2) cosa ti viene richiesto o come intendi strutturare la tua applicazione (se ti piacciono i bordi, mettili, altrimenti no).

Ciao! :ciauz:

carmelov
01-02-2007, 09:06
Originariamente inviato da alka
Suppongo che tu implementerai un'azione che, invocata, visualizza un preciso Form rimuovendo quella attualmente presente nella schermata; Ŕ sufficiente quindi inserire il codice necessario all'interno dell'evento OnExecute dell'azione stessa per creare il Form quando serve.

Innanzitutto grazie dei preziosissimi consigli.
Preciso che quando ho chiesto aiuto pensavo che l'azione doveva visualizzare una determinata Form solo se non ce n'era un'altra presente nella schermata, quindi ogni singola Form doveva essere specificatamente confermata o annullata, non rimuovendo quella di volta in volta attualmente presente sulla schermata.
(Come un RadioGroup, attivo e disattivo)

Dalle tue parole, ripensandoci, mi rendo conto che Ŕ meglio se una nuova Form rimuove quella presente sulla schermata, rendendo gli eventi associati ai pulsanti OK e Cancel comuni alle varie form (come un TabControl).

In ogni modo, sei stato illuminante.

Ciao! :ciauz:

Loading