Mostrando postagens com marcador visual basic. Mostrar todas as postagens
Mostrando postagens com marcador visual basic. Mostrar todas as postagens

sexta-feira, 9 de março de 2012

VB Tip: Básico sobre programação, variáveis, e POO

Olá.
À pedidos, criei a primeira videoaula voltada para quem ainda não tem conhecimento sobre a programação, e que se interessa em aprender sobre.

Como dito anteriormente, esse blog é voltado tanto para a programação básica quanto para a programação hardcore.



Este artigo servirá como complemento do vídeo.

https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjZQQ5ve7QvcjTj06p5HiahN0rX5Za_XuZa1z26d6MnqTW9gOrDjXSzaW27fnWBRC-gz_NAmvS8f2ZMvJnAzxN2UFnBG-ZVLP8pZyTkACcSkOjTu9TohNujCf1_zXTMPwDyoFoFgY3Nij1A/
  1. O que é programação?
  2. O que programação tem em comum com a Matemática?
  3. Por quê programar?
  4. O que preciso saber para programar?
  5. Em qual linguagem programar?
  6. Freelancing ou emprego fixo em empresas de software, qual escolher?
  7. Programar é fácil?
  8. Qual a diferença entre linguagens de alto nível e linguagens de baixo nível?
  9. Criar páginas web ou criar programas para desktop?
  10. Classes e POO: O que são?
  11. Variáveis: o que são, e como funcionam?
  12. Estruturas de condição e repetição
  13. Criando o primeiro projeto: uma calculadora simples


O que é programação?
O termo "programação" tem vários sentidos, mas dentro do contexto de informática, "programação é o processo de escrita, teste e manutenção de um programa de computador. O programa é escrito em uma linguagem de programação, embora seja possível, com alguma dificuldade, escrevê-lo directamente em linguagem de máquina. Diferentes partes de um programa podem ser escritas em diferentes linguagens." (Fonte: Oficina da Net)

O que programação tem em comum com a Matemática?
Tudo. Podemos dizer que a programação é um tipo de matemática, voltada para aplicações desktop e web. A programação utiliza variáveis, constantes e funções, da mesma forma que na matemática. O primeiro computador, por assim dizer, foi o ábaco, que nada mais era que uma calculadora. Um computador nada mais é do que uma calculadora, uma vez que realiza milhões e até bilhões de contas por segundo. A programação utiliza também base decimal, hexadecimal, binária e octal, nos códigos. Enfim, na prática, a programação nada mais é do que cálculo.

Por quê programar?
Com o avanço da tecnologia e a adaptação das leis e das empresas para com essas novas tecnologias, a cada dia torna-se mais importante saber pelo menos o básico da informática, e esse básico não se restringe à mexer em planílhas do Excel ou em acessar webchats. Toda pessoa que se inicia na informática deveria saber, pelo menos, o básico de algorítmo e programação, não para criar programas, mas para saber como a máquina funciona e saber resolver problemas básicos, como, por exemplo, remoção de um vírus ou instalação de um programa. Já para quem quer criar aplicativos ou mesmo sistemas, já é necessário saber além. Saber sobre as classes, sobre as estruturas de condição, sobre a POO (Programação Orientada a Objeto) é fundamental para se saber programar.

O que preciso saber para programar?
Primeiro de tudo é fundamental saber como funciona o próprio computador. Ser curioso e investigar sobre cada processo que roda no próprio computador, saber sobre o sistema operacional, e também saber a parte de hardware, saber basicamente como funciona o processador, o HD, a placa-mãe, enfim, é necessário conhecer o próprio computador antes de programar para outros computadores. É necessário saber também que cada computador tem as suas configurações de acordo com o usuário e com as configurações e características de hardware, como, por exemplo, modelo de processador, memória RAM, e velocidade de clock. Por isso, um programa que rode em seu computador não irá, necessariamente, rodar no computador de um amigo ou no notebook de um colega de trabalho. Portanto, é necessário criar programas que se adaptem às configurações de cada computador e criar versões para x86 (sistemas de 32 bits) e x64 (sistemas de 64 bits), que explicarei no próximo artigo. A curiosidade é mãe do conhecimento. Se essa curiosidade resultar em falhas, não tem problema: nós, seres humanos, aprendemos com essas falhas. É necessário errar para saber não errar novamente nas mesmas circunstâncias.

