Mostrando postagens com marcador algoritmo. Mostrar todas as postagens
Mostrando postagens com marcador algoritmo. Mostrar todas as postagens

segunda-feira, 8 de agosto de 2011

VB Tip: utilidade para Subclassing.

Olá.

Como prometido em alguns posts anteriores, achei uma utilidade para o subclassing nos formulários. Trata-se de conhecer comandos que levem a uma determinada ação.

Por exemplo: numa janela sem borda (BorderStyle=0) não há menu de contexto do sistema (aquele com opções da janela: ). E para fazer que o contexto do título funcione no nosso formulário customizado, devemos criar um menu para substituir o menu padrão do título. Para isso temos de saber o momento em que o usuário clica com o botão direito na janelinha do aplicativo na barra de tarefas. Daí vem o subclassing.

Escutando comandos para detectar chamada ao menu de contexto da janela

O projeto pronto (zipado) se encontra em https://skydrive.live.com/?cid=b278d5e7a71b5dca&sc=documents&nl=1&uc=1&id=B278D5E7A71B5DCA%21144 (pasta pessoal do Windows Live SkyDrive). Caso cair em alguma outra pasta, procure pela pasta Subclassing e pelo arquivo SubClassMenu.zip.
Dentro do arquivo zipado há o programa compilado, mas também há o código usado no subclassing criado, cujo código postarei abaixo por partes.

Iniciando o projeto

1º: Inicie um novo projeto Standard Exe.
2º: Vá em project > Add Module e adicione um módulo comum.
3º: No módulo, cole o seguinte código:

4º: Adicione uma classe, de nome cMenu.
5º: Na nova classe, cole o seguinte código:


A classe acima eu irei explicar no próximo artigo, ainda hoje, mas a função dele é criar menus e manipulá-los.
6º: Volte ao form1 criado por padrão pelo VB, e adicione o seguinte código no load do form:

7º: Execute o programa. Ao clicar com o botão direito do mouse no título da janela você verá que o mesmo irá exibir o nosso menu customizado e não mais o menu padrão da janela. Isso é útil para janelas com BorderStyle 0 (borderless form).

Considerações finais


O Subclassing tem ilimitadas funcionalidades, seja para criar um título customizado sem usar picturebox, seja para, como vimos acima, criar um menu próprio de janela, ou também para obter quando o formulário foi abandonado ou foi focalizado pelo usuário (pois o lostfocus e gotfocus nativos dos formulários do VB não funcionam..).
É isso aí, pessoal. No próximo artigo, irei explicar a classe acima, de menus, e disponibilizá-la, seja em cls ou em dll.
Até o próximo artigo.

quinta-feira, 2 de junho de 2011

Visual Basic Tip: Detectando colisões entre dois objetos

Olá. Neste artigo vou disponibilizar uma função interessante: a função para detectar colisões entre dois objetos retangulares. Ele funciona com shapes, pictureboxes, images e até mesmo com coordenadas virtuais (variáveis).

Tal função é:


Irei explicar todos os atributos com um exemplo: imagine dois pictureboxes Pict1 e Pict2. Onde quer que eles estejam, a função vai determinar se um está sobre/sob o outro, mesmo que por um mísero ponto dos dois. Em outras palavras, ele vai determinar se existe uma intersecção entre os dois objetos. Sendo assim, o código para estas duas pictureboxes do exemplo seria:

dim Colisao as boolean
Colisao = DetectCollision(Pict1.left, Pict1.top, pict1.width, pict1.height, pict2.left, pict2.top, pict2.width, pict2.height)

Como pode-se ver, há a necessidade de se passar não só a posição dos dois mas também o tamanho de ambos. Lembrando que os quatro primeiros atributos são do primeiro objeto e os outros quatro, do segundo. Nesta ordem: posição horizontal do primeiro objeto, posição vertical do primeiro objeto, largura do primeiro objeto, altura do primeiro objeto, posição horizontal do segundo objeto, posição vertical do segundo objeto, largura do segundo objeto e altura do segundo objeto.

É isso pessoal.
Em breve estarei divulgando a nova versão do MultiSystem. Atualmente estou desenvolvendo os jogos. Ele vai ter jogo de Tetris (já desenvolvido e funcionando legal, com música e tudo), Pac-man (em desenvolvimento) e outros que vier em mente.
Fiquem atentos!