FORMUL?RIO COM FORMATO NÃO RETANGULAR

NEO3 02/06/2014 18:33:23
#438671
Boa Noite,

Eu tenho um programa que fiz no VB6 e que agora estou refazendo em C#, mas estou tendo um problema que também tive com o VB6, mas que agora no C# não estou conseguindo resolver.

Nesse programa, a janela principal tem um formato cheio de curvas com uma imagem em PNG que define o molde, no VB6 para deixar com esse formato utilizei uma função encontrada no Planet Source Code em que recorta a área do formulário, mas no C# a única solução que encontro para alterar o formato da janela é utilizando a propriedade TransparencyKey em que oculta o fundo do formulário, mas com isso alguns pontos no meio da janela acabam sendo também ocultados devido a cor ser semelhante à do fundo.

Com isso, alguém conhece outra solução em que também permite criar uma janela com um formato não retangular?
OCELOT 03/06/2014 09:16:41
#438684
Resposta escolhida
Não seria muito mais fácil mudar a cor da imagem?
NEO3 03/06/2014 10:55:30
#438687
Citação:

Não seria muito mais fácil mudar a cor da imagem?



A imagem não tem a mesma cor do fundo do formulário, na verdade ela tem um pouco de transparência em que certos pontos acaba dando a mesma cor que será ocultada.

Como medida provisória, criei uma espécie de moldura com a cor que será ocultada e aí a cor do fundo do formulário fica outra, mas ainda eu gostaria de uma sugestão melhor para criar uma janela não retangular.
OCELOT 03/06/2014 11:50:44
#438688
Mas você pode alterar a cor que deve ser ocultada para qualquer uma que não seja usada em nenhum lugar da imagem, afinal qualquer cor pode ser usada para isso, eu diria que é bem improvável que você tenha usado todas as cores existentes nessa imagem.
NEO3 03/06/2014 12:50:39
#438690
Citação:

Mas você pode alterar a cor que deve ser ocultada para qualquer uma que não seja usada em nenhum lugar da imagem, afinal qualquer cor pode ser usada para isso, eu diria que é bem improvável que você tenha usado todas as cores existentes nessa imagem.



Independente da cor escolhida, sempre tem os mesmos pontos no meio da janela que acabam sendo também ocultados.

Com a ideia da moldura que fiz está dando certo a área que quero que seja ocultada, mas aonde tem curvas acaba ficando com um serrilhado meio feio igual é no VB6, e aí queria saber se teria alguma solução para deixar essas curvas mais agradáveis.
OCELOT 03/06/2014 13:18:05
#438691
Com Windows Forms a transparência vai ter que ser sempre [Ô]serrilhada[Ô], pois ele não vai conseguir fazer pixels com o canal alpha, para ele ou é transparente ou não é.

Agora se for uma opção você poderia usar o WPF, com ele você pode usar uma imagem PNG com canal alpha como transparência
NEO3 03/06/2014 17:39:27
#438696
Citação:

Com Windows Forms a transparência vai ter que ser sempre [Ô]serrilhada[Ô], pois ele não vai conseguir fazer pixels com o canal alpha, para ele ou é transparente ou não é.

Agora se for uma opção você poderia usar o WPF, com ele você pode usar uma imagem PNG com canal alpha como transparência



E como faria para adicionar e utilizar um WPF Window em um Windows Forms Application?
OCELOT 04/06/2014 10:37:53
#438715
O ideal seria você criar o projeto direto como WPF Application em vez do Windows Forms Application e usar apenas o WPF para fazer a interface gráfica, por mais que funcione misturar o WPF com o Windows Forms eles não se dão muito bem juntos pois é muito diferente a forma como eles funcionam.

Fiz um exemplo básico de form não retangular no WPF aqui para você dar uma olhada, é um projeto do VS.Net 2012, se não conseguir abrir pode tentar criar um novo projeto do tipo WPF Application e então adicionar o background.png e substituir o MainWindow.xaml e MainWindow.xaml.cs que vem por padrão pelos que enviei.