Em qual linguagem programar?
Há quem diga que C++ é melhor que Ruby ou VB, assim como há quem diga que distros Linux são melhores que Windows. Entretanto, o sistema operacional e linguagem não importam para saber programar. Para quem vai trabalhar com a programação e está no nível intermediário ou avançado/hardcore do conhecimento de programação, vai um conselho: há quem diga que a melhor linguagem é aquela que paga mais e, atualmente, Java, Python e C++ estão com mais "moral" no mercado, isso porque estão surgindo e imperando novas tecnologias portáteis, como Android (Google) e o Windows 8 (Microsoft), além de sistemas operacionais da Apple, tanto portáteis quanto para desktop (Macs, Mac OS X, Lion, etc.).
Entretanto, para quem está iniciando na programação, recomendo iniciar com linguagens simples e fáceis de programar, como Visual Basic, Delphi ou qualquer outra linguagem RAD (do inglês Rapid Application Development, Desenvolvimento rápido de aplicativos) e que permita arrastar controles e "debugar" o código.

Freelancing ou emprego fixo em empresas de software, qual escolher?
Fica à critério do programador. Enquanto no emprego fixo você tem garantia do salário todo mês, no freelancing você trabalha de modo autônomo e pode escolher o horário e dia da semana que você pode programar e não fica se estressando com sistemas de terceiros (a vida de um programador não é fácil, mesmo que muitos imaginem que seja).

Programar é fácil?
Depende. O que pode ser fácil para mim pode ser difícil para você, e vice-versa. Isso depende principalmente do quê a pessoa pretende fazer profissionalmente, e com qual área (exatas ou humanas) se tem mais interesse. Uma pessoa que lida bem com matemática ou física com certeza se dará bem com programação, uma vez que ela já está acostumada com variáveis, funções e fórmulas, e a programação não foge disso. Isso também vai depender da linguagem escolhida. Existem dois tipos de linguagens de programação: linguagens de alto nível (onde se incluem, C++, Cobol, Python e até VB) e linguagens de baixo nível (onde se inclui o Assembly e C, ambos não apresentam nenhuma ou pouca forma de abstração (como classes)). Irei explicar sobre alto nível e baixo nível, adiante.

Qual a diferença entre linguagens de alto nível e linguagens de baixo nível?
Linguagens de alto nível oferecem maior quantidade de abstrações, principalmente, a criação de classes.
Em Assembly e C, não existem classes, logo, não há formas de abstração.
Abstração vem de abstrato, algo intangível pelo processador, simplesmente porque pode ser algo tangível na realidade. Um exemplo é a criação de uma classe chamada Pessoa (que inclusive está exemplificada na vídeoaula), que é intangível pelo processador sem ser compilada e/ou interpretada, mas que é tangível por nós.

Criar páginas web ou criar programas para desktop?
Muitas pessoas acham que a criação de páginas web (sites como este, ou Wikipedia, ou Orkut, ou Facebook, etc) é diferente da criação de programas desktop (como MSN, Windows Media Player, Excel, Word, Bloco de notas, ou para usuários linux: GEdit, Nuvola Player, aMSN, Pidgin, OpenOffice, BrOffice), mas não é. A criação de páginas web envolve Javascript, ou mesmo o HTML e o CSS, que nada mais são do que linguagens de programação. A diferença é que as linguagens web não têm contato direto com todos os recursos que o computador do cliente pode oferecer. Por exemplo, um site não tem como acessar arquivos em seu computador, usando ActiveX, sem sua permissão e consentimento.


Agora, veremos sobre o conceito de classes.

Classes e POO: O que são?
A Programação Orientada a Objetos (POO) é um paradigma de análise, projeto e programação de sistemas de software baseado na composição e interação entre diversas unidades de software chamadas de objetos. (Fonte: Wikipédia). A POO permite a abstração, e, consequentemente, a criação de classes e instâncias destas (objetos), daí, Programação Orientada a Objeto.
Darei um exemplo presente no vídeo:
Copiar código

Acima, temos a classe Pessoa com suas propriedades (Nome, Data de nascimento, etc).
Criaremos instâncias dessa classe:
Copiar código


Como você pôde reparar, podemos criar uma árvore genealógica com a classe Pessoa. Isso porque a classe Pessoa faz referência circular à ela mesma (Dim Mãe As Pessoa e Dim Pai As Pessoa).

Uma classe pode ser criada com base em outra classe, ou seja, esta nova classe poderá herdar as funções, propriedades e eventos da classe pai. Vejamos um exemplo do vídeo:
Copiar código


Lembra-se das aulas de Biologia do Ensino Médio? Na Taxonomia, classificação dos seres vivos, existe o gênero Canis (Reino: Animalia, Filo: Chordata, Classe: Mammalia, Ordem: Carnivora, Família: Canidae, e Gênero: Canis). Dentro deste gênero, existem três animais conhecidos: cachorro, lobo e coiote. Como quase tudo em todas os ramos e disciplinas pode ser representado na informática, iremos representar as três principais espécies do gênero Canis. Para isso, criaremos três "classes" que herdam desta classe Canis(não confundir classe biológica com classe programática):
Copiar código


