Newsgroup: it.comp.lang.delphi
Titolo: panels intercambiabili

Salve a tutti!
Durante la stesura di un programma mi sono trovato faccia a faccia con un
problema che non riesco a risolvere!
Praticamente nel programma c'č un menu sulla sinistra dal quale si accede a
tutte le funzioni e voglio che cliccando
su ciascuna funzione, si rendano visibili alcuni controlli e invisibili i
precedenti.
Ciň che farebbe a caso mio sarebbe una vcl con dei panels intercambiabili,
dove in design time scambi tra un panel
e l'altro e metti giů componenti e codice, poi in run time, per switchare da
un panel all'altro devi usare il menů.
So di non essermi spiegato egregiamente ma spero che abbiate capito
comunque, che dite, si puň fare?
-- 
Ciao,
Giulio "RedXIII"


Open Delphi Manual (
http://groups.yahoo.com/group/delphi_open_manual/
)

 Ciao!
Non c'avrei mai pensato! Semplice ma funzionale ;) grazie!
-- 
Ciao,
Giulio "RedXIII"

 Non c'avrei mai pensato! Semplice ma funzionale ;) grazie!
Prego! :-)
Ti aggiungo una finezza che ho inserito per ovviare ad un "effetto
collaterale" non particolarmente fastidioso, ma presente: trattandosi di
un PageControl - anche se l'aspetto non lo dà a vedere - è possibile
passare da una pagina alla successiva usando la combinazione di tasti
CTRL+TAB (assieme a SHIFT per sfogliare in ordine inverso).
Questo consentirebbe all'utente di spostarsi da una pagina all'altra
senza utilizzare l'apposito selettore - ListView, TreeView o altro
controllo visuale apposito - ma premendo i tasti indicati sopra.
Io ho cercato di bloccare quest'azione così: nel form che contiene il
controllo a pagine, ho aggiunto un campo privato di nome FLockTabs.
=============================
  TMyForm = class(TForm)
    ...
  private
    { Private declarations }
    FLockTabs: Boolean;
  public
    { Public declarations }
  end;
=============================
Nell'evento OnCreate del form imposto FLockTabs a True; questo flag
viene usato per impedire lo spostamento "non autorizzato" da una pagina
all'altra all'interno dell'evento OnChanging del PageControl.
=============================
procedure TMyForm.PageControlChanging(
 Sender: TObject; var AllowChange: Boolean);
begin
  AllowChange := not FLockTabs;
end;
=============================
In questo modo, non viene consentito lo spostamento ad un'altra pagina
del controllo quando il flag FLockTabs è a True; lo "sblocco" avviene
solamente quando si seleziona una nuova pagina utilizzando il controllo
visuale che hai deciso di adottare per questo scopo:
=============================
procedure TMyForm.ListViewClick(Sender: TObject);
begin
  FLockTabs := False;
  try
    // Cambia pagina in base
    // alla selezione...
    PageControl.ActivePage := ATabSheet;
  finally
    FLockTabs := True;
  end;
end;
=============================
L'uso del try...finally garantisce il ripristino del flag a True
qualsiasi cosa accada durante la selezione della pagina, anche se è raro
il verificarsi di eccezioni in una simile e semplice operazione.
Spero di averti dato un'altra indicazione utile.


 ordine inverso).
E usare i vetusti TNotebook? Hanno sempre fatto il loro sporco lavoro, ma
sono stati confinati nella palette Win 3.1 e quindi abbandonati. Abbasso la
discriminazione!
--
Jax
====
Una volta sfuggita, una parola vola via irrevocabile. (Orazio Flacco)

 abbandonati. Abbasso la discriminazione!
Non so...quanto leggo le parole «obsolete» o «deprecated» (incluse le
traduzioni italiane), inizia a salirmi una involontaria repulsione che
spesso mi fa optare per la soluzione più *nuova* la quale, normalmente,
è anche quella più complicata e, paradossalmente, subisce più
"mutazioni" della controparte obsoleta che, essendo tale, rimane
invariata e meglio funzionante in virtù della compatibilità
all'indietro. :-)
Ironico... :-D


 Ironico... :-D
L'hai detto :)
E poi è antiestetico quel bordo rialzato del PageControl ;)
--
Jax
====
Mio nonno era un uomo insignificante. Al suo funerale il carro funebre
seguiva le altre auto. (Woody Allen)

 collaterale" non particolarmente fastidioso, ma presente:[cut]
Io non lo definirei effetto collaterale. Anzi per chi usa solo la tastiera
sarebbe un beneficio.
In quell'altro modo si sarebbe costretti a girarsi i controlli a forza di
Tab, arrivare al selettore, cambiare pagina e nuovamente andare di Tab.
Lasciando quella modalità libera, l'utente potrebbe cambiare pagina senza
tornare nel selettore. Molto più comodo, credetemi.
Pertanto, invece di bloccare quella possibilità, io farei riflettere sul
selettore il cambio tramite tasti della pagina usando OnChange, se
necessario anche OnChanging.
Ciao
Giuseppe

 tastiera sarebbe un beneficio.