Basicamente para se fazer a janela irregular em WPF da forma mais simples você define o background como uma imagem PNG e muda a propriedade AllowsTransparency da janela para true e a WindowStyle para None para remover a barra de título e borda. Inclui no exemplo também o como poder arrastar a janela sem ter barra de título, o que é basicamente uma linha de código no WPF
NEO3 04/06/2014 11:27:10
#438719
Citação:

O ideal seria você criar o projeto direto como WPF Application em vez do Windows Forms Application e usar apenas o WPF para fazer a interface gráfica, por mais que funcione misturar o WPF com o Windows Forms eles não se dão muito bem juntos pois é muito diferente a forma como eles funcionam.

Fiz um exemplo básico de form não retangular no WPF aqui para você dar uma olhada, é um projeto do VS.Net 2012, se não conseguir abrir pode tentar criar um novo projeto do tipo WPF Application e então adicionar o background.png e substituir o MainWindow.xaml e MainWindow.xaml.cs que vem por padrão pelos que enviei.

Basicamente para se fazer a janela irregular em WPF da forma mais simples você define o background como uma imagem PNG e muda a propriedade AllowsTransparency da janela para true e a WindowStyle para None para remover a barra de título e borda. Inclui no exemplo também o como poder arrastar a janela sem ter barra de título, o que é basicamente uma linha de código no WPF



Não pude ver o projeto que vc enviou pois utilizo o VS.Net 2010, mas consegui criar uma demonstração de acordo com as informações que vc passou e realmente a aparência ficou do jeito que eu queria.

Eu ainda sou novato no C# e não conheço muito bem o modo de funcionamento de um WPF Application, e aí queria saber se com esse tipo de aplicação eu posso também criar as funções e inserir componentes que funcionam em um Windows Forms Application?
OCELOT 04/06/2014 12:19:24
#438720
No geral os componentes padrões do Windows Forms existem um equivalente em versão para o WPF, caso realmente precise adicionar um componente do Windows Forms dentro de uma janela do WPF existe um componente chamado WindowsFormsHost que permite fazer isso, basicamente você adiciona o componente WindowsFormsHost na janela WPF e adiciona então dentro dele o componente do Windows Forms, porém existem certas limitações e pode ser bem chato de fazer isso, e uma destas limitações é que ele não funciona se você estiver usando o AllowTransparency=true.

Mas vai depender do que você precisa fazer, se a janela que precisa ser irregular não precisar ter nada do Windows Forms você não deve ter problemas, dai poderia chamar outras janelas e estas podem ser do Windows Forms mesmo, para adicionar a janela do Windows Forms no projeto você precisa ir pelo Add New Item e achar o Windows Form na lista, já que essa opção não aparece direto em um projeto do WPF
NEO3 04/06/2014 12:53:40
#438722
Citação:

No geral os componentes padrões do Windows Forms existem um equivalente em versão para o WPF, caso realmente precise adicionar um componente do Windows Forms dentro de uma janela do WPF existe um componente chamado WindowsFormsHost que permite fazer isso, basicamente você adiciona o componente WindowsFormsHost na janela WPF e adiciona então dentro dele o componente do Windows Forms, porém existem certas limitações e pode ser bem chato de fazer isso, e uma destas limitações é que ele não funciona se você estiver usando o AllowTransparency=true.

Mas vai depender do que você precisa fazer, se a janela que precisa ser irregular não precisar ter nada do Windows Forms você não deve ter problemas, dai poderia chamar outras janelas e estas podem ser do Windows Forms mesmo, para adicionar a janela do Windows Forms no projeto você precisa ir pelo Add New Item e achar o Windows Form na lista, já que essa opção não aparece direto em um projeto do WPF



Entendi. O WPF então acho que vai dar certo para o que estou precisando, mas aí como faço para um WPF Application iniciar com um Windows Form e depois por esse Windows Form abrir o WPF Window e no WPF Window abrir outros Windows Forms?
Página 1 de 2 [14 registro(s)]
Tópico encerrado , respostas não são mais permitidas