Veremos agora o básico da programação: o conceito de variáveis, e como são armazenadas.

Variáveis: o que são, e como funcionam?
Na matemática, as variáveis contém valores. Na programação, não é muito diferente disso. As variáveis em si não guardam dados: guardam, na verdade, um ponteiro para aqueles dados.
Você pode estar se perguntando: "ponteiro?". Irei explicar: todos os dados no seu computador, sejam os programas ou seus comandos, são guardados na memória RAM.
Vamos imaginar a memória RAM como sendo uma enorme rua: cada casa, tem um endereço próprio.


Pois bem, cada casa desta, contém 8 pessoas. Essas 8 pessoas, são os 8 bits do byte. A casa é o byte e as 8 pessoas ali dentro são os bits. A variável, seria o carteiro que entrega as cartas e recebe as cartas dessas pessoas. Para isso, ele precisa saber aonde estão essas oito pessoas, para poder entregar ou receber essas cartas no endereço correto. Dados maiores que 1 byte (como word, ou dword) são armazenados em 2 e 4 casas, respectivamente, mas cada uma com o mesmo número de moradores.
A variável, está localizada em um ponto da memória (mais precisamente em quatro casas desta enorme rua, pois ocupa 32 bits) e contém, como valor, o endereço dos dados que ela aponta.

A seguir veremos algumas estruturas da programação, como, por exemplo, condições (if) e repetições (for, while).

Estruturas de condição e repetição
Para fazer comparações entre dados, existem as estruturas de condição. São duas: IF e Select Case. Veremos primeiro a estrutura IF.
A estrutura IF (em português, "se") pode se apresentar de quatro formas: If..EndIf, If..Else..EndIf, If..ElseIf..EndIf e If..ElseIf..Else..EndIf. Veremos cada uma:
Copiar código

Esses foram alguns exemplos da estrutura IF. Agora, veremos outra estrutura: A estrutura condicional Select Case.
Copiar código

A estrutura condicional Select Case pode se apresentar com o Case Else (quando nenhum dos casos corresponde ao valor) ou sem o Case Else.

Veremos agora, as estruturas de repetição: For e While.

For: estrutura de repetição em que se tem um valor de vezes em que o código será executado:
Copiar código


While: estrutura de repetição onde não se há um número exato de vezes em que o código será executado.
Copiar código

Essas características (while para quantidade indefinida de execuções ou for para quantidade conhecida) não são regras, ou seja, você pode usar o for para quantidades indefinidas de execução de código, ou o while para quantidades conhecidas.

Agora veremos sobre o projeto da Calculadora.
Criando o primeiro projeto: uma calculadora simples

