Newsgroup: it.comp.lang.visual-basic
Titolo: [?] [VB6] Usercontrols in sorgente su form condivise tra i progetti

Partiamo dall'ipotesi che debba fare una form standard che si occupa di
mostrare l'about di un programma (nome FrmStdAbout).
Ora diciamo che mi sono scritto un usercontrol che quando ci clicchi sopra
mi manda una mail (nome ctrLink).
Sono nel mio bel progetto Pippo.vbp, e ho la form che ha sopra lo
usercontrol non compilato, ma inserito nel progetto, in modo che si compili
assieme all'eseguibile.
Ora creo un nuovo progetto, Pluto.vbp, inserisco nel sorgente lo usercontrol
ctrLink e la mia bella form FrmStdAbout. Funziona tutto? Neppure per sogno,
perchè VB si salva i riferimenti allo usercontrol nella form FrmStdAbout nel
formato: "Pippo.ctrLink".
Questo significa che quando lavoro nel progetto Pluto.prj, mi trovo nel
sorgente un usercontrol che VB chiama internamente Pluto.ctrlLink, e che
ovviamente non matcha (scusa Pal per l'orrendo neologismo) con il
Pippo.ctrLink che sta nella form FrmStdAbout.
Al momento ho risolto il problema rinominando dentro tutti i miei .vbp la
voce Name= in "ProgettoStandard" (e facendo altrettanto col riferimento
dell'OCX al progetto dentro la form).
E' un trucco ripugnante, ma che pare funzionare, anche se ora qualunque
progetto apra viene a chiamarsi sempre nello stesso nome se guardo la barra
in alto della finestra di VB. Mi tocca guardare il nome del file di
progetto, nella finestra del progetto, per sapere se ho aperto il sorgente
giusto.
Qualcuno ha delle idee migliori?
Ciao
*Roby*
P.S.
L'esempio è solo per spiegare. Non si tratta ovviamente di uno usercontrol
così banale, e non ho neppure intenzione di compilarlo come OCX (in realtà
gli OCX sarebbero una quindicina suddivisi tra 50 form in una decina di
progetti diversi ed ho la necessità di avere come risultato degli eseguibili
il più possibile autocontenuti)
P.S.2
Il problema si presenta uguale in tutti i service pack che ho provato, dal 3
al 6.

 Qualcuno ha delle idee migliori?
Se ho ben capito, il controllo ctrlink è definitivo, non devi ancora farne
il debug: se è così, cosa aspetti a compilarlo? Una volta compilato, lo
inserisci in tutti i progetti che vuoi e non hai più questi problemi.


inserisci in tutti i progetti che vuoi e non hai piů questi problemi.
Eh, e' proprio quello che non vuole fare :(
Questo e' uno dei motivi che mi hanno fatto un po' detestare vb: pensi
l' applicazione ad oggetti per benino, magari con tanto di diagrammi uml,
poi, quando cominci a programmare ... zac! ti scontri con delle limitazioni
veramente serie !
Purtroppo non so fornire idee valide, in casi analoghi io mi sono arrangiato 
aprendo i vbp uno alla volta (sic !) o debuggando gli exe compilati dal visual c.
Da questo punto di vista, l' avvento di .net mi sembra positivo (anche se la nuova
sintassi vb mi ripugna alquanto).
ciao, hal

 inserisci in tutti i progetti che vuoi e non hai più questi problemi.
Di definitivo c'è solo la morte. La teoria dice che quando un prodotto è
completamente debuggato, è ormai pure obsoleto.
Come ti ribadiva anche Hal, non mi è comodo lavorare con gli OCX compilati,
per diversi motivi:
- Mantenere la compatibilità binaria degli OCX è spesso un delirio
soprattutto quando decidi che un metodo ha bisogno di un parametro in più.
- Avere OCX esterni, significa rifare le routine di installazione dei
diversi programmi, che attualmente non li gestiscono.
- gli usercontrol sono richiamati uno dentro l'altro fino ad una profondità
di 4 livelli. Immagina l'oggetto pulsante, contenuto in un oggetto
scrollbar, contenuto in un oggetto lista, contenuto in un oggetto
FinestraDiLista. Immagina ora di modificare l'oggetto pulsante e vedi quante
cose devi ricompilare perchè tutto riprenda a funzionare.
Grazie comunque per l'interessamento
Ciao
*Roby*

 Hai provato con il late binding (istanziando il controllo a run-time)?
Bella idea. Sono quasi certo che funzioni anche, ma poi mentre scrivo il
codice non ho gli aiuti sulle proprietà e i metodi dei controlli.
Oltretutto diventerebbe pure tutto un po' più lento.
Comunque non ci avrei proprio pensato, grazie della dritta.
Ciao
*Roby*