Usuário com melhor resposta
Como colocar um fundo transparente ou opaco no form? C#

Pergunta
-
Visual Studio C#
Galera, eu tenho em minha aplicação diversos Forms com um fundo correspondente....
Essas imagens de fundo foram feitas com Photoshop e Illustrator (PNG com fundo transparente).....
Bom, eu estou utilizando a Transparency Key com uma cor não utilizada.... Funciona bem com partes que não contem imagem ou com partes totalmente chapadas (sem opacidade alguma)... Já com imagens que contem uma leve opacidade (proposital para dar impressão de uma janela) a cor atribuída Transparency Key fica visível....
Tentei usar picturebox como fundo, mas os botoes são feitos com imagens também, aí ficam sobrepostos a ela, assim acabam ficando com aquele quadrado feio em volta dos botoes...
Então é isso, tem algum esquema para simplesmente remover o fundo do form, ou deixa-lo realmente transparente???
Já vi em diversos sites, mas não encontrei algo que satisfaça meu problema.... Desde já agradeço...
- Editado Rafael B Diniz domingo, 13 de outubro de 2013 21:50
Respostas
-
Há uma grande diferença entre transparência por Color Key (o utilizado em GIFs, por exemplo) e Opacity (os utilizados por PNG, por exemplo).
Quando você seta a propriedade Transparency Key em um Form, você está utilizando Color Key que significa que uma e apenas uma cor será considerada como transparente.
Vamos supor que você deixou Vermelho (RGB 255, 0, 0) como Color Key. A partir do momento que você aplica um PNG com uma sombra, por exemplo, sobre esta imagem, ela não fica mais vermelha (a parte mais escura da sombra provavelmente será preto (RGB 0, 0, 0)) e então o Color Key não funciona.
Windows Forms não suporta nativamente a transparência por opacidade, porque isso requer um tipo especial de janela (chamada de layered window, ou janelas em camadas). É possível implementar isso via PInvoke, conforme mostram os artigos a seguir:
http://code.msdn.microsoft.com/windowsdesktop/CSWinFormLayeredWindow-23cdc375
http://msdn.microsoft.com/en-us/library/ms997507.aspx
Importante ressaltar que isso só funcionará em janelas sem o chroma (ou seja, sem os botões minimizar, fechar e maximizar ou a barra de títulos e borda)
[] Blog: http://www.kodel.com.br
- Sugerido como Resposta J.C.Kodel segunda-feira, 14 de outubro de 2013 00:44
- Marcado como Resposta Giovani Cr quarta-feira, 23 de outubro de 2013 19:25
Todas as Respostas
-
Visual Studio C#
Galera, eu tenho em minha aplicação diversos Forms com um fundo correspondente....
Essas imagens de fundo foram feitas com Photoshop e Illustrator (PNG com fundo transparente).....
Bom, eu estou utilizando a Transparency Key com uma cor não utilizada.... Funciona bem com partes que não contem imagem ou com partes totalmente chapadas (sem opacidade alguma)... Já com imagens que contem uma leve opacidade (proposital para dar impressão de uma janela) a cor atribuída Transparency Key fica visível....
Tentei usar picturebox como fundo, mas os botoes são feitos com imagens também, aí ficam sobrepostos a ela, assim acabam ficando com aquele quadrado feio em volta dos botoes...
Então é isso, tem algum esquema para simplesmente remover o fundo do form, ou deixa-lo realmente transparente???
Já vi em diversos sites, mas não encontrei algo que satisfaça meu problema.... Desde já agradeço...
A unica forma de tudo isso acontecer é o seguinte:
Vai no BackColor do seu Form e coloque uma cor e vai também no TransparenteKey e coloque a mesma cor do BackColor, pronto fica transparente! agora lógico que os objetos vão ficar em cima, mas, eu fui testando e observer que colocando os botões com BackColor Transparent e FlatStyle igual a Flat também fica, bom essa duas são a solução do seu problema!
Fúlvio Cezar Canducci Dias -
Há uma grande diferença entre transparência por Color Key (o utilizado em GIFs, por exemplo) e Opacity (os utilizados por PNG, por exemplo).
Quando você seta a propriedade Transparency Key em um Form, você está utilizando Color Key que significa que uma e apenas uma cor será considerada como transparente.
Vamos supor que você deixou Vermelho (RGB 255, 0, 0) como Color Key. A partir do momento que você aplica um PNG com uma sombra, por exemplo, sobre esta imagem, ela não fica mais vermelha (a parte mais escura da sombra provavelmente será preto (RGB 0, 0, 0)) e então o Color Key não funciona.
Windows Forms não suporta nativamente a transparência por opacidade, porque isso requer um tipo especial de janela (chamada de layered window, ou janelas em camadas). É possível implementar isso via PInvoke, conforme mostram os artigos a seguir:
http://code.msdn.microsoft.com/windowsdesktop/CSWinFormLayeredWindow-23cdc375
http://msdn.microsoft.com/en-us/library/ms997507.aspx
Importante ressaltar que isso só funcionará em janelas sem o chroma (ou seja, sem os botões minimizar, fechar e maximizar ou a barra de títulos e borda)
[] Blog: http://www.kodel.com.br
- Sugerido como Resposta J.C.Kodel segunda-feira, 14 de outubro de 2013 00:44
- Marcado como Resposta Giovani Cr quarta-feira, 23 de outubro de 2013 19:25
-
Fúlvio muito obrigado por responder, porem estou fazendo exatamente isso...
Funciona até bem, porem nas partes onde são opacionadas, acabam recebendo a cor da Key também... Aí mata a ideia de deixar um fundo transparente.....
Eu não uso flat color nos botos, prefiro usar 3 imagens com os Eventos do Mouse "Enter", "Down" e "Leave", assim alternando as imagens, dessa forma os botoes ficam perfeitos.... Só não fica bom se usar uma picturebox com fundo....
Na Maioria dos Splash Screens de softwares (como os da Adobe) e vários jogos utilizam algo semelhante.... Como se você estivesse olhando através de um vidro....
Talvez com WPF tenhamos mais opções...
Vlw....
-