Agora que temos uma noção básica de o que é e como funciona a programação, criaremos o nosso primeiro projeto em Visual Basic 2008: uma calculadora simples.
Antes de tudo, temos que ter o VB2008 instalado na máquina. Entre na página da Microsoft do VB2008 (cujo link é http://www.microsoft.com/visualstudio/en-us/products/2008-editions/express), procure por "Visual Basic 2008 Express Edition with SP1" e clique. Uma dropbox irá aparecer (caixa de seleção de itens). Escolha "English" e clique em "Free Download". Um arquivo pedirá para ser baixado, baixe-o e o execute. O arquivo chama-se vbsetup.exe. Mas não se preocupe: é um programa confiável da Microsoft. No instalador, vá clicando Next até que ele baixe os componentes necessários para a instalação (detalhe: aproximadamente uns 100MB serão baixados, ou seja, se você não tiver uma boa internet, execute o instalador de manhã para terminar à noite). Após o download concluir, provavelmente aparecerão mais telas e vá clicando em "next", até que a instalação seja concluída. Após isso, vá em Iniciar e procure pelo Visual Basic 2008. Na primeira execução ele pedirá que você registre o produto mas não se preocupe: ele só vai abrir uma página para que você coloque quais as intenções para com o programa. Prefira colocar que servirá para estudos (Student). Após a etapa do preenchimento das informações na página, ele dará uma chave. Use ela para licenciar o programa, que é totalmente gratuíto.

Caso tiver o VB2008 já instalado, pule para este parágrafo.
No vídeo, ele vai ensinando como criar a calculadora. Abaixo, disponibilizarei o código-fonte do programa (o que fará a nossa calculadora funcionar):

O projeto, pronto e compactado, se encontra em https://skydrive.live.com/redir.aspx?cid=b278d5e7a71b5dca&resid=B278D5E7A71B5DCA!165&parid=B278D5E7A71B5DCA!101&authkey=!AKPBZC3j_lEkJz4 (pasta do Windows Live SkyDrive. Baixe o arquivo zip "Tutorial-Blog_Diego_Silva-Calculadora_Simples").

É isso, pessoal.
Em breve postarei mais artigos.
Qualquer dúvida, sugestão ou reclamação, contate-me pelo Fale Conosco lá em cima.
Até o próximo artigo!

segunda-feira, 5 de dezembro de 2011

VB Tip: Conceitos de socket, conexão entre dois aplicativos remotamente.

Olá.
Devido à uma dúvida sobre o assunto na comunidade do orkut Visual Basic Brasil, irei postar hoje sobre soquetes e como se dá a conexão entre dois aplicativos (pois não só ocorre conexão entre dois aplicativos de computadores diferentes como também pode ocorrer a conexão entre dois aplicativos de um mesmo computador, como em muitos casos).

É notável que existe pouca informação prática na internet a respeito de como utilizar soquetes de conexão no Visual Basic, e isso com certeza deixa na dúvida aqueles que querem criar desde um simples programa de bate-papo até aos que querem criar seus próprios sistemas de VNC. Este artigo irá ajudar os dois casos (claro, neste artigo irei tratar apenas do envio e recepção de informações entre soquetes; um sistema de VNC muito provavelmente eu farei, em outro artigo).

Índice:
  1. Conceito
  2. Protocolos: TCP e UDP. Qual usar?
  3. Conexão entre dois computadores ou dois aplicativos
  4. Colocando em prática: projeto

Conceito

Primeiramente, vamos saber como importar o controle de soquetes para um projeto do Visual Basic. Com o projeto aberto (não pode ser DLL, somente Standard Exe ou ActiveX EXE), pressione Ctrl+T, ou clique com o botão direito na barra de ferramentas do VB6 (aonde estão a textbox, listbox, entre outros) e selecione Components...
Abrirá a seguinte janela:



Feito isso, procure por Microsoft Winsock Control:


Caso não estiver com aquele V do lado esquerdo ao Winsock (em outras palavras, caso o Winsock não estiver marcado), marque-o. Feito isso, clique em Aplicar e Ok.

Repare na barra de ferramentas do VB que surgiu um novo controle, de dois monitores, um verde e outro azul, cada um em cima de uma gabinete, e conectados com um fio vermelho:

Com isso, coloque uma instância do novo controle no form (clicando duas vezes no controle). Nomeie-o para "ws".

Assim, o controle fora totalmente importado para o projeto e estará disponível para uso. Abaixo veremos conceitos de protocolos.

Protocolos: TCP e UDP. Qual usar?

Com a importação do novo controle, reparamos a propriedade protocol e seus dois valores: TCP e UDP. Nesta seção aprenderemos brevemente sobre cada um e qual é o mais apropriado para o projeto. Para quem não gosta de textos longos e descritivos ou quem gosta de textos práticos, pule para o quarto parágrafo seguinte a esse.

TCP e UDP são os protocolos mais usados na internet para conexão com outro computador. O TCP (Transmission Control Protocol) é um protocolo sob o qual se assenta o núcleo da internet (Wikipédia: http://pt.wikipedia.org/wiki/Transmission_Control_Protocol). Nele se há a certeza da integridade dos dados, ou seja, sabe-se que os dados chegarão inteiros ao outro lado, às vezes cortados, mas sempre inteiros. Serve para transmissões HTTP (HyperText Transfer Protocol), FTP (File Transfer Protocol) e vários outros protocolos de comunicação. Uma desvantagem do TCP é a latência, uma vez que primeiro há de se ter uma confirmação da integridade dos dados antes de prosseguir, o que torna o fluxo de dados lento.

Já o UDP (User Datagram Protocol) é um protocolo largamente utilizado em compartilhadores P2P famosos como o Ares, eMule e outros do gênero (também usam TCP). Com ele não se há a certeza de que os dados irão chegar do outro lado. É usado para casos em que se admite uma perda de dados. A vantagem do UDP é a simplicidade do cabeçalho de comunicação (Porta de origem, porta de destino, mensagem e checksum) e a rapidez com qual os dados são transmitidos (pois não necessita de Acknowledge, ou seja, não precisa de confirmação da chegada e integridade dos dados), entretanto, a desvantagem é que a transmissão de arquivos sem um protocolo de comunicação específico torna-se perigoso, uma vez que um programa, por exemplo, irá chegar corrompido, devido a não-integridade dos dados.

A maioria das (se não, todas as) placas de rede têm em seu firmware por padrão o protocolo TCP, o que torna possível o processamento dele em modo de hardware, assim sendo mais rápido que o processamento em software. Além do mais, é o protocolo mais confiável para a camada de internet, com qual temos de ter a certeza da integridade dos dados enviados ou recebidos.

No nosso caso do Visual Basic, recomendo usar o protocolo TCP, que já vem por padrão selecionado no Winsock. Alguns comandos entre TCP e UDP do Winsock são diferentes. Exemplo: o comando Listen do TCP equivale ao Bind do UDP. Enfim, deixe o protocolo TCP selecionado no winsock.

Na próxima seção veremos sobre o conceito de conexão entre dois computadores ou dois aplicativos de um mesmo computador. Você pode pular para o parágrafo com parte prática, em negrito.

Conexão entre dois computadores ou dois aplicativos

Para uma conexão ocorrer, é necessário abrir portas. Um soquete conectado não consegue receber outro cliente, pois já está conectado a um cliente. Podem existir várias portas locais com um mesmo endereço (exemplo, várias portas com o número 500) desde que as existentes estejam já conectadas (com exceção para o Svchost.exe do Windows, que estranhamente tem duas portas locais com mesmo valor mas ambas estão ouvindo). O porquê disso é: imagine duas instâncias diferentes do Winsock ouvindo na mesma porta. Se um cliente se conecta à essa porta, haveria um conflito: qual deles irá atender aquele cliente, uma vez que os dois estão programados para aceitar um cliente quando este se conectar e uma vez que ambos estão atuando na mesma porta? O mais rápido?

Agora imagine uma situação diferente: uma instância de soquete está atuando em uma porta. Quando um cliente se conectar àquela porta, além dele aceitar a conexão com o cliente, ele irá criar outra instância, que atuará na mesma porta ouvindo. Pois bem, um cliente se conecta àquela porta, e o soquete irá criar outra porta, com o mesmo número, e ouvirá ali. Assim, se outro cliente fizer o mesmo processo do primeiro cliente, conseguirá se conectar, mas em outra instância do soquete do aplicativo. Esse é basicamente o sistema que um servidor web (Apache, IIS) usa: um site como o Google é amplamente usado e deve receber em média 100 conexões por segundo. Como citado na segunda frase do primeiro parágrafo, um soquete conectado não consegue receber outro cliente, assim, o aplicativo de servidor HTTP do Google (que provavelmente não é terceirizado, ou seja, provavelmente foi desenvolvido pela própria equipe do Google, mas para uso apenas da empresa), a cada conexão nova, cria uma nova instância do soquete web, atuando na mesma porta (80). Quando um cliente desconecta, aquele soquete é destruído, entretanto, sempre há de permanecer um para ouvir e atender aquela porta. Mesmo que por um segundo ninguém (e nada) esteja acessando o Google, ainda sim haverá de ter um soquete atuando na porta 80 do servidor do Google, prestes a atender uma nova conexão.


Na próxima seção, veremos sobre os dados transmitidos pelo Winsock.

Tipos de dados no Winsock

Os dados, sejam eles no computador ou na rede, são matrizes de bytes estruturadas. No Winsock, podemos enviar qualquer tipo de dado, e o outro pode receber em qualquer tipo. Serei mais específico: O soquete pode enviar dados em forma de matriz de bytes, em forma de texto (string), em forma de uma variável de integer, variável de byte, variável de string, variável de string fixa (Dim Mystring As String * 5). Na recepção dos dados, pode-se receber em forma de matriz de bytes, em forma de texto (string), enfim, da mesma forma. Recomendo enviar e receber sempre em forma de matriz de bytes.

Na próxima seção, criaremos um exemplo prático utilizando winsock. Enviarei e receberei dados em forma de string, por ser uma forma de transmissão de texto puro.

Colocando em prática: projeto

Direto ao ponto, criaremos um simples programa de bate-papo de apenas um cliente só, utilizando esses conceitos.

Você pode baixar o projeto pronto (zipado) em: http://dl.dropbox.com/u/47975575/Tuto_Sockets.zip.

1) Abra o Visual Basic 6.
2) Inicie um projeto do tipo Standard Exe.
3) Importe o controle Winsock.
4) Crie uma instância dele no form (também ensinado na seção "conceitos").
5) Nomeie o controle winsock para "ws".
6) Crie no form: Cinco textboxes, Cinco labéis, Dois options, Um botão, Um timer. De modo que fiquem posicionados e identificados deste modo:


