Newsgroup: it.comp.appl.access
Titolo: BackColor da subform a form...

Salve a tutti...
...utilizzo questa istruzione per colorare i controlli form in
blocco(singole ma soprattutto continue):
Dim ctr As Access.Control
   For Each ctr In Section(0).Controls
       If ctr.ControlType = acTextBox Or ctr.ControlType = acComboBox
Then
           ctr.BackColor = vbWhite
       End If
   Next
Come posso, associata ud un button in una subform, farla agire sui
controlli della form?
Ho fatto qualche tentativo, ma inutile...
Vi ringrazio
Paolo

 wrote in message
news:1123851013.3...@z14g2000cwz.googlegroups.com

Non si capisce molto bene cosa vuoi fare...!!!
Il Button č nella SubForm?
Ed i controlli da modificare sono sempre nella SubForm
oppure nella Form..?
Se l'azione dovesse essere apportata alla Form dalla
subForm ti basterebbe questo
For Each ctr In Me.Parent.Section(0).Controls
Eventualmente dai qualche indicazione in piů.
Ciao
@Alex
-- 
Posted via Mailgate.ORG Server - 
http://www.Mailgate.ORG

Sono contento che mi hai rispoto tu... ti spiego...
Qualche post fa, ti dissi che utilizzo la tua sub per la gestione dei
record adattandola più o meno alle mie esigenze.
Ora, nella MiaForm ho inserito altre due sub oltre alla tua, che mi
alimentano movimentazioni di conti. Nella TuaSub ho inserito un button
che mi attiva le due MieSub per poter inserire movimentazioni. La mia
idea era anche quella di dare un colore ai controlli che evidenziasse
lo stato di modifica. Per non inserire il nome dei controlli uno ad
uno, volevo inserire un'istruzione che me li colorasse tutti in una
botta...
Forse esiste un metodo più appropriato per comandare le mie due sub
dalla TuaSub!
Grazie
Paolo

 Paolo
La cosa migliore č crearsi una Funzione che lavori
passando l'Oggetto Form, a quel punto si ciclano
i Controls della Form principale e si intercettano
i controlli acSubForm, quindi si passa alla Funzione
l'oggetto ctl.Form
In questo modo diventa una funzione flessibile.
Ora la cosa migliore sarebbe centralizzare la chiamata
dalla Form principale:
Public Function CiclaSubForm(frm as Access.Form, bck as Long)
Dim ctr as Access.Control
For each ctr in frm.Controls
  If ctr.ControlType = acSubForm Then SetBackColor(ctr.Form,vbWhite)
  End If
Next
set ctr=Nothing
End Function
Dichiarando Public la funzione della Form la puoi chiamare
da qualsiasi sua Sub cosě:
Me.Parent.CiclaSubForm
'---- FUNZIONE PUBLIC DA METTERE IN UN MODULO ----------
Public Function SetBackColor(frm as Access.Form, bck as Long)
Dim ctl as Access.Control
For each ctl in frm.Controls
  If ctl.ControlType = acTextBox Or _
     ctl.ControlType = acComboBox Then
           ctl.BackColor = vbWhite
  End If
Next
set ctl=Nothing
End Function


Capito il concetto...
  Ho provato a metterlo in atto ma mi da errore di compilazione
(Previsto: =) su quest'if:
  If ctr.ControlType = acSubForm Then SetBackColor(ctr.Form,vbWhite)
sembra corretta...

 wrote in message
news:1123856073....@g44g2000cwa.googlegroups.com

Togli le parentesi oppure metti il Call, mi sono sbagliato...!


OK...
Ultima cosa...
Errore "Argomento non facoltativo" al richiamo dal button della Sub di
Me.Parent.CiclaSubForm


SetBackColor(ctr.Form,vbWhite) -> non vedi che  devi passargli 2 parametri? 

[CUT]
Pardon -> è qui che devi passare i 2 parametri


