Visualizzazione dei risultati da 1 a 3 su 3
  1. #1

    [BCB-Delphi-VCL] consigli su interfaccia e actionlist

    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
    Immagini allegate Immagini allegate

  2. #2
    Moderatore di Programmazione L'avatar di alka
    Registrato dal
    Oct 2001
    residenza
    Reggio Emilia
    Messaggi
    24,296
    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!
    MARCO BREVEGLIERI
    Software and Web Developer, Teacher and Consultant

    Home | Blog | Delphi Podcast | Twitch | Altro...

  3. #3
    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!

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.