No código:


Para executar o processo será necessário compilá-lo e rodá-lo em duas instâncias. Entretanto, se tiver dois ou mais computadores, rode o mesmo projeto nos dois computadores.
No campo de Host, caso o servidor esteja em outra instância em seu computador, digite 127.0.0.1 (endereço de ip local). Caso o servidor esteja em outro computador de rede local, digite o ip do mesmo (você encontra na lista de DHCP do roteador).

É isso, pessoal.
Dúvidas, sugestões de artigos, só enviar por email (twitter_diegorw@hotmail.com), twitter (@diegojsRW) ou pelos comentários daqui do blog.
Até o próximo artigo.

segunda-feira, 22 de agosto de 2011

VB Tip: Imagens transparentes

Olá.
Neste artigo ensinarei como inserir imagens transparentes em uma picturebox e principalmente, como carregar e usar imagens sem que elas sejam de resources ou de arquivos.
Para tanto, criei o primeiro tutorial em vídeo para o Blog Diego Silva.

O projeto zipado encontra-se em https://skydrive.live.com/?cid=b278d5e7a71b5dca&sc=documents&nl=1&uc=1&id=B278D5E7A71B5DCA!154 (pasta do SkyDrive).
É isso pessoal. Até o próximo artigo.

domingo, 21 de agosto de 2011

