Questo sito utilizza cookies solo per scopi di autenticazione sul sito e nient'altro. Nessuna informazione personale viene tracciata. Leggi l'informativa sui cookies.
Username: Password: oppure
C# / VB.NET - Form trasparenti c#
Forum - C# / VB.NET - Form trasparenti c#

Avatar
jaco94++ (Normal User)
Expert


Messaggi: 203
Iscritto: 22/10/2008

Segnala al moderatore
Postato alle 20:04
Mercoledì, 28/09/2011
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:
Codice sorgente - presumibilmente Plain Text

  1. 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 ?

PM
Avatar
walker93 (Member)
Expert


Messaggi: 460
Iscritto: 31/01/2010

Up
1
Down
V
Segnala al moderatore
Postato alle 20:17
Mercoledì, 28/09/2011
Devi impostare la proprietà Opacity del form  a un valore compreso tra 0.0 e 1.0 lo 0 è la trasparenza completa...

http://msdn.microsoft.com/it-it/library/czke9azk.aspx

se imposto la trasparenza completa non si vede più neanche l'immagine perchè tutto quello che si trova sul form diventa trasparente - jaco94++ - 28/09/11 20:25
PM
Avatar
Thejuster (Admin)
Guru^2


Messaggi: 2305
Iscritto: 04/05/2008

Up
1
Down
V
Segnala al moderatore
Postato alle 16:41
Giovedì, 29/09/2011
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


Codice sorgente - presumibilmente C#

  1. [DllImport("user32.dll")]
  2.         static extern IntPtr GetDC(IntPtr hwnd);
  3.  
  4.         [DllImport("user32.dll")]
  5.         static extern Int32 ReleaseDC(IntPtr hwnd, IntPtr hdc);
  6.  
  7.         [DllImport("gdi32.dll")]
  8.         static extern uint GetPixel(IntPtr hdc, int nXPos, int nYPos);
  9.  
  10.         static public System.Drawing.Color GetPixelColor(int x, int y)
  11.         {
  12.             IntPtr pt = Form1.ActiveForm.Handle;
  13.             IntPtr hdc = GetDC(pt);
  14.  
  15.             uint pixel = GetPixel(hdc, x, y);
  16.             ReleaseDC(IntPtr.Zero, hdc);
  17.             Color color = Color.FromArgb((int)(pixel & 0x000000FF),
  18.                          (int)(pixel & 0x0000FF00) >> 8,
  19.                          (int)(pixel & 0x00FF0000) >> 16);
  20.             return color;
  21.         }
  22.  
  23.  
  24.  
  25.  private void Form1_Click(object sender, EventArgs e)
  26.         {
  27.             Point pt = new Point(Cursor.Position.X, Cursor.Position.Y);
  28.            
  29.             Color c = GetPixelColor(pt.X,pt.Y);
  30.  
  31.             MessageBox.Show("Colore Trovato (ARGB) : " + c.ToArgb());
  32.             this.TransparencyKey = c;
  33.            
  34.         }




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 il 29/09/2011 alle 16:44
Purtroppo l'immagine rimane rovinata ! per dare la "trasparenza" posso copiare i pixel dietro al form e metterli come sfondo del form - jaco94++ - 29/09/11 19:07
? - jaco94++ - 29/09/11 19:07


https://mire.forumfree.it/ - Mire Engine
C# UI Designer
PM
Avatar
Dedalux (Member)
Pro


Messaggi: 103
Iscritto: 15/12/2010

Up
1
Down
V
Segnala al moderatore
Postato alle 19:47
Giovedì, 29/09/2011
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.

Alla fine mi sono deciso con WPF funziona tutto correttamente ! - jaco94++ - 01/10/11 15:48
PM
Avatar
GN (Member)
Guru


Messaggi: 772
Iscritto: 30/04/2011

Up
0
Down
V
Segnala al moderatore
Postato alle 21:23
Mercoledì, 28/09/2011
Prova così:
Codice sorgente - presumibilmente Plain Text

  1. Me.BackColor = Color.FromArgb(0, 0, 0, 0)


Vs: Il controllo non supporta colori di sfondo trasparenti. - jaco94++ - 28/09/11 21:48
PM
Avatar
walker93 (Member)
Expert


Messaggi: 460
Iscritto: 31/01/2010

Up
0
Down
V
Segnala al moderatore
Postato alle 22:51
Mercoledì, 28/09/2011
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...

Il problema è questo: http://imageshack.us/photo/my-images/820/catturahk.png/ - jaco94++ - 28/09/11 23:07
li la picturebox non c'entra... devi modificare l'immagine... - walker93 - 29/09/11 20:43
PM