Newsgroup: it.comp.lang.visual-basic
Titolo: [?] Buco in MousePointer?

'Si crei un form e sullo stesso un Frame e, all'interno del Frame, due
textbox.
'Il codice che segue non assegna a Text2 il puntatore di default
'come se vbDefault per lui volesse dire "quello del contenitore".
Se non mi sono bevuto il cervello, come risolvereste? Grazie.
    Frame1.MousePointer = vbCustom
    Frame1.MouseIcon = LoadPicture("C:\icona1.ico")
    Text1.MousePointer = vbCustom
    Text1.MouseIcon = LoadPicture("C:\icona2.ico")
    Text2.MousePointer = vbDefault        '<---
    Text2.MouseIcon = LoadPicture("")

spero di esserti stato d'aiuto io almeno una volta nella vita :-)
a me funziona questo codice
cmq vb default nella guida è definito come forma predefinita dell'oggetto,
che è una proprietà ereditata dal contenitore...
Private Sub Form_Activate()
Frame1.MousePointer = vbCustom
    Frame1.MouseIcon = LoadPicture("C:\programmi\microsoft visual basic
6.0\graphics\cursors\4WAY01.CUR")
    Text1.MousePointer = vbCustom
    Text1.MouseIcon = LoadPicture("C:\programmi\microsoft visual basic
6.0\graphics\cursors\CROSS03.CUR")
    Text2.MousePointer = vbArrow
End Sub

logicamente, dato che si tratta di una textbox utilizza VbIbeam

 'come se vbDefault per lui volesse dire "quello del contenitore".
Il problema e' proprio a monte: se tu inserisci solo le istruzioni
Frame1.MousePointer = vbCustom
Frame1.MouseIcon = LoadPicture("C:\icona1.ico")
vedrai che tutti i controlli contenuti, la cui property e' rimasta invariata
a vbDefault, mantengono lo stesso puntatore del frame
Ho il sospetto che sia stata una scelta "by design", visto che se fai la
stessa cosa su Form.MousePointer, il contenitore per eccellenza, l'effetto
e' lo stesso...
Ciao
--
Luca Dormio - 
luca....@tin.it
________________________________
"Marty, non stai ragionando in maniera quadridimensionale"
Dr. Emmett L. Brown

     Text2.MousePointer = vbArrow
Ti ringrazio, ma con qualcosa di diverso da vbDefault funziona anche a me.
Siccome devo fare le cose in automatico ciclando sull'insieme Controls, non
mi va (... andrebbe) di fare dei test sul tipo e quindi assegnare quel che
sarebbe il pointer di default... in modo esplicito (sic!)

 l'effetto e' lo stesso...
Sě e ok ancora, ma, che mi risulti, non c'č piů modo di assegnare il pointer
di default a un oggetto contenuto in un contenitore (nel mio caso un frame)
per il quale sia stato previsto un pointer diverso da vbDefault... E' questo
che mi perplime e ... ferma.

 che è una proprietà ereditata dal contenitore...
ma questo dove starebbe scritto? Grazie.

non ho ancora capito perchè vbArrow non va bene.
Se l'utente, nelle impostazioni di windows, ha impostato un tipo di
puntatore diverso, tipo una freccia a forma di uccellino, vbArrow non ti
imposta proprio tale uccellino?
VbDefault ti imposta il puntatore impostato per il controllo... (non sta
scritto da nessuna parte, ma io, non appena ho letto l'effetto di questa
costante, l'ho interprtato in questo modo)

 questa costante, l'ho interprtato in questo modo)
Ahhh, ecco...

> ma questo dove starebbe scritto? Grazie.
Personalizzazione del puntatore del mouse
Prego
-- 
Morfeus

 Personalizzazione del puntatore del mouse
Ok, grazie, ma (nell'help di VS ho già cercato), dove?

> Ok, grazie, ma (nell'help di VS ho già cercato), dove?
Io faccio così:
Apro MSDN
DA Cerca:
copio e incollo quello che ti ho scritto(puoi anche cercare solo nei titoli)
e lo trovi.
Argomento:
 Informazioni concettuali su visual Basic
Ad ogni modo (visto che capisco che è solo una curiosità)
Copio e incollo una parte.
Quando viene impostata la proprietà MousePointer di un controllo, il
puntatore viene visualizzato quando si trova sul controllo corrispondente.
Quando viene impostata la proprietà MousePointer di un form, il puntatore
selezionato viene visualizzato sia quando il mouse si trova sulle aree vuote
del form che quando si trova sul controllo se la proprietà MousePointer è
impostata su 0-Default.
Ciao Lupo
ci vediamo al meeting (spero di esserci)
-- 
Morfeus

 ci vediamo al meeting (spero di esserci)
Ci stiamo organizzando, pur dal profondo nord (che ossimoro, mi "suona"
profondo sud, ma come si deve dire quel che mi pare cacofonico "profondo
nord", 'azz, 1-1, ci manca una roba nel dizionario...), noi ci stiamo
organizzando. Rinunciando a un giorno di lavoro e quindi a qualche milione
di euri, noi al "gruppo" ci teniamo...

voglio fare anche solo un'ora del vostro lavoro allora! :-)
cavoli, mi piacerebbe tanto partecipare al meeting, ma mi sento un po un
pesciolino fuor d'acqua :-)
ho un ultimo dubbio sul tuo problema: utilizzare vbdefault è una tua fissa
oppure c'è qualcosa che ne suggerisce l'utilizzo?

 fissa oppure c'è qualcosa che ne suggerisce l'utilizzo?
No, non è una fissa. La realtà è che non uso mai (o raramente) i Frame
perchè, se con bordo e pur senza Caption, mi fregano spazio in alto. Come
contenitore uso SSPanel.
Fatto sta che sto facendo a tempo perso un programmillo non per me (tanto
per cambiare ... gratis) e volevo utilizzare controlli standard, quindi il
Frame come contenitore.
Per abbellirlo un po' ho previsto nella Tag dei vari controlli un
"/ICONA=PIPPO.ICO/" in modo che l'utente possa denominare la sua icona
preferita in PIPPO.ICO e se la trova magicamente presente come puntatore del
mouse in tutti i controlli la cui Tag cita quel nome. Ovviamente i nomi sono
vari e diversi in funzione del significato dei vari controlli. Bene,
prevista la mia sintassi nella Tag ho fatto un banalissimo For Each
controllo in Me.Controls e, testando la presenza di "/ICONA=" nella tag di
ogni controllo, assegnavo il MousePointer.
M'è venuto in mente di assegnare un'icona anche a un Frame che conteneva dei
TextBox senza icona ed ecco come ho scoperto il problema...

 Vuoi farti male, vuoi dire... ;-)
Aaaarghhhhh, ora che ho capito cosa intendevi, "te meno": Quota, Paolo, ogni
tanto quota!! :-P

 Come contenitore uso SSPanel.
Porca pupattola! M'è venuto il dubbio e ho provato:
Se come contenitore uso SSPanel (della Sheridan e distribuito come standard
credo da VB5), il problema esposto nel primo post NON si verifica.
Allora è proprio così: In M$ sono dei prigri e di by design c'è solo la loro
brutta faccia!

 Frame come contenitore.
Lupo, in generale lo evito, ma questo è il momento di crearti
un OCX e usarlo :-). Visto che non ti serve altro che come
contenitore, ti basta usare un OCX vuoto, attivare la relativa
property .ControlContainer e salvarlo come "Contenitore".
Semplice com'è, escludo che ti possa dare problemi, e lo
fai in 2 minuti 2.
Bye, G.

[*Paperino* = 
gaet...@hotmail.com
 in
news:bn43mi$si8o7$
1...@ID-108681.news.uni-berlin.de
] ha scritto:

Pap, ne avevo già parlato. Uso SSPanel come contenitore, ma anche e
soprattutto come "descrittore", pannello nel vero senso della parola. E'
grandioso (tenuto conto che a suo tempo era standard e non volendo inserire
controlli nuovi che certamente sono validissimi) principalmente per una cosa
che non ho mai trovato: Consente di scrivere testo (con ogni font) e te lo
allinea come vuoi (tranne la giustificazione), anche centrandolo in
larghezza e, soprattutto, in altezza. Un po' come la Caption di una
banalissima label, che però non centra in verticale.
Ora è chiaro che fare un controllo non mi spaventerebbe, ma non ho voglia di
pistolare con TextWidth e TextHeight per fare quello che già c'è.
Capitomihai? O lo proponiamo come esercizio da pubblicare sul SC?

 sul SC?
Ora è come se fossi dietro di te e vedo che stai centrando una label
autodimensionante nell'OCX che poi mi manderai, vero? :-P
Massì, dai, ci penserò... ;-)

 autodimensionante nell'OCX che poi mi manderai, vero? :-P
La Label con .Autosize = True, miror della .Text e della .Font
in omonime proprietà dello UserControl, poi ti basta qualcosa tipo:
**************
Private Sub UserControl_Paint()
     AllineaLabel
End Sub
Sub AllineaLabel()
     With Label1
          .Refresh
          .Top = (UserControl.Height - .Height) / 2
          .Left = (UserControl.Width - .Width) / 2
     End With
End Sub
**************
Come direbbe pal,  :-Pigro ! Però devo ammettere che la tua
palla di cristallo va meglio della mia :-), lo stavo facendo...
solo che ho dei prob urgenti in corso.
Bye, G.

 Perň devo ammettere che la tua palla di cristallo va meglio della mia
Ogni tanto la lucido.

 la loro brutta faccia!
Continua la saga.
Si crei un textbox multiline e con entrambe le scrollbars. Nessun codice.
Si avvii e si porti il puntatore del mouse sopra la zona testo e sopra le
barre, pur disabilitate.
Si annotino le forme dei puntatori.
Ora, in Form_Load si inserisca l'istruzione Text1.MousePointer = vbIbeam.
Si avvii e si porti il puntatore del mouse sopra la zona testo e sopra le
barre, pur disabilitate.
Il puntatore č quello di prima nella zona testo, ma ... sulle barre?
Facciamo una colletta per quei poverelli?

 Il puntatore è quello di prima nella zona testo, ma ... sulle barre?
I-beam dappertutto. Però, in coscienza, non vedo il problema.
Se da codice gli si dice di forzare il puntatore ad I-beam sulla
textbox, non trovo molto strano che lo faccia :-).
Però capisco il tuo punto di vista: sarebbe più logico, dal punto
di vista dell'interfaccia grafica, avere in ogni caso il puntatore
"normale" sulle scrollbar; immagino però che le s-b siano interne
alla client area della textbox, e che quando il puntatore viene
forzato, viene forzato su tutta la client area.
D'altra parte, non vedo perché forzare il puntatore ad I-beam
sopra una textbox, per ottenere quello che vuoi basta usare il
vbDefault, cioè il comportamento normale.
A questo punto deduco che, o non so quello che vuoi ottenere,
o c'è qualcosa che non ho capito. :-)
Bye, G.

 o c'è qualcosa che non ho capito. :-)
Il problema nasce dal fatto che nel mio applicativo consento di
parametrizzare (dall'esterno, quindi lo fa l'operatore) i puntatori per vari
tipi di oggetti. E' pur vero che se un puntatore non viene esplicitamente
assegnato potrei usare il vbDefault (o non fare un bel niente), ma se la
Ibeam a uno non piace e vuole, tanto per fare un esempio, un vbCross (o una
bella icona, così non vede più dove sta il cursore nelle textbox ;-) ) sono
costretto a fare un'assegnazione esplicita al MousePointer e questo mi crea
il problema.

 esplicita al MousePointer e questo mi crea il problema.