VB Tip: obter uso de memória RAM e de CPU

Olá.
Essa semana, pelos comentários, perguntaram como acessar o uso de memória RAM e de CPU no Visual Basic 6, uma vez que o MultiSystem Sidebar consegue tal feito. Ensinarei aqui o código necessário para acessar tais informações.


Primeiramente se deve saber de uma coisa: o funcionamento ou não do código dependerá do sistema operacional utilizado. Pelo menos aqui no Seven funciona, no Vista também funciona (já testei) e no XP, idem (foi lá onde desenvolvi o aplicativo). Sendo assim, o código deverá não funcionar em sistemas operacionais antigos como WinME ou Win98. Mas quem ainda usa esses sistemas operacionais hoje em dia?? Enfim.
Irei dividir em duas partes: a primeira tratará do uso de RAM e o outro tratará do uso de CPU.

Uso de RAM

Iremos precisar da API GlobalMemoryStatus da biblioteca kernel32 (onde a maioria das APIs são para acesso à seção de hardware. Beep é um exemplo.) cujo único parâmetro é uma referência do tipo MEMORYSTATUS.
Antes de começarmos, crie um novo projeto Standard EXE (pode ser também uma DLL).
Adicione ao projeto um módulo e uma classe. Chamaremos o módulo de mApi (mas pode-se colocar qualquer nome no módulo;a classe trataremos depois, portanto, não mexa nela).

Feito isso, adicione o seguinte código ao módulo:

Feita a declaração da API e do tipo necessários para a obtenção das informações desejadas, iremos criar uma função que retornará o valor de utilização da memória RAM.

Adicione a seguinte função abaixo das declarações do módulo:


Feito isso, você pode usar a função UsoDeRAM a qualquer momento, seja na atribuição à propriedade Caption de uma label ou à uma função Print de algum container.

Uso de CPU


A obtenção do uso de CPU requer uma classe. Utilizaremos a classe que criamos anteriormente. Nomeie-a de cCpu.

Nela, insira o seguinte código:



Sim, o código é realmente extenso. Portanto, explicarei somente o necessário. No módulo que criamos, insira, abaixo da declaração "GlobalMemoryStatus", o seguinte código:



A função Query retorna o valor de uso da cpu através da classe e de suas APIs internas.

Se quiser, pode baixar o exemplo pronto através do link https://skydrive.live.com/?cid=B278D5E7A71B5DCA&sc=documents#!/?cid=b278d5e7a71b5dca&sc=documents&nl=1&uc=1&id=B278D5E7A71B5DCA!152!cid=B278D5E7A71B5DCA&id=B278D5E7A71B5DCA!152 (pasta do SkyDrive).

É isso pessoal.
Até o próximo artigo!

segunda-feira, 8 de agosto de 2011

VB Tip: Criando menu de modo fácil - MenuCreator

Olá.
Neste artigo irei disponibilizar uma nova classe/livraria que criei, chamada MenuCreator, cuja classe chama-se cMenu. O objetivo principal dele é criar e manipular menus de modo bem simples. O link dele é https://skydrive.live.com/?cid=b278d5e7a71b5dca&sc=documents&nl=1&uc=1&id=B278D5E7A71B5DCA%21146# (pasta do SkyDrive). Nele há cinco métodos, entre eles:

  • Add (menuh as Long, Pos as Long, Text as String, [Flags as long, lpimage as stdpicture]): Adiciona um item à um menu existente.
    Menuh recebe o endereço handle do menu.
    Pos recebe um número que posteriormente será identificado por sua função, número este maior que 0.
    Text recebe o texto do item. Flags (opcional) recebe as opções do item, listadas abaixo (que podem ser combinadas com o operador binário OR):
    * MF_DISABLED = &H2& - Desabilita o item (mas não o torna cinza, veremos isso depois);
    * MF_GRAYED = &H1& - Torna o item cinza (mas não o torna desabilitado; para desabilitá-lo e torná-lo cinza, use (MF_DISABLED OR MF_GRAYED).);
    * MF_SEPARATOR = &H800& (NÃO COMBINÁVEL!) - Torna o item em uma barra horizontal de separação de itens.
    * MF_POPUP = &H10& - Inicia um novo menu ao lado.

  • Count (menuh as Long) as Long: Retorna a quantidade de itens em um determinado menu. Menuh recebe o endereço handle do menu.

  • Create () As Long: Cria um novo menu, e retorna seu handle para ser manipulado pelas outras quatro funções.

  • Destroy (menuHandle as Long): remove um menu da memória, menu este determinado pelo endereço handle em menuHandle.

  • Show (menuh as Long, owner as Long, x as Double, y as Double) as Long: Exibe um menu. Menuh recebe o endereço handle do menu, owner recebe o endereço handle do formulário pai (Me.hWnd), x e y recebem a posição absoluta (em pixels) do menu, na tela.