Perdonami Gaspare, non riesco a seguirti...


Ciao,
praticamente quella funzione di @Alex
"CiclaSubForm(frm as Access.Form, bck as Long)"
che utilizzi necessita di 2 parametri:
1) frm as Access.Form
2) bck as Long
Me.Parent.CiclaSubForm(primo_parametro, secondo_parametro)
non sò se sono stato chiaro -> eventualmente sono in zona ;-) 

Intendi il nome della Sub e il backcolor così?
Me.Parent.CiclaSubForm (MovimentazioneConti, vbRed)
perchè non gli piace...

perchè non gli piace...
vbRed non è 1 long -> cerca il numero corrispondente... 

[CUT]
cambia vbRed con 255

>Intendi il nome della Sub e il backcolor cosě?
Attenzione->chi ha parlato di Sub?
Lě ci va il nome della form
Me.Parent.CiclaSubForm (NomeForm, Colore)
ci siamo?

 ci siamo?
No, ci và l'oggetto Form non il nome...!!!
Ciao
@ALex


Ora errori non me ne da più, ma non succede quello che mi serve... che
si colorino i controlli delle sub... che posso fà?




Ciao @Alex,
ti riferisci a quello che ho scritto -> Me.Parent.CiclaSubForm (NomeForm, 
Colore) ? 

[CUT]
Cambia colore -> passa come parametro il bianco etc...la function li 
trasforma in rossi 

Va di brutto...
Ragazzi vi ringrazio... anche per la pazienza...
Ciao
Paolo

;-) 

 Colore) ?
Già...!
Se dai un'occhiata il primo parametro non è stringa
ma oggetto Form.
Ciao
@Alex



Si d'accordo -> ma va identificato sempre attraverso il suo nome...
Buona serata :-)
Gaspare 

 wrote in message
news:Q17Le.51291$
2U1.2...@news3.tin.it

No sbagli.
Passando l'Oggetto è come passare una Classe, il nome
non serve assolutamente, viene ereditato come tutte
le sue proprietà e metodi.



Scusa @Alex...non ti seguo davvero -> puoi farmi 1 esempio concreto per 
favore? 

 favore?
OK.
Queste sono le 2 Funzioni:
Public Function CiclaSubForm(frm as Access.Form, bck as Long)
Dim ctr as Access.Control
For each ctr in frm.Controls
  If ctr.ControlType = acSubForm Then SetBackColor(ctr.Form,vbWhite)
  End If
Next
set ctr=Nothing
End Function
'---- FUNZIONE PUBLIC DA METTERE IN UN MODULO ----------
Public Function SetBackColor(frm as Access.Form, bck as Long)
Dim ctl as Access.Control
For each ctl in frm.Controls
  If ctl.ControlType = acTextBox Or _
     ctl.ControlType = acComboBox Then
           ctl.BackColor = vbWhite
  End If
Next
set ctl=Nothing
End Function
Lascia perdere che siano o meno in un Modulo, supponi siano nella
FORM PRINCIPALE.
La Funzione da chiamare è "CiclaSubForm"
Se guardi richiede 2 parametri:
1---> frm as Access.Form
2---> bck as Long
Il 1° non è una stringa ma un oggetto
Il 2° è un Long non chè un colore.
Per chiamare correttamente la funzione devo passare
l'oggetto FORM pertanto dalla FORM_PRINCIPALE sarà:
Call CiclaSubForm(Me,vbWhite)
dove Me è implicitamente l'oggetto FORM.
Stessa cosa nella 2° Funzione.
Se noti la 1° chiama la 2°(questo perchè non
volevo inserire una dentro l'altra, più ostico da capire)
usando questo:
If ctr.ControlType = acSubForm Then SetBackColor(ctr.Form,vbWhite)
Se il controllo del ciclo è una SUBFORM la passo come
FORM alla 2° Funzione.
Ma per passarla come Form devi far riferimento all'oggetto 
Form del controllo:----> [ctr.Form] altrimenti essendo una
Subform faresti riferimento alla Cornice solamente del Controllo
e non alla Classe.
Come vedi non passo mai stringhe, ma Oggetti.
Spero di essermi spiegato.
Ciao
@ALex


[CUT]
Grazie per la spiegazione -> sei stato molto chiaro ed esaudiente !
Devo ammettere (già un'altra volta mi ha fatto notare che posizionare il 
mouse su un controllo di una sezione del form non è certo una 
passeggiata...) che programmare in VB è molto più semplice che programmare 
in Access!
Buona giornata :-)
Gaspare 


