Newsgroup: it.comp.lang.delphi
Titolo: (stile) form multiuso

(sempre per lo stile)
mi piacerebbe sapere il vostro modo di gestire questa cosa:
Nel mio gestionale esistono molte form che devono avere visibili o meno
alcuni tasti dipendetemente dal punto in cui sono chiamati.
Mi spiego con un esempio.
Ho una tavola "lingue". Ho una form con un DBGrid di queste lingue. Sul form
c'e' la famiglia di tasti INSERISCI NUOVA LINGUA (e simili) e poi c'e' il
tasto SELEZIONA LINGUA.
Ovviamente quando l'utente seleziona la voce di menu "Gestione Lingue" gli
mostro questa form nascondendo il tasto SELEZIONA LINGUA; quando invece egli
sta inserendo un personaggio e deve dirmi quale lingua parli gli sottopongo
il form senza gli altri tasti. (Si noti che un combobox non basta perche' la
scelta avviene in base a tutte le caratteristiche della lingua)
Io faccio cosi: Questo tipo di form hanno una procedura Ingresso(argomenti:
tante variabili booleane) la quale pone la proprieta VISIBLE dei bottoni ai
valori passati alla funzione ed infine lancia il metodo SHOW.
Questo modo di gestire la cosa mi sembra molto poco pulito tanto piu' che
per mostrare la form in modo modale devo ulteriormente complicare il codice.
Mi piacerebbe avere altri punti di vista!
grazie.
buio.

Crea una serie di procedure e rendile public del tipo:
TMioForm.AttivaPerInserimentoDaPuntoA;
    begin
    Pulsante1.Enabled := true;
    Pulsante2.Enabled := true;
    Pulsante3.Enabled := true;
    Pulsante4.Enabled := false;
    end;
TMioForm.AttivaPerInserimentoDaPuntob;
    begin
    Pulsante1.Enabled := true;
    Pulsante2.Enabled := true;
    Pulsante3.Enabled := false;
    Pulsante4.Enabled := false;
    end;
TMioForm.AttivaPerInserimentoDaPuntoC;
    begin
    Pulsante1.Enabled := false;
    Pulsante2.Enabled := true;
    Pulsante3.Enabled := true;
    Pulsante4.Enabled := false;
    end;
Ora da dove devi chiamare il tuo form puoi scrivere:
Application.CreateFomr( TFMioForm,MioForm);
With mioform do
    begin
    AttivaPerInserimentoDaPuntoA
    ShowModal
    release
    end;
In questo modo non passi parametri al form e questo accelera molto
l'esecuzione del codice.
Inoltre hai tutto nel form con un netto milgioramento di leggibilita'.
AS
"Se Se è Microsoft non funziona"

"buio":
| mi piacerebbe sapere il vostro modo di gestire questa cosa:
| Nel mio gestionale esistono molte form che devono avere visibili o meno
| alcuni tasti dipendetemente dal punto in cui sono chiamati.
[...]
io farei l'override del Create
aggiungendogli oltre al parametro
di default AOwner, altri parametri, tipo:
constructor Create(AOwner:TComponent;BottoneVisibile: Boolean;....);
o, ad es.
fare un tipo
TUtilizzoForm = (ufSelezione, ufGestione)
e poi.
constructor Create(AOwner:TComponent; TipoUtilizzoForm: TUtilizzoForm);
begin
 inherited create(AOwner);
 case TipoUtilizzoForm of
  ufSelezione : begin
                 ... // visualizza componenti utili alla selezione
                end;
  ufGestione : begin
                 ... // visualizza componenti utili alla gestione
               end;
end;
ovviamente le possibilità e le opinioni
sono presssochè infinite,
cmq a me sembra un metodo pulito :)
Ciao!
Alan Solo

Anche se sono solo del 5.0 io per questo genere problematica preferisco le
ActionList.