Para o valor de x e y no método show, usamos uma das duas APIs seguintes:
* ClientToScreen - Transforma uma coordenada local do formulário em uma coordenada absoluta da tela.
* GetCursorPos - Obtém a posição atual do cursor do mouse.

Ambos usam a estrutura POINTAPI, cujos elementos são X, como LONG, e Y, também LONG.

Abaixo vai um exemplo. Crie um form em um projeto do tipo Standard Exe, adicione um botão no topo esquerdo do form e adicione o seguinte código no formulário:

"h=m.create" cria um novo menu e atribui o endereço do novo menu ao h. m.add adiciona os itens de 1 a 20 no menu criado. pt.x, pt.y, e clienttoscreen transformam a posição do botão em coordenadas absolutas da tela.

"r=m.show" exibe o menu na tela e retorna o item selecionado, e, caso nenhum item for selecionado, retorna zero. Daí a necessidade dos itens adicionados terem identificação (Pos as long) maior que 0.
"m.destroy" e "set m=nothing" são necessários para liberar memória, tanto do menu (destroy h) quanto da classe cMenu (set m=nothing).

Para manipulações mais complexas como por exemplo, adição de linhas verticais no menu para dispô-los em colunas, deve-se usar APIs externas à classe, como SetMenuItemInfo e similares.

Com essa classe, você pode criar um menu customizado para um formulário borderless (BorderStyle=0), abaixo do que seria o título.
Enfim, você poderá usar essa classe para facilitar a programação com menus.
Em breve, nova versão do Multisystem com formulários renovados e com menus, com auxílio dessa nova classe por mim criada.
É isso, pessoal.
Até o próximo artigo!

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.

domingo, 24 de julho de 2011

VB Tip: Math Parser Básico

Olá.
Essa semana estou criando um editor de imagem profissional, que contará com um sistema de console de comando, tipo como no AutoCad, como no Blender ou como, simplesmente, o Prompt de Comando (para quem não conhece, aqui está alguns exemplos: Console do Blender e Prompt de comando). Também pode se assemelhar ao sistema do Immediate Pane do VB6.
Enfim, e em todos esses sistemas de console, há funções de evaluate, que nada mais é que um sistema que resolve fórmulas em strings para números reais. Andei pesquisando na internet e encontrei alguns exemplos que usam o Eval() do Microsoft Scripting Runtime; Entretanto, para implementar esse sistema em seu aplicativo é necessário redistribuir esse pacote (msscrrun.dll, se não me engano) e isso pode causar problemas de copyright, pois é um complemento da Microsoft.

Pesquisando mais a fundo e com keywords mais apropriadas, encontrei o termo "Math Parser" (em tradução livre, "Interpretador de Matemática") e alguns exemplos prontos. Aí resolvi criar um Math Parser próprio, com um sistema um pouco diferente dos que vi na internet.

O código

Abaixo, o código que criei, para quem passar pela mesma situação.

Se alguém quiser implementar mais o código, colocar suporte a fórmulas e parênteses, seria ótimo para divulgar o conhecimento.

E como prometido, irei divulgar posteriormente um código pronto de subclassing. Não houve possibilidade de criar um subclassing essa semana porque, como citado no início deste artigo, estou trabalhando em um editor de imagem profissional com um sistema de console. Mas a qualquer momento divulgarei.
Nota: Esse editor de imagem fará parte do projeto MultiSystem; Houve um problema de compatibilidade na minha migração de XP para Seven quanto ao DirectX, e terei que retirar a referência do DirectX8;Infelizmente, por questões burocráticas, a Microsoft fez com que o DirectX atual, que vem integrado no Seven, não fosse compatível com o Visual Basic 6 e sim com o VB.NET. Não há como negar que a linguagem .NET tem mais recursos; Entretanto, ao divulgar um programa feito em VB.NET, por mais leve que o programa em si seja, o cliente tem de baixar outro programa, chamado .NET Framework, que pesa mais de 30MB! Ou seja, o peso final do aplicativo, juntamente com o pacote Framework, fica inviável divulgar.
E ao migrar para o VB.NET, há questões de incompatibilidade com certos códigos que antigamente (não tão antigo..) eram usados no VB6, seja na conversão de tipos (a declaração e conversão de tipos no .NET é explícita, diferente do VB6, que permite que sejam realizadas operações matemáticas com strings contendo números, o que NÃO vem a ser um Math Parsing; ele não interpreta nativamente (e acredito que nem o .NET) strings contendo equações) ou no uso de certas DLLs ou certos complementos OCX. É por essas e outras que muitos programadores, inclusive eu, usamos o VB6 como linguagem padrão de Visual Basic.
Enfim, 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!