Questa non l'ho capita!
Ciao, Carlo 

 Questa non l'ho capita!
Intendevo dire, giusto per fare "luce" sulla frase in oggetto, buttata lě 
"senza offendere vb o chi lo usa", che io "personalmente" faccio determinate 
cose molto piů velocemente e con meno codice utilizzando Vb piuttosto che 
Access ->  adesso si capisce un pň meglio?
Ciao, Gaspare 

 ha scritto nel messaggio 
news:cRiLe.69449$fm.45...@news4.tin.it...

Quale versione di VB usi? La 6?
E per realizzare database preferisci VB?
Se č cosě non condivido la scelta.
Personalmente uso Access e il VBA che mi permette di fare quasi tutto quello 
che fa VB.
...de gustibus...
Ciao, Carlo 

 Ciao, Carlo
Ok...adesso ci riprovo. Non è che preferisca VB per costruire database -> in 
buona sostanza non essendoci in VB delle SubForm (come invece in access...) 
per andare a fare delle operazioni sui controlli etc... mi basta ciclare e 
stop invece di crearmi delle function come appunto nella discussione in 
oggetto...
Tempo fà è venuta fuori un quesito su come posizionare automaticamente (da 
codice) il mouse su un controllo: con VB si sarebbe risolto con 2 righe di 
codice mentre in access devi tener conto delle varie sezioni etc...(come mi 
ha fatto notare @Alex)  -> evidentemente ho fatto una riflessione ad alta 
voce non facendo chiarezza sui dettagli
Ripeto -> è un'opinione personale...
Buona giornata :-)
Gaspare 

 Gaspare
Ciao Gaspare,
buona giornata anche a te.
Ciao, Carlo 

;-) 

Detta così sembra veramente che usare VB sia meglio...!!!
Il problema originale era di determinare il corretto
HWND del controllo per posizionare il Puntatore nell'area
dello stesso.
Spiegai che contrariamente a VB, Access non dispone di tutti
gli Hwnd dei controlli ma solo di quelli con il Focus.
In oltre una Form di Access è un controllo ben più complesso
che una Form in VB(ha solo 1 Handle + la Barra).
La form di Access anche se non li espone ha un Hwnd per ogni sezione
più un Hwnd dell'Oggetto che è il Bordo, pertanto quando
sono attivi i Intestazioni/Piè di Maschera per poter ricavare
le coordinate RECT relative al controllo via API serve
determinare in che SECTION si trova.
Tutto questo con VB non serve.
Alla fine concordo con Carlo anche se per alcuni sofismi
non propri di Access(come l'uso pesante delle API o delle Classi)
in VBA è meno agevole.
Ciao
@Alex

meno agevole.
Io non sono assolutamente in disaccordo con Carlo -> ho solo "cercato" di 
fare chiarezza su quanto intendevo dire...tutto qua!
Buona giornata :-)
Gaspare
P.S. Non scateniamo per favore un FLAME  -> altrimenti rischiamo che vengano 
a trovarci quelli del NG di VB ! ;-) 

 a trovarci quelli del NG di VB ! ;-)
Lungi da me accendere FLAME in Agosto, fà già caldo così.
Ciao Gaspare.
@Alex


;-)