Oppure

Loading
28/09/11 18:04
jaco94++
Salve !

Ho un problema con la trasparenza del form , vorrei fare in modo che all'avvio del form venga visualizzata solo l'immagine presente in una picturebox senza però che sia visibile il form.
Ora so che bisogna impostare la transparencykey con un colore che non compaia nell' immagine solo che c'è un problema, una volta avviato il form viene visualizzata solo la mia immagine con i contorni del colore che dovrebbe essere invisibile!
Cosi volevo sapere sè è possibile impostare in qualche modo il backcolor trasparente!
Solo che Vs non permette di farlo, così girando per la rete ho trovato questo:
this.SetStyle(ControlStyles.SupportsTransparentBackColor, true);

usando questo comando da codice riesco ad impostare il backcolor del form su trasparente ma una volta avviato viene visualizzato il colore "control"
come posso fare ? c'è una soluzione ?
aaa
28/09/11 18:17
walker93
Devi impostare la proprietà Opacity del form a un valore compreso tra 0.0 e 1.0 lo 0 è la trasparenza completa...

msdn.microsoft.com/it-it/library/…
aaa
28/09/11 19:23
GN
Prova così:
Me.BackColor = Color.FromArgb(0, 0, 0, 0)
aaa
28/09/11 20:51
walker93
Allora ti consiglio 2 alternative:
1° simile a quella che hai già fatto con la trasparencyKey ma imposti la proprietà "margin" a "0" e la proprietà "BorderStyle" a "None" sulla PictureBox

se la 1° non dovesse funzionare:

2° metti la tua immagine come "BackGroundImage" della form e poi imposti la proprietà "BackGroundImageLayout" come meglipo ritieni, in più per eliminare il bordo della form imposti anche "FormBorderStyle" a "None"

prova cosi, se non ottieni i risultati sperati dimmelo...
aaa
29/09/11 14:41
Thejuster
Allora partiamo semplicemente da due punti.

La trasparenza è una cosa mentre rendere trasparente un determinato colore di un form e un'altra.

per quello che intendi fare tu in questo quesito, è dare la trasparenza ad un determinato colore del form.

prima cosa setta l'immagine di background del form. (L'immagine dev'essere in formato png o bmp. Jpg ti crea gli artefatti )

scendi in basso nelle proprietà alla voce TransparecyKey e seleziona lo stesso colore che hai impostato nell'immagine da eliminare.

Se poi non riesci a trovare il colore usa questa funzione per farlo



[DllImport("user32.dll")]
        static extern IntPtr GetDC(IntPtr hwnd);

        [DllImport("user32.dll")]
        static extern Int32 ReleaseDC(IntPtr hwnd, IntPtr hdc);

        [DllImport("gdi32.dll")]
        static extern uint GetPixel(IntPtr hdc, int nXPos, int nYPos);

        static public System.Drawing.Color GetPixelColor(int x, int y)
        {
            IntPtr pt = Form1.ActiveForm.Handle;
            IntPtr hdc = GetDC(pt);

            uint pixel = GetPixel(hdc, x, y);
            ReleaseDC(IntPtr.Zero, hdc);
            Color color = Color.FromArgb((int)(pixel & 0x000000FF),
                         (int)(pixel & 0x0000FF00) >> 8,
                         (int)(pixel & 0x00FF0000) >> 16);
            return color;
        }



 private void Form1_Click(object sender, EventArgs e)
        {
            Point pt = new Point(Cursor.Position.X, Cursor.Position.Y);
            
            Color c = GetPixelColor(pt.X,pt.Y);

            MessageBox.Show("Colore Trovato (ARGB) : " + c.ToArgb());
            this.TransparencyKey = c;
            
        }





EDIT:
per quanto riguarda le sfumature quello non puoi.
come ti dicevo perchè se il valore di un colore varia anche di 1 ottieni quello.


Ultima modifica effettuata da Thejuster 29/09/11 14:44
mire.forumfree.it/ - Mire Engine
C# UI Designer
29/09/11 17:47
Dedalux
Ma perchè la gente usa ancora WinForms? T_T
Io ti consiglio vivamente di passare a WPF, dove oltre a tutti gli altri vantaggi, hai una grafica praticamente senza limiti.
aaa