Non sono completamente della stessa opinione. Dipende dai casi.
Il PageControl si sta utilizzando per uno scopo leggermente diverso da
quello per il quale è stato progettato, senza contare il fatto che
all'interno di un TabSheet (una pagina) potrebbe esserci un'altro
PageControl, usato magari per raggruppare delle opzioni, situazione in
cui mi sono trovato e che genera un conflitto poichè, in base al focus,
il cambio di pagina potrebbe essere applicato al PageControl che
gestisce le pagine oppure al PageControl interno (anche se di solito è
quello più esterno ad avere il sopravvento); in definitiva, mi trovo con
una funzionalità che non mi serve sul PageControl principale e ne vengo
privato nel controllo a cui si applicherebbe normalmente.
Se poi devo rendere maggiormente accessibili le pagine consentendo l'uso
della tastiera, allora basta intercettare qualche OnKeyPress ed il gioco
è fatto.
Inoltre, capita che l'uso di un PageControl in questo modo particolare
sia sfruttato anche per scopi diversi da quello presentato, ad esempio
la costruzione di un wizard.
Mi risulta senz'altro più agevole comandare tramite codice la pagina da
visualizzare relativa al passo successivo del wizard (su pressione del
pulsante "Avanti"), piuttosto che gestire tutto tramite gli eventi
OnChange e OnChanging del PageControl; in questo caso, sono anche
obbligato a disabilitare CTRL+TAB per evitare che si passi alla pagina
successiva che non necessariamente corrisponde al "passo" successivo del
wizard, il quale dipende dalle selezioni operate dall'utente.


 Non sono completamente della stessa opinione. Dipende dai casi.[CUT]
Non è meglio allora usare dei Frames? Sto adottando qualcosa di simile in
questo periodo, uso dei frames e una combobox.
Anche per il wizard di cui parli. Non è meglio usare dei frames? Anche se
per il wizard preferirei usare più form per problemi legati sempre
all'accesso. Usare un solo form, per il wizard, significa non farsi leggere
in automatico la caption del form ad ogni cambio di informazioni da
immettere/leggere. Caption che molte volte risulta molto esplicativa di quel
che il wizard propone. Certo, sono piccole cose, niente di irreparabile...
però a volte migliorano l'usabilità.
Anche un PageControl dentro un PageControl non mi sembra la soluzione
migliore. Userei un PageControl>TabSheet che contenga al limite un frame o
controlli inscatolanti simili. :-)
Ciao
Giuseppe

 frame o controlli inscatolanti simili. :-)
Ciascuna soluzione deve essere valutata nel suo contesto.
Una matrioska di PageControl non ha senso quando il PageControl viene
usato nella sua forma standard con linguette, ma se viene sfruttato per
ottenere qualcosa di simile ad un "raccoglitore di pagine" selezionabili
magari con un TreeView come adottano molti software in circolazione
(prova a sbirciare le opzioni di GetRight), le linguette devono essere
nascoste e quindi può avere senso, all'interno di un singolo TabSheet
che rappresenta una pagina di opzioni, visualizzare un altro PageControl
per effettuare un ulteriore raggruppamento.
Il PageControl non è certo l'unica soluzione per ottenere un effetto
simile ma a livello di complessità, di organizzazione e di codice
necessario per ottenere lo scopo secondo me è la più efficace e meno
faticosa.


 nascoste e quindi può avere senso, all'interno di un singolo TabSheet.
Preferisco usare i controlli, invece di sfruttarli. :-)
Per fare delle opzioni carine ho usato la soluzione TreeView, ma accoppiata
a dei frames che venivano creati e distrutti in base alle scelte sul
TreeView. Sicuramente ho errato, ma ora non userei un PageControl come
contenitore di TabSheet per funzionalità simili.
*GetRight non è un software accessibile*. :-)
Comunque è meglio valutare le soluzioni da adottare nel contesto in cui lo
si deve fare. Capo e tempo inclusi. :-D
Ciao
Giuseppe

 cui lo si deve fare. Capo e tempo inclusi. :-D
E' quello che ho scritto nel messaggio precedente.
Mi spiace, ma non riesco a capire cosa ho scritto di sbagliato.


 ritenersi decente?
No, non conosci l'ambiente.
Ti invito a provare i tuoi applicativi a schermo decisamente spento, con
l'ausilio di questo software. Si chiamano tecnologie assistive, perché
incorporano in Windows, non in un singolo applicativo, funzionalità varie di
lettura. Si chiamano appunto screen reader.
Tu sviluppatore non sei obbligato a sviluppare per handicappati e per
*normali, tu sei impegnato a sviluppare *correttamente*. Si chiama design
for all, cultura dell'accesso, accessibilità, ecc.
Veramente. Per dare qualcosa di più all'azienda per cui lavori, installa
questo:
www.subvisionmilano.com
Devi scaricare Jaws For Windows.
Prova i tuoi software come ti ho suggerito, solo con l'ausilio di una voce.
E' veramente illuminante. Non pensare come pensano in diversi: io ci vedo,
perché devo andarmi a complicare la vita con simili diavolerie? Stiamo
parlando di lavoro. Professionalità in più che dai a te stesso. Non
sottovalutare questo aspetto. Ti può capitare chiunque come utente nella
vita.
E poi, il gioiellino di tecnologia che ti ho proposto di usare, è una vera e
propria potenza. Basta a incuriosirti? :-)
Ciao e buon anno.
Giuseppe

 si deve fare. Capo e tempo inclusi. :-D
Questo secondo me è un punto fondamentale: dove lavoro ora i lavori sono
sempre da fare per ieri e non c'è nessun tipo di documentazione/specifica o
altro, va tutto a "parere" del capo. Io (sono qui solo da pochi mesi) sto
cercando di far capire quanto sia importante fare anche solo uno straccio di
analisi prima di iniziare a scrivere la prima linea di codice, ma è dura,
durissima...spesso sconfortante :-/
-- 
Lis
Mercatino: 
http://snurl.com/sito_lis
Aiuta la ricerca contro il cancro: 
http://snurl.com/ida_team