Oppure

Loading
02/10/12 8:59
lupino
Buongiorno a tutti,
vado subito al nocciolo del problema, ho creato un nuovo controllo personalizzato che riproduce una sorta di visualizzatore analogico (circular gauge) in cui i vari valori sono indicati dalla classica lancetta ruotante, modello tester per intenderci.
Detto controllo è formato essenzialmente da una picturebox (picNeedle) contenente l'immagine della lancetta che, dopo essere fatta opportunamente ruotare viene passata alla proprietà image di un'altra picturebox (picGauge) avente come backgroundimage lo sfondo del visualizzatore.
Il nuovo controllo viene poi posto su un normale form senza bordi a cui ho dato una forma circolare (anche l'occhio vuole la sua parte), il tutto nel tentativo di creare una sorta di gadget il cui scopo dovrebbe essere quello di permettermi di visualizzare determinati valori senza per forza dover mantenere aperto il programma principale.
Detto form dovrebbe però poter essere mosso col mouse alla stregua dei suoi "cugini" normali.
Ho provato con:
    Dim posX As Integer
    Dim posY As Integer
    Private Sub dspAnalogical_MouseDown(sender As Object, e As System.Windows.Forms.MouseEventArgs) Handles dspAnalogical.MouseDown
        posX = -e.X
        posY = -e.Y
    End Sub

    Private Sub dspAnalogical_MouseMove(sender As Object, e As System.Windows.Forms.MouseEventArgs) Handles dspAnalogical.MouseMove
        If e.Button = MouseButtons.Left Then
            Dim mousePos As Point = Control.MousePosition
            mousePos.Offset(posX, posY)
            CType(sender, Display).FindForm().Location = mousePos
        End If
    End Sub

(dspAnalogical è il nome dato al controllo) ma come è ovvio, essendo il controllo completamente ricoperto da picGauge, il "trucco" non funziona.
Com'è possibile passare gli eventi MouseDown e MouseMove che avvengono sul controllo alla relativa picturebox (penso sia questa la strada giusta)?
Ultima modifica effettuata da lupino 02/10/12 9:00
aaa
03/10/12 8:07
gl1963
Ciao

Se ho ben capito il tuo problema, questo piccolo progetto può essere un ottimo esempio su come ho fatto io per spostare una Form senza barra del titolo e con un'immagine che la ricopre.

Fammi sapere se ti è stato utile. :)
aaa
03/10/12 17:01
lupino
Ciao gl1963, innanzitutto grazie per la risposta.
Purtroppo però il mio problema è un tantino più complicato (almeno per un newbie come me) la picturebox a cui io mi riferisco non è sul form come nel esempio che tu mi hai postato (nel mio caso: frmDisplay) ma all'interno di un controllo personalizzato che è a sua volta posto sul form.
Essa (la picturebox; picGauge) ricopre per intero il controllo personalizzato (dock=fill) impedendogli quindi di rispondere agli eventi relativi al mouse; di contro, essendo una parte di un controllo non è in grado (o meglio io non sò come fare) di generare i suddetti eventi verso l'esterno.
Una scappatoia potrebbe essere quella di usare la proprietà backgroundimage (l'ho usata in un altro form simile e funziona alla grande) relativa al form del controllo personalizzato in luogo della picturebox ma in tal caso il problema sarebbe dovuto all'incapacità di suddetto form di esplicare la proprietà sizemode=centerimage presente invece nelle picturebox... spero di essermi spiegato bene, se dovesse servire posso postare tutto il codice per intero.
Ultima modifica effettuata da lupino 03/10/12 17:04
aaa
08/10/12 14:43
gl1963
Forse è meglio che mi fai avere il progetto per intero, in modo che possa fare qualche prova, altrimenti non saprei in che altro modo aiutarti.
Non ti garantisco però di poterci guardare a breve, nè naturalmente di riuscire a risolvere il tuo problema.
Ciao
aaa
09/10/12 17:01
lupino
Rieccomi, scusa per il ritardo ma sono convalescente per un operazione chirurgica che .... diciamo mi impedisce di star seduto a lungo :(
Ti allego il progetto o, meglio, la parte di esso in cui mi sono bloccato (il progetto intero integra svariati altri form e si riferisce ad un software in grado di leggere e graficare i dati provenienti da schede di prototipazione elettronica tipo Arduino o PStamp)
Come vedi, da codice, il form dovrebbe poter essere mosso utilizzando il tasto sinistro del mouse e chiuso col destro.
Il codice di per se è giusto ma il controllo circulargauge (cGauge nel form) non risponde all'evento mousedown o a quello mousemove (e neppure click o altri).
Da quanto posso immaginare la causa sta nel fatto che tali eventi non sono relativi al controllo ma alla picturebox con cui esso è creato e che lo ricopre per intero... da qui in poi non so più come procedere o, meglio, non so come poter passare l'evento dalla picturebox, picGauge nel controllo, al controllo stesso.
Idee???
Ultima modifica effettuata da lupino 09/10/12 20:39
aaa
09/10/12 20:43
lupino
...non riesco a capire se il file è stato allegato o meno.... ci riprovo

aaa
10/10/12 7:40
gl1963
Ciao
Ho scaricato il tuo allegato, ma mi dà diversi errori, forse perchè manca qualcosa.... non fa nulla: ho preparato un piccolo progetto di esempio.

"UserControl1" è, come nel tuo caso, un oggetto con una PictureBox di sfondo (in questo caso non ho ricoperto il controllo intero per dimostrare meglio come spostare l'oggetto sia cliccando su di esso o sull'immagine indifferentemente).

Praticamente devi guardare gli eventi "PicMouseDown", "PicMouseUp" e "PicMouseMove" che ho creato come pubblici all'interno dell'oggetto, e che ho richiamato nel Form "contenitore".

Ti chiedo scusa, ma non sono molto bravo a spiegare le cose in dettaglio. Secondo me comunque, il progetto d'esempio che ti ho allegato dovrebbe essere abbastanza semplice per aiutarti a capire come applicarlo al tuo programma.

Ciao
aaa
11/10/12 10:59
lupino
Che dire gl1963..... PERFETTO!!! :k:
Grazie, finalmente ho risolto il problema... :hail:
Come immaginavo si trattava di rendere pubblici degli eventi del mio Controllo Utente, una lacuna a cui ora grazie a te ho finalmente sopperito (sapevo come rendere pubbliche le proprietà ma non gli eventi).
GRAZIE ANCORA.

P.S.
Per quanto riguarda gli errori del mio allegato, potrebbe essere dovuto al fatto che il progetto è stato sviluppato con VB.NET 2010 ed i relativi framework 4 (se no sbaglio)?
Per contro quando vado a visualizzare i tuoi file, VB express me li converte. Mah?! :om:
Ultima modifica effettuata da lupino 11/10/12 11:00
aaa