Newsgroup: it.comp.lang.c++
Titolo: Come si fanno gli array di controlli?

O per non essere OT, come si fa un array di classi? Perchè un TButton è una
classe, giusto?
Qualcosa del tipo, stesso codice per diversi bottoni, interpretando solo il
numero.
--
__________________________________________________________________
Strickland: You're a disappointment, Nero. But you know what disappoints me
more?
Lenny Nero: Your sex life?
____________________
www.Baud.freeweb.org

O per non essere OT, come si fa un array di classi? 
Come un qualsiasi altro array... non c'e` nessuna differenza!
Paolo



Non per fare il rompi***ni, ma se per TButton intendeva
una classe VCL di Borland Builder la cosa si fa leggermente
più complicata dal momento che sono oggetti instanziabili
solo in free store.
Ciao
Giuliano



Nel qual caso potrà ricorrere a un vector<TButton*>.
Max

Nel qual caso potrà ricorrere a un vector<TButton*>.
.... che potrebbe essere del tutto inutile visto che la form
(o finestra che dir si voglia) che li ospita (visto che sono bottoni
e che se uno li instanzia vuol dire che da qualche parte della 
GUI li mette) ha già un paio di proprietà che servono a gestire
il container (ControlCount/Controls[]).
Infatti, con BCB, se tu scrivi:
    // un nuovo bottone anonimo
    TButton* B = new TButton( WinControlCheLoOspita );
    B->Parent = WinControlCheLoOspita;
    B->Left = ....;  // x pos del controllo 
    B->Top =.....; // y pos del controllo 
    B->AltreMenate = ......etc etc
    // altre bottone anonimo (calpestando il precedente B)
    B = new TButton( WinControlCheLoOspita );
    B->Parent = WinControlCheLoOspita;
    B->.......etc etc
    // ... and so on
    B = new TButton( WinControlCheLoOspita );
    B->Parent = WinControlCheLoOspita;
    B->.......etc etc
    B = new TButton( WinControlCheLoOspita );
    B->Parent = WinControlCheLoOspita;
    B->.......etc etc
e se poi fai:
    // 'ParentCntrl' è quello che poco fa era 'WinControlCheLoOspita'
    for ( int i = 0 ; i < ParentCntrl->ControlCount ; i++ ) {
      TButton* B = dynamic_cast<TButton*>( ParentCntrl->Controls[i] );
      if ( B ) {
        // guadagni di nuovo il controllo del bottone i-esimo
        B->.......etc etc 
      }
    }
se in grado di "recuperare" il *controllo* su ogni singolo 
"controllo" :-) ospitato sul "controllo" genitore (Parent). 
In pratica, la riga
    B->Parent = WinControlCheLoOspita;
iscrive B al container di "WinControlCheLoOspita".
Sarebbe grossomodo come scrivere:
     WinControlCheLoOspita->AggiungiComeFiglio( B );
Parent è una "proprietà"; per quanto riguarda
Borland si tratta di una estensione proprietaria
fatta al linguaggio C++ e quindi non portabile,
ma moooolto mooolto comoda da usare - essenziale
per il modello di programmazione visuale del BCB.
Quando WinControlCheLoOspita 'muore', muoiono
automaticamente anche i bottoni ad esso associati 
dal momento che, quando sono stati creati (i bottoni), 
gli èstato passato "WinControlCheLoOspita" come 
argomento per il costruttore. 
    TButton* B = new TButton( WinControlCheLoOspita );
Infatti esiste un secondo container (a livello TComponent,
un progenitore "classico" dei componenti VCL) che gestisce 
la "proprietà" dei controlli associati e che usa altre due 
"proprietà" (ComponentCount/Components[]).
Bel casino, eh? Mannò, è tutto semplicissimo. Ovviamente 
tutta roba basilare del framework VCL, quindi "molto" proprietaria.
Giustamente, il tuo suggerimento è valido nel caso generico,
ma valeva la pena di precisare i meccanismi messi a disposizione 
dal framework di Borland nel caso di controlli visuali (e non) 
come i bottoni del "nostro originatore del thread".
Mi rendo conto che, come post, potrebbe anche essere 
lievemente OT in un gruppo che si chiama it.comp.lang.c++. 
Abbiate pazienza.
Ciao!
Giuliano

solo in free store.
Onestamente so molto poco di BCB e VCL, ma mi pare strano
che l'oggetto sia istanziabile solo nello heap. E` piu` probabile
che non ci siano motivi per fare diversamente, oppure (se la situazione
come credo, e` simile a quella di OWL) che il
funzionamento di VCL richieda un certo modo di utilizzarlo, pena
strani comportamenti a run-time.
Ad ogni modo cio` nulla toglie alla mia risposta., al limite invece
di un array di TButton avra` un array di TButton*... 
Paolo

.... che potrebbe essere del tutto inutile visto che la form
Puo` darsi, come puo` darsi di no... ad ogni modo vorrei far
notare che qui si parla di C++ (quello dello standard) non di
BCB e VCL.
Non prenderla come una risposta secca, semplicemente
questioni su VC++ o BCB non sono IT.
Paolo

Ciao, Paolo.
Purtroppo la libreria VCL e' scritta in Object Pascal, che prevede solo
l'istanziazione dinamica delle classi, ed il relativo binding per C++ si
porta dietro la limitazione.
Ciao,
Nicola

 Abbiate pazienza.
Infatti avevo tentato di camuffare la domanda per non essere OT, però voi
mostri, mica programmerete col C++ nudo e crudo, avrete un compilatore,
magari RAD, o è peccato? :)
Alla fine comunque, voi avete lo stesso parlato di C++ e io ho capito come
si fanno gli array di controlli (forse).
Grazie :)
--
__________________________________________________________________
Strickland: You're a disappointment, Nero. But you know what disappoints me
more?
Lenny Nero: Your sex life?
____________________
Baud.freeweb.org

lievemente OT in un gruppo che si chiama it.comp.lang.c++. 
Ciao
Ciao

si fanno gli array di controlli (forse).
Si, mi sono beccato una mezza infamata, ma sono
contento se dieci minuti del mio tempo sono serviti
a qualcuno! :-)
Ciao!
Giuliano