Desenhando sobre a tela!

Publicado: 18/06/2005 em IntoSpaces
Olá Pessoal!!
Ontem ví o post no blog Luba .NET!
O cara fez um controle remoto para o Power Point através do Pocket PC! Uma idéia muito boa!! Aí o Ramon deu a idéia de o cara conseguir desenhar no pocket e aparecer na apresentação, isso seria show não? Bom pensando nisso tentei encontrar uma forma de se desenhar na tela… e deu nisso aqui… ehehheeh

Vejam:

Controle Remoto de PowerPoint via PocketPC – Parte I
http://br.thespoke.net/MyBlog/luiz_arkanus/MyBlog_Comments.aspx?ID=24579

Controle Remoto de PowerPoint via PocketPC – Parte II

http://br.thespoke.net/MyBlog/luiz_arkanus/MyBlog_Comments.aspx?ID=24734

Bom a idéia é que possamos desenhar livremente sobre a tela do Windows então precisamos de um formulário com fundo transparente.
Na classe System.Windows.Forms temos a propriedade TransparencyKey, a qual nos fornece a funcionalidade de escolher uma cor no formulário para ser transparente utilizamos esta cor abaixo:

TransparencyKey = System.Drawing.Color.FromArgb(((System.Byte)(128)), ((System.Byte)(255)), ((System.Byte)(128)));

Sendo assim setamos o fundo da formulário com a mesma cor e teremos um form transparente! 😀
BackColor = System.Drawing.Color.FromArgb(((System.Byte)(128)), ((System.Byte)(255)), ((System.Byte)(128)));

Agora é só trabalharmos os desenhos sobre o form e estaremos aparentemente pintando sobre a tela toda.
Usarei o exemplo de um timer que aponta na tela a posição atual do mouse, dando assim a impressão de o mouse escrever por onde passa. É claro que esta é uma forma tosca de se fazer isso, mas para ilustrar nossa solução, é rápida e está de bom tamanho!! 😉

Adicionamos um timer ao formulário e em seguida criamos as seguintes variáveis, elas serão nossas auxiliares no desenho

Graphics mygraphics;
int x = 0;
int y = 0;
int exp = 5;

Para se desenhar sempre utilizamos a classe System.Drawing.Graphics no GDI+, ela fornece uma série de métodos para facilitar nossa vida.
No evento Load do formulário criamos uma instância dos gráficos do nosso forumulário, assim poderemos desenhar sobre ele todo. Notem que é possível se desenhar em um controle apenas, depende de nossa necessidade.

private void Form1_Load(object sender, System.EventArgs e)
{
   mygraphics = this.CreateGraphics();
}

Agora já temos uma área para pintar, basta somente mandar o timer ficar pintando na tela a posição do Mouse a cada 1 milisegundo eheheh porquisse!!

private void timer1_Tick(object sender, System.EventArgs e)
{
   if(x != (Form.MousePosition.X – this.Left) || y != (Form.MousePosition.Y – this.Top))
   {
      x = Form.MousePosition.X – this.Left;
      y = Form.MousePosition.Y – this.Top;
      this.mygraphics.DrawLine(new Pen(Brushes.Yellow,exp),new Point(x,y),new Point(x+exp, y+exp));
   }
}

Bom já estamos fazendo um desperdício de recursos com esse timer, uma verificação no deslocamento do mouse vai bem para amenizar não?
Assim teremos o seguinte resultado

Viram eu escrevendo sobre o visual studio?
A idéia é essa, no exemplo do Luba seria mais interessante pois o servidor que ele fez receberia as coordenadas e pintaria na tela, ficaria muito legal!!!
Depois temos que ver como desenhar no pocket né? Projeto muito legal esse!!

O que acham? Idéias?

[]’s
Shinji

Anúncios

Deixe um comentário

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair / Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair / Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair / Alterar )

Foto do Google+

Você está comentando utilizando sua conta Google+. Sair / Alterar )

Conectando a %s