Newsgroup: it.comp.lang.visual-basic
Titolo: image, shape e picturebox

ho visto che una shape puo avere una forma diversa da un comune rettangolo
(ad es., puo essere un rettangolo con i bordi arrotondati).
per la image e la picturebox è lo stesso? non sono riuscito a trovare nessun
controllo che faccia una cosa simile, mami sembra strano che non possano
assumere una forma dicversa da un rettangolo.
MarioH

 ha scritto nel messaggio
news:972r70$nc331$1...@ID-70152.news.dfncis.de...


 vedi nelle proprietà dell'oggetto shape
appunto, lo shape sì, lo so. io dicevo se posso fare lo stesso anche per
image e picturebox. lo chiedo perche solo image e picturebox (e NON shape)
possono avere la proprieta picture. nella proprieta picture io ci metto un
disegnino fatto da me con Paintbrush, ma lo posso fare solo se c'è la
proprieta picture, e shape non ce l'ha. come devo fare?

proprieta picture, e shape non ce l'ha. come devo fare?
Distinguiamo: le image, le shape, le line e le label *non* sono controlli,
ma metodi grafici!
Le label equivalgono al Form1.Print
Le images equivalgono al Form1.PaintPicture
Le Shapes equivalgono al Form1.Circle, Line ecc, o, meglio alle chiamate a
Polygon(), Ellipse(), RoundRect() (e nemmeno molto bene implementate).
Le PictureBox sono un controllo (hanno cioè l'hWnd) per di più container
(possono cioè contenere altri controlli).
Con questo ne deriva che le shape *non* hanno forme strane, ma *disegnano*
forme strane.
La forma di una finestra è comunque quadrata! (a meno che non ci applichi le
regioni, ma questa è un'altra storia).
Ciao

 assumere una forma dicversa da un rettangolo.
Puoi cambiare forma ad una picturebox usando le region (come diceva anche
Zanna)
Ecco l'esempio:
Dim mRGN As Long
Private Declare Function CreateEllipticRgn Lib "gdi32" (ByVal x1 As Long,
ByVal y1 As Long, ByVal X2 As Long, ByVal Y2 As Long) As Long
Private Declare Function SetWindowRgn Lib "user32" (ByVal hwnd As Long,
ByVal hrgn As Long, ByVal bRedraw As Boolean) As Long
'Create an elliptical region (bitmap)
mRGN = CreateEllipticRgn(0, 0, Pic.Width / Screen.TwipsPerPixelX ,
Pic.Height / Screen.TwipsPerPixelY)
'Set the window region
SetWindowRgn Pic.hwnd, mRGN, True
Non conviene usare la DeleteObject alla fine, altrimenti sotto Windows95 la
picturebox ridiventa quadrata (magia della compatibilità all'indietro di
mamma Microsoft)
Ciao
*Roby*

ti ringrazio per l'esempio, ma se NON deve essere ellittica? cioe io vorrei
fare una cosa simile: un quadrato con gli angoli smussati, che abbia uno
sfondo disegnato da me. in pratica non lo posso fare, perche picturebox e
image NON posso avere gli angoli smussati... porca miseria

 fare una cosa simile: un quadrato con gli angoli smussati,
Facile: usa la CreateRoundRectRgn.
Ecco la dichiarazione:
Public Declare Function CreateRoundRectRgn Lib "gdi32" Alias
"CreateRoundRectRgn" (ByVal X1 As Long, ByVal Y1 As Long, ByVal X2 As Long,
ByVal Y2 As Long, ByVal X3 As Long, ByVal Y3 As Long) As Long
X3 e Y3 contengono la larghezza e l'altezza dell'ellisse da usare per fare
gli angoli smussati.
Ciao
*Roby*
P.S.
Beh, facile per modo di dire. Io non ho provato.

 Beh, facile per modo di dire. Io non ho provato.
appunto... chissa che casotto... ma poi una cosa, una volta che ho fatto sto
papocchio, che cosa ottengo? mi spiego. che tipo di controllo ottengo? e
come faccio ad azzeccarci sopra il mio file bmp?
MarioH

 come faccio ad azzeccarci sopra il mio file bmp?
Con la LoadPicture. Esattamente come facevi prima. Ovviamente ti si smussano
gli angoli anche al disegno contenuto nella PictureBox.
Ciao
*Roby*

ahhhhhhhhh ecco. era quesato che non avevo capito. usando quella funzione
ottengo una picturebox, allora è perfetto... vabbe mo ci provo... sto
facendo dei form elegantissimi, che hano uno sfondo di "marmo",
bellissimo... sembra una casa dell'ottocento... .:))))))))