Vedo. Eeeee... senti... per quella colletta... io tengo famiglia, poi
c'è il S.C, il meeting, le cavallette... non è che se ne può fare a meno ?
Magari se evitano di comprare alcolici tirano avanti lo stesso. :-)
Scherzi a parte, mi sa che ti ci devi adattare, a meno che tu
non voglia togliere le scrollbar automatiche, aggiungerne un paio
a mano, e _lavorare duro_ di SendMessage per sincronizzare lo
scrolling delle SB con quello delle TB, e poi la lunghezza delle
SB con le linee di testo delle TB. IMVHO, non ne vale la pena.
E poi lascia che ti dica una mia miserrima opionione: l'interfaccia
di Win non sarà il massimo, ma è quella a cui sono abituati
gli utenti, e le "visual cues" sono importanti in un prog.
Meno alteri il comportamento "normale" dell'interfaccia, meglio è:
l'utente si sente subito "a casa", ed è produttivo fin dall'inizio.
Bye, G.

 l'utente si sente subito "a casa", ed è produttivo fin dall'inizio.
Sono d'accordissimo con te. Come dicevo, le personalizzazioni se le fa
l'operatore, mica gliele impongo.
Vedrò di "riconoscere" se il puntatore è uguale a quello di default e quindi
usare il vbDefault piuttosto che il suo valore specifico. Se uno se lo
assegna diverso se lo tiene così anche sulle barre. Tiè! ;-)