quarta-feira, 2 de março de 2011

Visual Basic Tip: Criando efeito de "fade" entre imagens.

Aqueles que baixaram a versão alpha do programa MultiSystem que publiquei semana passada, puderam reparar que na Sidebar as imagens passam em "fade" (ou seja, se sobrepoem translucidamente). Isso eu creio que não vão encontrar em lugar nenhum na Internet, portanto, postarei aqui caso alguém quiser executar o mesmo efeito em algum programa. É de sua conta colocar ou não os créditos da minha autoria do tal "algorítimo".
Para quem não baixou, aí está um print:


Pois bem, eu não usei APIs para tal efeito, usei apenas algumas funções e procedures criadas por mim.

Criando tal efeito


Abra um novo projeto no VB do tipo Standard EXE (pode ser algum existente, desde que não haja conflitos com nomes de variáveis e de objetos) (também pode ser um activex, mas nesse tutorial usaremos apenas EXE).

Nas propriedades do form, defina ScaleMode=vbPixels.

Crie três pictureboxes, ambos com tamanho de 100x80. Nomes: "Picture1", "Picture2" e "resultado". Nas propriedades das pictureboxes, defina o ScaleMode deles para VbPixels e defina AutoRedraw para true.

Crie três images, ambas também com o tamanho de 100x80. Nomes: "Image1", "Image2" e "Image3". Nas propriedades, ative o Stretch.

Insira dois timers, "timer1" e "timer2". Timer1 com intervalo igual a 1 e timer2 com intervalo igual a 2000, este último desabilitado (em outras palavras, enabled=false).

Defina alguma imagem para Image1 e Image2. No exemplo usei duas imagens da pasta Wallpapper localizada em c:/WINDOWS/Web.

No código insira o seguinte:


Explicação:
tRGB é o tipo que irá receber valores RGB.
OLEtoRGB é a função que vai transformar cor OLE (&H00000000FF) em RGB(255,0,0).
CalculateHalf é a função que irá mesclar as cores.


Se quiser, você pode baixar o projeto pronto zipado pelo link: http://ys8hqw.bay.livefilestore.com/y1pJFGceE-n1OZLcKyEAABLEnbOdzOc0vTPhbjwRbIWTyYuGwDypb9B6Rl7KqHPIQdlRohvQejyH564qQuIZtf3MR8o3Ev7-Evi/FormFadeExample.zip?download&psid=1 ou http://cid-b278d5e7a71b5dca.office.live.com/self.aspx/.Documents/FormFadeExample.zip. Ao baixar, descompacte tudo em uma pasta antes de executar o projeto.

É isso, pessoal. Em breve postarei mais dicas e também programas que eu criar. Fiquem atentos!

segunda-feira, 14 de fevereiro de 2011

Programa que criei: BasicAlarm

O BasicAlarm, como o próprio nome diz, permite criar alarmes. É um programa útil e extremamente simples de mexer.
Obs: O programa, quando um alarme desperta, emite um som pelo auto-falante interno do CPU. Portanto, se ouvir um apito no CPU se um alarme estiver despertando não se deve à alta temperatura no processador nem à problemas de memória RAM. Isso se deve ao alarme estar sendo despertado, e isso ocorre graças à API Beep (dwFrequence, dwMilliseconds) da livraria kernel32.dll

Falando em APIs, em breve postarei dicas de APIs para você que é programador e que deseja utilizar tais APIs em seus programas.

Voltando ao assunto principal do post, abaixo está o link do meu programa:
http://cid-b278d5e7a71b5dca.office.live.com/self.aspx/.Documents/Instalador-BasicAlarm.exe ou http://ys8hqw.bay.livefilestore.com/y1p_F1KQTPmvG-v0qOxzSxiCs-s-uwChw23WbhRc77aK7ZqzB4tDMMVJZgZbosPUvwFZR0cpiU1bKGhBQbFI8irJlhue09vTYYv/Instalador-BasicAlarm.exe?psid=1 (um é link do diretório do SkyDrive, outro o link direto do SkyDrive).

Abaixo estão alguns prints: