Newsgroup: it.comp.appl.access
Titolo: chi ha chiamato miafunzione?

All'evento attivazione di alcune form ho messo
=miafunzione("nomeform")
la miafunzione necessita del parametro "nomeform" per capire da chi è stata 
chiamata.. 
bene.. 
la mia domanda è: c'è un modo, nel codice di miafunzione, per capire quale 
sia il nome della form chiamante senza usare parametri di questo tipo?
Nota che activeform non funziona!! (l'assegnazione all'oggetto globale 
activeform viene fatta DOPO l'evento attivazione!)
se non erro in ambienti di sviluppo un po' più evoluti (tipo vb o delphi) le 
funzioni "hanno una variabile locale detta ^sender (o qualcosa del genere)" 
per sapere chi ha chiamato tal funzione..  come posso implemetnare una cosa 
del genere in vba?
-- 
saluti
Il mago galbusera

 Il mago galbusera
Se ho capito bene potresti scrivere cosě la funzione:
Public MiaFunzione(MiaForm as form)
'tuo codice
End Function
Quando la invochi scriverai:
Private Sub Form_Activate()
Call MiaFunzione(Me)
End Sub
Ti ricordo che le funzioni restituiscono qualcosa al contrario delle sub.
Ciao, Carlo

 End Sub
ti ringrazio, ma è esattamente quello che voglio evitare:
questo approccio comporta due svantaggi:
1) devo scrivere del codice nel modulo della form:
 Private Sub Form_Activate()
 Call MiaFunzione(Me)
 End Sub
Se posso preferisco lanciare la funzione (si possono lanciare solo funzioni
e non sub) "direttamente dal" (passatemi l'espressione) pannello delle
proprietà/eventi della form senza passare per il modulo
Così facendo (in particolare per i controlli) un eventuale copia incolla del
controllo stesso mi evita di dovermi andare a cercare a mano il codice
relativo al controllo !!
2) devo specificare un argomento!! ("me" nel tuo esempio)
facendo il copia-incolla di un controllo se devo preoccuparmi "anche" di
riscrivere gli argomenti delle funzioni che vado a chiamare perdo buona
parte dei vantaggi del mio approccio
Quello che cerco  è un modo per capire senza l'uso di parametri aggiuntivi
chi ha chiamato la mia funzione (a dire il vero io lavoro con questa
filosofia anche in altri contesti..) anche se questo significa che devo
"sporcarmi" mani lavorando direttamente con dei puntatori...

 "sporcarmi" mani lavorando direttamente con dei puntatori...
nessuno ha piů risposto a questo mio post..
ho detto delle boiate che non meritano risposta o siamo difronte ad un
problema strutturale del vba a cui nessuno ancora ha trovato un rimedio?
saluti ;)
Galbusera

 problema strutturale del vba a cui nessuno ancora ha trovato un rimedio?
Secondo me ti crei dei problemi per quello che invece è il vantaggio di
usare le funzioni.
Comunque, che io sappia, non c'è un modo automatico (cioè residente in
qualche proprietà insita nella struttura) di far capire che la funzione è
chiamata da una certa maschera...
Antonio

 problema strutturale del vba a cui nessuno ancora ha trovato un rimedio?
    Che sia strutturale e' indubbio. Che sia un problema non so.
    Io in questo caso mi comporterei cosi':
' In un Modulo.
'
Public Function ChiMiChiama( _
ByVal NomeForm As String)
  MsgBox NomeForm
End Function
    Nella finestra Proprieta' della maschera:
Su apertura:  =ChiMiChiama([Name])
    Funziona?
--
Ciao.
Maurizio
--------
?SPQR(C)
 X
--------

 Su apertura:  =ChiMiChia
usare il nome della form come discriminante può essere un'idea, ma in realtà 
la mia era una domanda che voleva arrivare a risolvere questa cosa in modo 
più generico; mi spiego meglio: con il tuo sistema posso chiamare ( o 
meglio posso specificare) il chiamante con una stringa.. in questo caso una 
form in apertura. In realtà io volevo sapere se c'era un modo di poter 
leggere il nome della funzione che ha chiamato "chimichiama" dallo stack 
delle chiamate.. (un  po' quello che si può consultare runtime dall'editor)
Nei post precedenti avevo fatto riferimento alle funzioni del delphi dove 
tra i parametri passati alla funzione chiamante c'è sempre un puntatore 
(sender) che specifica la locazione di memoria del chiamante.
[ i miei sono ricordi lontani e  confusi.. spero di non fare una 
figuraccia!]
Lo so che può sembrare una paranoia e basta.. è una feature che userò una o 
due volte in vita mia, ma è importante, credo, conoscere a fondo fino a 
dove ci si può spingere con i propri strumenti di lavoro ancor prima di 
cominciare un lavoro.. e valutare se non sia il caso di passare a qualche 
altro ambiente di sviluppo
-- 
****************************************
saluti
Il mago galbusera

 più generico; mi spiego meglio:
    Scusa se ti "tarpo" ma in realta' ti eri spiegato benissimo anche prima,
tant'e' vero che alla tua domanda:
    "siamo difronte ad un problema strutturale del vba a cui nessuno ancora
ha trovato un rimedio?"
avevo risposto:
    "Che sia strutturale e' indubbio. Che sia un problema non so."
intendendo con questo che non credo sia possibile cio' che chiedi. E
sottolineo "non credo" perche' non si sa mai abbastanza!... Per quel che ne
so, le uniche cose che somiglino a cio' che intendi sono presenti nella
libreria di Excel:
        Property Caller([Index])
            sola lettura
            Membro di Excel.Application
ed in quella di Access:
        Property CodeContextObject As Object
            sola lettura
            Membro di Access.Application
quindi non in Visual Basic in quanto linguaggio. Ma... momento!...
"CodeContextObject" non potrebbe essere sufficiente a quel che ti serve?
