Picturebox

martedì 15 gennaio 2008 - 18.05

almax Profilo | Junior Member

Ciao avrei bisogno di sapere come fare per linkare dei punti di un'immagine che si trova nel picturebox..

Cioè ho un'immagine 1024x768 in mezzo ci sono disegnati dei bottoni e dovrei linkare quei bottoni che non sono stile winform ma tutto nel jpg ..

Grazie ..

aiedail92 Profilo | Expert

Ciao

Cioè tu vorresti fare in modo che clickando su un punto della picturebox contenuto nel disegno del bottone venga avviata una procedura come se fosse stato premuto il bottone?

per fare così dovresti sapere le coordinate dei vertici del bottone (sempre che sia un poligono e non magari una linea curva...); poi, intercettando l'evento mouseclick, vai a verificare se il punto è compreso nelle coordinate dei vertici del bottone, e se è così esegui la procedura che devi fare (oppure generi un evento)

Purtroppo così diventa abbastanza difficile se il numero di lati è grande o se hai una linea curva, ma non mi è venuto in mente altro.

Luca

almax Profilo | Junior Member

Intanto ti ringrazio .. Ho dei rettangoli tutti ad una distanza simile ... Quindi tu mi dici per esempio ..

Alle coordinate 20,30 se il mouse passa cambia di cursore se clicca apre un form ...
Il tutto dove dovrbbe essere impostato sul movimento del mouse o sul load della form?

Grazie ..

aiedail92 Profilo | Expert

per il cambio del cursore devi agire al movimento del mouse; invece per il click puoi fare in due modi: o riesegui il controllo della posizione del mouse ogni volta che esegui un click sull'immagine oppure definisci una variabile globale che indica quale dei tuoi bottoni è selezionato e la modifichi insieme al cursore all'evento mousemove. Ti consiglio questa seconda possibilità almeno eviti di riscrivere il codice per vedere se il mouse è posizionato su un bottone e quale.

Luca

freeteo Profilo | Guru

ciao,
a mio avviso devi lavorare con gli eventi "Paint" e "MouseMove" della picture, dove nel primo vai a disegnare tramite oggetti del namespace System.Drawing il bottone, mentre nel secondo gestisci il fatto di esserci passato sopra.
Un terzo evento è ovviamente il "MouseClick" dove verifichi se ti è stato cliccato un punto dell'area del tuo bottone e fai quello che ti serve.

Un esempio di codice per fare qualcosa di simile:
Rectangle rectangle = new Rectangle(10, 20, 50, 50); private void pictureBox1_Paint(object sender, PaintEventArgs e) { DisegnaBottone(e.Graphics); } private void pictureBox1_MouseMove(object sender, MouseEventArgs e) { Graphics graph = pictureBox1.CreateGraphics(); DisegnaBottone(graph); if (rectangle.Contains(pictureBox1.PointToClient(MousePosition))) graph.FillRectangle(new SolidBrush(Color.Silver), rectangle); } private void pictureBox1_MouseClick(object sender, MouseEventArgs e) { Graphics graph = pictureBox1.CreateGraphics(); if (rectangle.Contains(pictureBox1.PointToClient(MousePosition))) MessageBox.Show("Premuto il pulsante"); } private void DisegnaBottone(Graphics graphics) { graphics.DrawImage(pictureBox1.Image, rectangle, rectangle, GraphicsUnit.Pixel); graphics.DrawRectangle(Pens.Black, rectangle); graphics.DrawString( "Premi", new Font("Tahoma", 10f), Brushes.Black, 10, rectangle.Y + (rectangle.Width / 2) ); }

ciao.

Matteo Raumer
[MCAD .net]
http://blogs.dotnethell.it/freeteo

almax Profilo | Junior Member

ti ringrazio della risposta.. I rettangoli nella picture esistono già .. Devo per forza rideisegnare dei rettangoli? Pensavo di dare delle coordinate e al momento del passaggio del mouse facevo il cambio del cursore e al click aprivo una form ... Utilizzo il vbnet ..
Ho pensato come se dovessi creare delle aree sensibili in html. Oppure mi è venuto in mente di agire con una finestra browser e utilizzare una page html pero' poi non posso aprire le form ..

aiedail92 Profilo | Expert

ciao

Non è necessario ridisegnare i rettangoli, basta sapere dove sono situati.

Io ho provato facendo così, e funziona:

Il codice sorgente non è stato renderizzato qui
perchè non c'è sufficiente spazio.
Clicca qui per visualizzarlo in una nuova finestra

Ho commentato il codice, se non capisci qualcosa dimmelo.

Luca

freeteo Profilo | Guru

ciao,
si si il mio esempio era proprio un esempio "da zero", se tu sai gia' le coordinate fai senza disegnare

ciao.

Matteo Raumer
[MCAD .net]
http://blogs.dotnethell.it/freeteo

almax Profilo | Junior Member

Vi ringrazio per le risposte.. Oggi provero' il codice e vi faro' sapere ... Mi sorge un dubbio le coordinate che devo calcolare rispetto a cosa devono essere calcolate ? .. La form che contiene la picturebox è ridimensionabile e la picturebox è attaccata alla form e l'immagine si allarga, potrei lavorare con le percentuali ....

aiedail92 Profilo | Expert

ciao

le coordinate sono basate sull'angolo in alto a sinistra della picturebox. Quel punto ha coordinate 0;0, quindi se devi anche ridimensionare le immagini ti tocca tutte le volte che ridimensioni modificare le variabili dei rettangoli adattandole alla nuova scala.

Luca

almax Profilo | Junior Member

Grande funziona alla grande .... bravo...

Ora devo capire bene come poter gestire il form ed il ridimensionamento .. il form è progettato a 1024x768 lo metto a tutto schermo ed io ho 1280 il rapporto va fatto in base alla risoluzione ? o a che cosa?

almax Profilo | Junior Member

tramite picturebox.pointtoclient(cursor.position) mi restituisco le coordinate del mouse rispetto al picture box .. Per avere posizioni assolute al ridimensionamento del form quindi della picture le coordinate sensibili corrispondano sempre al bottone calcolare le differenze senza sapere le risoluzioni..
Partecipa anche tu! Registrati!
Hai bisogno di aiuto ?
Perchè non ti registri subito?

Dopo esserti registrato potrai chiedere
aiuto sul nostro Forum oppure aiutare gli altri

Consulta le Stanze disponibili.

Registrati ora !
Copyright © dotNetHell.it 2002-2025
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5