Newsgroup: it.comp.lang.visual-basic
Titolo: [?] creare nuove istanze di un form da una variabile Form....

Salve,
sto realizzando una classe che deve funzionare usando un qualsiasi form per
realizzare delle "viste".
ho inserito un form (es: MyForm) nel mio progetto e l'ho "preparato" in mdo
da poter supportare la classe..
ora tutto funziona. quando parte la classe questa crea una nuova istanza del
form e va tutto bene...
    Dim TMP as form
    Set TMP = New MyForm
ma se io volessi fare la stessa cosa senza sapere a priori quale form userò
come "vista"?
ad esempio se io creo una dll che esporta questa classe e voglio che sia
utilizzabile con qualsiasi form che ha dei requisiti minimi, come faccio a
passare alla classe il riferimento al form da usare per fare le istanze se
nel "SET" devo inserire il nome del form?
pensavo di passare alla classe una variabile di tipo "form"  (es: FormLocale
as form)
ma poi so come crene le istanze..  (il codice seguente non funziona. ma è
quello che vorrei fare..)
        'Fuoti dalla classe
        Set  classe.FormLocale=MyForm ' MyForm è un form ,FormLocale è una
variabile pubblica della classe
        '
        'Dentro la classe
        'nell'evento della classe che crea le viste
        Dim TMP as form
        Set TMP = New FormLocale 'ma  FormLocale è una variabile pubblica e
non un form....
spero di essere stato chiaro (ne dubito però :(....)
grazie a tutti!
Davide


La soluzione più semplice imho è incorporare un form standard per le viste
nella dll
e usare semplicemente nuove istanze di quest'ultimo.
Oppure, se vuoi usare per ragioni tue direttamente i form appartenenti
all'applicazione chiamante,
altrettanto semplicemente li passi alla dll che li utilizza (attento a
passarli come "object" e non come "form"...)
Che necessità hai di creare internamente cloni di form dichiarati
esternamente alla dll?
ciao
ugo


sto facendo un activex che mi permette di gestire la visualizzazione 3D...
quindi volevo poterlo usare in diverse applicazioni..
io preparo il form, che deve soddisfare certi requisiti ma può essere
diverso da applicazione ad appllciazione (che so le toolbar oppure la
statusbar o altre features...) lo passo alla dll che lo usa come "template"
per tutte le viste che deve generare....
ciao
Davide


Il discorso si fa interessante... vediamo...
- la tua soluzione iniziale non è praticabile:  puoi passare il form dal
processo chiamante come object generico alla dll,
    ma non puoi crearne successive istanze.
- potrebbe essere valida una soluzione tipo quella postata da Moreno sulla
persistenza di oggetti, ma l'idea potrebbe essere applicata solo     alle
proprietà intrinseche dell'oggetto form, non certo per "definire" la
presenza o meno di toolbar e simili...
- Credo che le uniche soluzioni praticabili siano
        - Creare l'istanza del form da usare nella view all'interno del
processo chiamante e passarlo alla dll che provvederà a
"personalizzarlo" per le view.
        - Creare l'istanza del form della view all'interno della dll usando
uno dei "template" che hai _preventivamente_ incorporato nella dll e
personalizzarlo in base a una serie di property passate dal processo
chiamente.
Attendo smentite dai guru del Ng.
ciao
ugo

chiamente.
Questo mi piace gia' di piu'.
Una mia dll, che mostrava una finestra per agevolare graficamente la
costruzione di ricerche in un qualsiasi (be', quasi: l' importante e' che
fosse raggiungibile via OLEDB o ODBC) e' stata usata in progetti diversi,
mostrando una grafica diversa, programmabile dall' esterno.
In pratica, il client passava una serie di parametri tipo: toolbar si'/no,
immagini dei bottoni, shortcut di tastiera, multiselezione si'/no, salvataggio
dei filtri si/no, diversa reattivita' all' input da mouse/tastiera, parser sql interno,
ecc. ecc.
Diciamo che per usarla con comodita', era stata scritta una classe wrapper
all' interno di ogni client exe che si occupava di personalizzare, in base alle proprie
specifiche, l' aspetto ed il comportamento del componente. 
Un bel lavoro, anche se non proprio facilissimo (tra l' altro, a parte la griglia per
l' output e l' inserimento criteri stile QBE stile access, non utilizzava altri ocx esterni)
perche' l' avevo pensata ad oggetti, ma scritta in vb :-(
-- 
ciao, hal


...fratello... mi hai copiato il codice?    :-PPP
...Scherzo: i form di ricerca incorporati nelle mie dll di gestione
ado/oledb sono _molto_ più primordiali,
anche se mi riprometto da anni di rimetterci mano, riscrivere un po' meglio
alcune parti che mi fanno venire
i brividi solo a sfogliare i sorgenti e, naturalmente, implementrare
funzionalità tipo quelle che hai descritto:
salvataggio dei filtri, parser sql etc...
Un giorno lo farò...
...a proposito: non è che mi manderesti una copia compilata della tua dll
e mi dici dove trovare un decompilatore per vb6...
:-PPPPPPPPPPPPPPPPPPPPPPPPPP
ciao
ugo

 ciao
ciao!
Davide

 form qualsiasi  e "clonarlo"....
Questa, secondo me, resta la soluzione più pulita.
ciao
ugo

per realizzare delle "viste".
Che intendi per
viste??
Comunque prova questo codice, e dimmi se c'ho capito qualcosa :)
Prendi una classe e sbattici dentro:
--------------
Option Explicit
Private mForm As Form
Public Property Set ParentForm(ByRef frmValue As
Form)
    Set mForm = frmValue
End Property
Public Sub
VisualizzaForm()
    With mForm
        .Caption = "ciao"
        .Show
End With
End Sub
--------------
fuori la classe (nel punto in cui la
istanzi, io l' ho fatto da un form stupido alla pressione di un bottone)
metti:
Private Sub Command1_Click()
    Dim x As Class1
 
    Set
x = New Class1
 
    Set x.ParentForm = Form3
    x.VisualizzaForm
Set x = Nothing
End Sub
--------------------------------
Inviato via 
http://usenet.iol.it
 


Il problema č che cosě passi il form alla classe, che ne fa l'uso che meglio
crede, ma _non_ č in grado di crearne nuove istanze, come vorrebbe fare lui.
ciao
ugo

fare lui.
Ma io infatti non ho ben capito che vuole fare...vuole
passare un form a una classe e poi istanziarlo...10 volte? E a che scopo??
Io il set lo faccio dentro la classe, lui può usare la variabile interna
per creare tutte le istanze che vuole, finchè non decide di ammazzarla, o
finche non muore l' oggetto (se non fa set = nothing prima di scaricare l'
oggetto).
Io avevo capito che lui voleva passare un form generico ad un
classe, e poi da dentro la classe ci metteva...che sò, dei dati. Almeno
vedendo il suo codice avevo capito (vabbè che è venerdì, e dire 'avevo
capito' mi sembra una parola un po grossa) una cosa del genere :) In realtà
la domanda quale era?
Bhè, io però la premessa l' ho fatta ;)
Saluti...


e mi dici dove trovare un decompilatore per vb6...
Datemi ancora un po' di tempo ;-)
-- 
ciao, hal