Un consiglio: non aprire mai piᅵ di un post per lo stesso argomento.
Scrivi sotto a quello che hai giᅵ postato.
Ora veniamo al tuo problema. Non ho capito se vuoi sapere come si fa in
VB6 o in .NET.
Nicola
Intercetti la pressione del tasto destro del mouse (evento MouseUp) e
poi fai Me.PopupMenu TuoMenu
> per quanto riguarda vb.net ho una forte intenzione a cominciare ad imparare
> ad usarlo ed abbandonare vb6,ma ho dei seri problemi di vista xche sono un
> ipovedente grave e non sono piu in grado di leggere libri stampati.
> per leggere dovrei trovare un testo in formato elettronioco cosi lo
> ingrandisco oascolto con voce sintetizzata..
C'era un ragazzo da noi alle superiori che era ipovedente grave.
Utilizzava uno screenreader per leggere le cose a schermo e una specie
di "proiettore" dove da una parte si poggiava il foglio (o il libro) e
dall'altra se ne vedeva l'immagine fortemente ingrandita.
> per quanto cercare un testo che spighi vb.net ed il framework chee consigli
> mi dai?.
Qui non saprei aiutarti, perchᅵ noi abbiamo l'ottimo libro di Balena in
ufficio, ma tratta VB2005, mentre ora siamo al VB2008 (o frameword 3.5),
con in uscita VB2010 e Framework 4.0
Nicola
>Il 17/08/2009 9.40, leonello34 ha scritto:
>> lo voglio sapere come si fa in vb6.
>
>Intercetti la pressione del tasto destro del mouse (evento MouseUp) e
>poi fai Me.PopupMenu TuoMenu
Forse volevi dire MouseDown, di solito si usa quello.
Private Sub Form_MouseDown(Button As Integer, Shift As Integer, X As Single, Y
As Single)
If Button = vbRightButton Then
PopupMenu Shmnu, vbPopupMenuRightButton
End If
End Sub
--
ciao
Stefano
No no, intendevo proprio MouseUp.
Non � detto che all'evento mousedown corrisponda un evento mouseup sullo
stesso controllo. Potresti infatti fare un mousedown su una casella di
testo e spostare il mouse su un'altra.
Il comportamento standard di windows � quello di utilizzare MouseUp,
quindi � bene conformarsi agli standard per non generare confusione
negli utenti.
Nicola
http://www.vb-helper.com/howto_replace_textbox_menu.html
In breve, per evitare che esca il menu standard
devi disabilitare e riabilitare immediatamente il
controllo, per esempio nella MouseDown, cos�
dopo puoi richiamare il tuo.
TuaTextBox.Enabled = False
TuaTextBox.Enabled = True
PopupMenu TuoMenu
Bye, G.
> In breve, per evitare che esca il menu standard
> devi disabilitare e riabilitare immediatamente il
> controllo, per esempio nella MouseDown, cosᅵ
> dopo puoi richiamare il tuo.
>
> TuaTextBox.Enabled = False
> TuaTextBox.Enabled = True
> PopupMenu TuoMenu
Dove non arrivano le mie, limitate, conoscenze, arriva il buon Paperino :-)
Nicola
'Text1 � il controllo in cui vuoi disabilitare il men� di default
Private Sub Form_Load()
OldWindowProc = SetWindowLong(Text1.hWnd, GWL_WNDPROC, AddressOf
NoPopupWindowProc)
End Sub
Private Sub Form_Unload(Cancel As Integer)
SetWindowLong Text1.hWnd, GWL_WNDPROC, OldWindowProc
End Sub
- - - - - - - - - - - - - - - - -
Da mettere in un modulo:
Public Const GWL_WNDPROC = (-4)
Public Const WM_USER = &H400
Public Const WM_CONTEXTMENU = &H7B
Public Declare Function CallWindowProc Lib "user32" Alias "CallWindowProcA"
(ByVal lpPrevWndFunc As Long, ByVal hWnd As Long, ByVal msg As Long, ByVal
wParam As Long, ByVal lParam As Long) As Long
Public Declare Function SetWindowLong Lib "user32" Alias "SetWindowLongA"
(ByVal hWnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As Long
Public OldWindowProc As Long
Public Function NoPopupWindowProc(ByVal hWnd As Long, ByVal msg As Long,
ByVal wParam As Long, ByVal lParam As Long) As Long
If msg <> WM_CONTEXTMENU Then NoPopupWindowProc =
CallWindowProc(OldWindowProc, hWnd, msg, wParam, lParam)
End Function
--
Ciao Fede
By Chicco Production
http://bcp.freetools.it
E' un altro sistema, ma molto delicato. Se esci dal programma
senza fare l'unload e senza rimettere posto le cose, e non intendo
solo dal compilato, ma anche dall'IDE, rischi il blocco di entrambi,
programma e IDE. Altrettanto se usi pi� istanze dello stesso
controllo, e in qualche altro caso.
[Per ovviare a questi problemi si pu� usare la MsgHookEx.dll
di Balena, per esempio, o qualche equivalente (SSubTmr.dll
di Hardcore VB, la versione modificata da VbAccelerator...)].
Ma visto che c'� una soluzione semplicissima e perfettamente
sicura, in due linee di VB puro, beh...
Bye, G.
E poi, quando scarichi un Form nel compilato passi necessariamente
attraverso l'UnLoad,
quindi quello che dicevi prima non ha molto senso! Nell'IDE comportati da
persona intelligente!
Comunque anche la tua soluzione � funzionale...
Per quanto riguarda le librerie che hai proposto, non val la pena
aggiungerle al progetto, se questo � l'unico compito che devono svolgere. Al
limite si potrebbe studiare il sorgente ed adattarlo alle proprie esigenze,
importando direttamente la classe nel progetto!
La SSubTmr.dll di vbAccellerator ti risparmia un sacco di grattacapi
proprio con questi tipi di SubClassing, evitandoti oltretutto la
menata, per via dei limiti di AddressOf, di dover mettere le funzioni
in un modulo BAS (che quando devi usarle in più posti, e soprattutto
dal codice di una classe è un grosso fastidio)
Visto che non ha altri prerequisiti da installare, è leggerisima e
free per tutti gli usi, vale la pena eccome.
E' quella consigliata dalla Microsoft nella vecchia KB. E, anche
se non lo si capisce subito, ha un senso abbastanza logico
per chi conosce gli internals dell'interfaccia di Windows.
> Sar� un mio difetto, ma propendo di pi� per le funzioni API!
Se ce n'� bisogno per qualche motivo, anch'io.
> E poi, quando scarichi un Form nel compilato passi necessariamente
> attraverso l'UnLoad,
No.
> quindi quello che dicevi prima non ha molto senso! Nell'IDE
> comportati da persona intelligente!
Famm capire: rinunciare per esempio ad usare il break and
continue, che � forse la caratteristica pi� utile dell'IDE di VB,
perch� usandolo potrebbe piantarsi tutto, lo consideri intellligente ?
> Comunque anche la tua soluzione � funzionale...
> Per quanto riguarda le librerie che hai proposto, non val la pena
> aggiungerle al progetto, se questo � l'unico compito che devono svolgere. Al
> limite si potrebbe studiare il sorgente ed adattarlo alle proprie esigenze,
> importando direttamente la classe nel progetto!
No. Mi sa che non hai ben chiaro quali siano i problemi sicuri
o potenziali, del subclassing. E' proprio nel fatto che siano
compilate come DLL esterne al programma e all'IDE, l'utilit�
di quelle funzioni. Integrarle nel progetto non avrebbe senso.
Bye, G.
Perch� no?
>> quindi quello che dicevi prima non ha molto senso! Nell'IDE
>> comportati da persona intelligente!
>
> Fammi capire: rinunciare per esempio ad usare il break and
> continue, che � forse la caratteristica pi� utile dell'IDE di VB,
> perch� usandolo potrebbe piantarsi tutto, lo consideri intellligente ?
A me non si � mai piantato niente!
Metti in pausa, correggi e riparti.
Se fermi l'applicazione, non premi STOP,
ma esci in maniera corretta!
>> Per quanto riguarda le librerie che hai proposto, non val la pena
>> aggiungerle al progetto, se questo � l'unico compito che devono svolgere.
>> Al
>> limite si potrebbe studiare il sorgente ed adattarlo alle proprie
>> esigenze,
>> importando direttamente la classe nel progetto!
>
> No. Mi sa che non hai ben chiaro quali siano i problemi sicuri
> o potenziali, del subclassing. E' proprio nel fatto che siano
> compilate come DLL esterne al programma e all'IDE, l'utilit�
> di quelle funzioni. Integrarle nel progetto non avrebbe senso.
???
Per me � semplicemente paura.
Ma ti ripeto, se usate nel modo corretto,
non danno problemi!
Scusate se "arrivo dopo la puzza", ma io credo che abbia ragione SB.
Per 2 motivi:
> Non � detto che all'evento mousedown corrisponda un evento mouseup
> sullo stesso controllo. Potresti infatti fare un mousedown su una
> casella di testo e spostare il mouse su un'altra.
1. AFAIK (in VB6) MouseDown e MouseUp corrispondono sempre, a prescindere
dal fatto che il cursore possa trovarsi su controlli diversi in momenti
diversi, ci� significa che viene generato l'evento MouseUp per il controllo
su cui � stato effettuato il MouseDown, anche se quando si rilascia il mouse
il cursore si trova su un controllo diverso (contrariamente a quanto alcuni
credono).
2. in questo specifico caso usando MouseUp non � possibile sopprimere il
menu default utilizzando la tecnica di disabilitazione del textbox, mentre
con MouseDown s�.
A questo proposito consiglio di procedere come suggerito dallo stesso
supporto Microsoft: http://support.microsoft.com/kb/191670
(la soluzione ottimale � leggermente pi� complessa di quella di Paperino, ma
il succo � quello)
Bye
Raf