36
Desenvolvendo aplicações para Linux utilizando Gambas – Ubiraci Lage Brandão Júnior Projeto n. 1 - Calculadora Neste primeiro projeto nós iremos construir um programa bem simples para, na medida em que formos desenvolvendo novos projetos, irmos aprendendo a sintaxe e a forma de se trabalhar com o Gambas. Iremos desenvolver uma calculadora simples, apenas com as quatro operações básicas, um botão para limpar a última operação, um outro botão para limpar todas as operações e um botão para fechar o programa. Nossa intenção neste projeto não é criar uma calculadora profissional mas tomar conhecimento dos passos mínimos para se criar um programa utilizando Gambas. Ressalto que todos os projetos deste livro foram desenvolvidos utilizando o Kurumin Linux versão 5.1. Se você, leitor, tiver outra versão instalada ou outra distribuição, terá de verificar se o Gambas funciona nesta distribuição e se todas as bibliotecas que o Gambas necessita para executar os programas estão devidamente instaladas. Para começarmos vamos iniciar o Gambas. No Kurumin Linux é criado na instalação um grupo “Desenvolvimento” onde o Gambas é instalado por padrão. Clique no menu K -> Desenvolvimento -> Gambas. Será mostrada uma tela parecida com a da figura n. 1: Figura n. 1 – Tela inicial do Gambas Nesta tela nós temos várias opções e informações importantes. Na parte de cima temos o número da versão atual do Gambas além de uma mensagem animada informando o tipo de licença em que o Gambas é distribuído. No lado esquerdo temos cinco opções para escolher: Novo Projeto Abrir Projeto 1

206_gambas

Embed Size (px)

Citation preview

Page 1: 206_gambas

Desenvolvendo aplicações para Linux utilizando Gambas – Ubiraci Lage Brandão Júnior

Projeto n. 1 - Calculadora

Neste primeiro projeto nós iremos construir um programa bem simples para, na medida em que formos desenvolvendo novos projetos, irmos aprendendo a sintaxe e a forma de se trabalhar com o Gambas. Iremos desenvolver uma calculadora simples, apenas com as quatro operações básicas, um botão para limpar a última operação, um outro botão para limpar todas as operações e um botão para fechar o programa. Nossa intenção neste projeto não é criar uma calculadora profissional mas tomar conhecimento dos passos mínimos para se criar um programa utilizando Gambas. Ressalto que todos os projetos deste livro foram desenvolvidos utilizando o Kurumin Linux versão 5.1. Se você, leitor, tiver outra versão instalada ou outra distribuição, terá de verificar se o Gambas funciona nesta distribuição e se todas as bibliotecas que o Gambas necessita para executar os programas estão devidamente instaladas.

Para começarmos vamos iniciar o Gambas. No Kurumin Linux é criado na instalação um grupo “Desenvolvimento” onde o Gambas é instalado por padrão. Clique no menu K -> Desenvolvimento -> Gambas. Será mostrada uma tela parecida com a da figura n. 1:

Figura n. 1 – Tela inicial do Gambas

Nesta tela nós temos várias opções e informações importantes. Na parte de cima temos o número da versão atual do Gambas além de uma mensagem animada informando o tipo de licença em que o Gambas é distribuído. No lado esquerdo temos cinco opções para escolher:

• Novo Projeto

• Abrir Projeto

1

Page 2: 206_gambas

Desenvolvendo aplicações para Linux utilizando Gambas – Ubiraci Lage Brandão Júnior

• Projetos Recentes

• Exemplos

• Sair

A opção Novo Projeto inicia um assistente de criação de projetos. Este assistente será melhor explicado adiante quando formos criar o projeto da calculadora.

A opção Abrir Projeto mostra uma caixa de seleção de arquivos para que você possa selecionar o nome do projeto que deseja editar. Você pode ver na Figura n. 2 este diálogo de seleção de arquivos em ação:

Figura n. 2 – Diálogo para seleção de projetos

Na opção Projetos Recentes nós temos a possibilidade de carregar um projeto que nós já editamos antes. É mostrada uma lista com os nomes dos últimos projetos editados, à direita, logo na tela de abertura do Gambas, como mostrado na Figura n. 3.

2

Page 3: 206_gambas

Desenvolvendo aplicações para Linux utilizando Gambas – Ubiraci Lage Brandão Júnior

Figura n. 3 – Opção de abrir um projeto recente

A opção de Exemplos, mostra uma lista de projetos que já vêm instalados no Gambas. É só clicar sobre o nome do projeto que este será aberto para edição, conforme visto na Figura n. 4:

Figura n. 4 – Opção de abrir um projeto de exemplo

A opção de sair, fecha o Gambas. Para que nós possamos iniciar o desenvolvimento da nossa calculadora temos de clicar em Novo Projeto. Iremos mostrar em detalhes os passos para se criar um novo projeto e quando solicitado, nos próximos capítulos, estes serão os passos básicos para iniciar qualquer projeto no Gambas.

Vamos dar inicio ao nosso projeto da calculadora. Para isso clique no botão Novo Projeto. Será iniciado o assistente para criação de novos projetos do Gambas. Na Figura n. 5 temos a tela inicial do assistente.

3

Page 4: 206_gambas

Desenvolvendo aplicações para Linux utilizando Gambas – Ubiraci Lage Brandão Júnior

Figura n. 5 – Tela inicial do assistente de novos projetos

Esta primeira tela do assistente apenas mostra uma mensagem informando que este assistente cria um novo projeto e que ele pode ser criado em branco ou a partir de outros. Clique no botão Próximo para ir à próxima tela do assistente. Na próxima tela o assistente deixa você escolher entre quatro opções:

1. Criar um projeto gráfico

2. Criar um projeto que tem como base um projeto existente

3. Criar um projeto que executa em um terminal

4. Importar um projeto do Visual Basic da Microsoft

Cada uma das opções disponíveis nesta segunda tela, será tratada nos próximos capítulos. Por hora, vamos deixar selecionado a opção padrão que é a de criar um projeto gráfico, como mostra a Figura n. 6:

4

Page 5: 206_gambas

Desenvolvendo aplicações para Linux utilizando Gambas – Ubiraci Lage Brandão Júnior

Figura n. 6 – Selecionar o tipo de projeto a criar

Clique em próximo e veremos a tela da Figura n. 7. Nesta tela devemos informar o nome do projeto e o título. Vamos utilizar como padrão a sigla gmb antes do nome do projeto para designar um projeto desenvolvido em Gambas. Você não é obrigado a seguir esta convenção. Nós apenas vamos fazer desta forma para ficar mais didático mas você tem total liberdade de utilizar qualquer nome para o seu projeto. Uma informação importante sobre os projetos em Gambas é que diferentemente do Visual Basic que aceitava ter diversos projetos num mesmo diretório, Gambas aceita somente um projeto por diretório. Ou seja, o nome do projeto também será o nome do diretório que Gambas irá criar para abrigar seus arquivos. Esta mudança de atitude do Gambas em utilizar somente um diretório por projeto, vem para melhorar ainda mais a qualidade desta incrível ferramenta de desenvolvimento pois, assim os projetos ficam melhor organizados, não havendo a possibilidade de misturar arquivos de um projeto com os de outro. Nesta tela também temos duas opções de configuração para o projeto inteiro:

1. Se o projeto pode ser traduzido

2. Se os controles Foms são públicos

Por enquanto nós não precisamos nos preocupar com estas opções. Basta saber que se você marcar que o projeto pode ser traduzido, o Gambas também irá incluir bibliotecas que permitirão a internacionalização de sua aplicação. Você só irá necessitar desta opção se você pretender executar o seu sistema em vários idiomas diferentes. Não é o caso da maioria dos programas, por isso, esta opção vem desmarcada por padrão. A outra opção é deixar as janelas (Forms) públicas, ou seja, elas podem ser acessadas de todo o projeto. Também é uma opção pouco utilizada pois, nós podemos definir um procedimento estático e público dentro da janela para podermos criá-la na memória do computador. Não há a necessidade de deixar a janela pública. Por esta razão, está opção também vem desmarcada por padrão. Preencha o nome e o título do projeto conforme mostra a Figura n. 7:

5

Page 6: 206_gambas

Desenvolvendo aplicações para Linux utilizando Gambas – Ubiraci Lage Brandão Júnior

Figura n. 7 – Definir o nome e o título do projeto

Depois de preencher os dados do nome e do título do projeto, clique em Avançar. Na próxima tela você deverá escolher em qual diretório o Gambas deve criar o projeto. Lembre-se que o nome do diretório que o Gambas irá criar será o mesmo nome do projeto. Então o que você irá fazer nesta tela é escolher o nome do diretório pai ou ascendente do diretório do projeto. No meu caso, eu criei uma pasta de nome Programacao dentro do meu diretório de usuário. Meu diretório ficou assim: /home/kurumin/Meus Documentos/Programacao. Você pode criar em outro lugar se quiser. Eu criei um diretório chamado Programação para facilitar a organização dos projetos deste livro. Você pode ver na Figura n. 8 como ficou, na minha máquina, a seleção do diretório onde o Gambas criou os arquivos do projeto.

6

Page 7: 206_gambas

Desenvolvendo aplicações para Linux utilizando Gambas – Ubiraci Lage Brandão Júnior

Figura n. 8 – Escolher o diretório onde o Gambas irá criar os arquivos

Após escolher onde o Gambas irá criar os arquivos do projeto, clique em Próximo e nós teremos a última tela do assistente. Nesta última tela o Gambas irá mostrar um resumo das opções escolhidas por nós. Caso você desejar mudar alguma opção, clique no botão Anterior para voltar um passo atrás. Caso esteja tudo certo clique em Ok. A tela do resumo pode ser vista na Figura n. 9:

7

Page 8: 206_gambas

Desenvolvendo aplicações para Linux utilizando Gambas – Ubiraci Lage Brandão Júnior

Figura n. 9 – Resumo das opções escolhidas no assistente

Clique em Ok para que o Gambas crie um projeto novo, baseado nas escolhas feitas por você no assistente. Se tudo deu certo você deve estar com várias janelas que foram abertas. Como nós escolhemos um projeto em branco, não há nenhuma janela (Form) criada. Nós iremos adicionar as janelas (Form) ainda. Antes, vamos mostrar a janela principal do Gambas, onde nós podemos interagir com a maioria dos comandos. A janela principal do Gambas pode ser vista na Figura n. 10:

Figura n. 10 – Janela Principal do Gambas

8

Page 9: 206_gambas

Desenvolvendo aplicações para Linux utilizando Gambas – Ubiraci Lage Brandão Júnior

Esta é a janela principal do Gambas. Aqui nós podemos gerenciar o nosso projeto: Criar e editar Janelas (Form), classes, módulos, inserir outros arquivos como imagens, sons, selecionar e definir um banco de dados, gerar o executável da aplicação, gerar o pacote de distribuição entre diversas outras funcionalidades.

Obs. A partir de agora, todas as janelas que fazem parte da nossa aplicação, serão chamadas de Formulários ou simplesmente Form.

Vamos criar a nossa primeira e única janela (que será a janela principal da Calculadora); para isso, devemos clicar no item Formulários, para selecioná-lo, e depois clicar com o botão direito sobre ele para aparecer o menu de contexto. No menu de contexto que aparece, escolha Novo -> Formulário. Selecionado este item de menu, entramos no assistente para criação de novos formulários.

A informação mais importante deste assistente é o nome do formulário. Todo formulário no Gambas deve ter um nome único. Vamos seguir também uma convenção para a criação de formulários. Vamos utilizar o prefixo Frm para cada formulário que nós criarmos. O próprio Gambas já sabe desta convenção pois, já sugere o nome Form1, deixando todas as letras selecionadas, com exceção da primeira. Sinal de que o Gambas sabe que você vai criar um nome que começa por F de Formulário. Vamos analisar outras coisas que podemos fazer neste assistente. Primeiro, ele é dividido em abas. Na primeira aba você cria um formulário novo e na segunda, pode incluir um formulário existente que você pode ter criado em outro projeto e deseja incluir neste. Como nós ainda não temos nenhum projeto, vamos utilizar a primeira aba. Algumas opções que a primeira aba tem são:

1. Classe Inicial

2. Gerenciamento padrão de diálogo

3. Constructor

4. Destructor

5. Static Constructor

6. Static Destructor

Não vamos detalhar estas opções agora. Basta saber que cada aplicação em Gambas deve ter apenas um formulário com o atributo Classe Inicial. Este será o chamado Formulário Principal da aplicação. Este formulário, quando fechado, encerra a aplicação. Como a nossa aplicação é bem simples e vai ter somente um formulário, este será o nosso formulário principal. Por isso o Gambas já deixa marcado por padrão a opção Classe Inicial para o primeiro formulário criado na aplicação. Para criarmos nosso formulário, devemos apenas alterar o nome do formulário. Digite o nome FrmCalculadora e depois clique em Ok. Nesta hora, o Gambas criou o seu primeiro formulário. Dependendo das opções de visualização que estiverem configuradas na sua versão do Gambas, pode ser que esteja aparecendo somente o formulário ou também esteja aparecendo a classe associada ao formulário. Nós vamos ver tudo isto. A imagem final da tela do assistente, para a criação do nosso primeiro formulário, pode ser vista na Figura n. 11:

9

Page 10: 206_gambas

Desenvolvendo aplicações para Linux utilizando Gambas – Ubiraci Lage Brandão Júnior

Figura n. 11 – Assistente para a criação de Formulários

Após você ter digitado o nome do formulário e confirmado a sua criação, o Gambas cria um formulário vazio, que será o nosso ponto de partida para desenhar a janela da aplicação. Se você fez todos os passos descritos acima você deve ver a imagem da Figura n. 12 que mostra o formulário que o Gambas criou.

Figura n. 12 – Formulário gerado pelo Gambas

10

Page 11: 206_gambas

Desenvolvendo aplicações para Linux utilizando Gambas – Ubiraci Lage Brandão Júnior

Antes de iniciarmos o desenho de nossa aplicação devemos conhecer algumas janelas do Gambas.

Temos, na Figura n.13, a janela da Caixa de Ferramentas, que é a janela onde estão os componentes visuais que nós iremos utilizar para desenhar a nossa aplicação. Todos os componentes desta janela são tratados pelo Gambas como objetos, que têm características próprias e ações que podem ser realizadas. Nesta janela há três abas de componentes visuais quepodem ser utilizados para o desenho de nossa aplicação. De uma forma bemsuperficial, a Caixa de Ferramentas é a janela que mais utilizaremos em qualquer projeto, junto com a janela de propriedades.

Figura n. 13 – Caixa de Ferramentas

Figura n. 14 – Janela de Propriedades

Na Figura n. 14, é mostrada a janela de propriedades, que é uma janela onde nós podemos alterar os atributos de um objeto selecionado. Esta, sem dúvidas, é a janela mais utilizada do Gambas pois, para cada controle adicionado ao Formulário é necessário a alteração de pelo menos uma propriedade. Cada controle visual que nós utilizarmos para desenhar o formulário, é interpretado pelo Gambas como sendo um objeto, com propriedades e eventos. O enfoque deste livro não é ensinar programação orientada a objetos, por isso, só irei dar breves definições sobre o assunto. Se você deseja se aprofundar melhor neste assunto, procure um livro especializado em Programação Orientada a Objetos.

A janela de propriedades tem conteúdo dinâmico, ou seja, se estiver selecionado, por exemplo, o Formulário (que também é um objeto), a janela de propriedades irá mostrar todas as características que podem ser alteradas no Formulário; agora se o controle selecionado for um botão, a

janela de propriedades irá mostrar o que pode ser alterado no botão. Para não me aprofundar muito

11

Page 12: 206_gambas

Desenvolvendo aplicações para Linux utilizando Gambas – Ubiraci Lage Brandão Júnior

na programação orientada a objetos, basta saber que propriedades são as características que podem ser alteradas em um objeto e eventos são as ações que podem ser realizadas sobre o objeto. Estes conceitos serão melhor entendidos quando estivermos na prática implementando a nossa calculadora.

Antes de iniciarmos propriamente dito a implementação da nossa calculadora, devo falar sobre alguns conceitos de programação que são importantes e que nós iremos utilizar em todos os projetos deste livro. Estes conceitos que irei abordar agora são comuns a todas as linguagens de programação, seja em ambiente Linux, Windows, Mac, ou qualquer outro sistema operacional. Veremos agora o conceito de variáveis, operadores, tipos de dados, entre outros conceitos que são de suma importância para que você possa prosseguir na leitura deste livro e conseguir ter um rendimento satisfatório. Se você já tem prática de programação em outra linguagem ou se já sabe estes conceitos, você pode pular esta parte e ir direto à continuação do projeto, quando eu realmente inicio o desenho da tela e sua posterior implementação; agora se você não sabe programar ou não sabe do que estou falando, esta seção será muito importante para que você possa compreender os tópicos posteriores deste livro.

Alguns conceitos importantes em programação

Um dos conceitos mais básicos que nós temos de aprender é o conceito de tipo de dados. Existem diversos tipos de informações na vida real; palavras, frases, letras, números, entre outros. Para conseguir representar todos os tipos de dados o computador precisa classifica-los e montar categorias. Os tipos de dados que têm semelhanças, pertencem à mesma categoria ou a uma categoria próxima; em compensação, outros tipos são de características bem diferentes, sendo classificados em outra categoria. A maioria das linguagens de programação implementam os tipos de dados que o computador pode representar. Cada linguagem representa os mesmos tipos de dados de forma diferente. Vamos ver os tipos de dados suportados pelo Gambas:

Nome Descrição Tamanho na Memória Valor PadrãoBoolean Verdadeiro ou Falso

(True ou False)1 byte Falso (False)

Byte 0..255 1 byte 0Short -32768..+32767 2 bytes 0Integer -2147483648 ...

+21474836474 bytes 0

Float Igual ao tipo Double no C

8 bytes 0,0

Date Data e hora, cada um armazenado em um inteiro

8 bytes Null

String Uma palavra ou frase 4 bytes NullVariant Qualquer tipo de dado 12 bytes NullObject Uma referencia anonima

para um objeto4 bytes Null

Estes dados foram retirados da ajuda on-line do Gambas. Aqui cabe algumas explicações:

12

Page 13: 206_gambas

Desenvolvendo aplicações para Linux utilizando Gambas – Ubiraci Lage Brandão Júnior

• O tipo Boolean é um tipo especial de inteiro. Internamente o computador representa o tipo Boolean como sendo um inteiro entre os valores 0 e 1. O valor 0 representa o valor lógico Falso e o valor 1 representa o valor lógico Verdadeiro. O Gambas tem definido duas constantes para facilitar o trabalho com Boolean: False e True, ou seja, Falso e Verdadeiro. Sempre que você trabalhar com variáveis do tipo Boolean, você deve utilizar as constantes False e True.

• O tipo Byte é um inteiro que armazena valores de 0 a 255. É um tipo de dado econômico pois, consome apenas 1 byte de memória. Para situações onde você não vai necessitar de valores maiores de 255, o tipo Byte é o mais indicado.

• O tipo Short também é um tipo inteiro mas sua faixa de valores é maior: vai de -32768 a +32767. Por ocupar uma faixa maior de números ele ocupa o dobro de espaço na memória, em relação ao tipo Byte.

• O tipo Integer é o tipo inteiro maior que existe tendo como faixa de valores de -2147483648 a +2147483647. Por ocupar uma faixa muito maior que o Short, ocupa também o dobro de espaço na memória.

• O tipo Float é o tipo utilizado para representar valores fracionados. É equivalente ao tipo Double da linguagem C e ocupa uma faixa muito grande, bem maior que a do tipo Integer. Por causa disto também ocupa o dobro em espaço na memória em relação ao tipo Integer.

• O tipo Date é um tipo especial de Float; é formado por 2 inteiros separados pelo ponto decimal (ou seja, é um número fracionário). A parte inteira que fica a esquerda do ponto decimal representa a Data e a parte inteira que fica a direita do ponto decimal representa a hora.

• O tipo string representa uma letra, uma palavra ou uma frase.

• O tipo Variant é um tipo especial e só deve ser utilizado em raríssimas ocasiões. É um tipo de dado que pode representar qualquer dos outros tipos suportados pelo Gambas. Por isso mesmo é o mais dispendioso pois, o Gambas não sabe com que tipo de dados ele vai trabalhar. É o tipo de dados que mais utiliza espaço em memória.

• O tipo object, representa geralmente um componente visual, um controle ou uma classe na memória do computador. É utilizado para que possamos manipular os controles visuais em tempo de execução.

Um outro conceito importante é o de variável. Variável é uma área da memória do computador que é associada a um nome e a um tipo de dados. Vejamos o que acontece quando nós declaramos uma variável de nome $Nome do tipo String:

1. Quando é declarada a variável o Gambas cria uma área na memória (que ele sabe qual é o endereço) e associa ao nome $MinhaVariavel (no caso do exemplo)

2. Como você, na hora da declaração, teve de informar ao Gambas que tipo de dados é a sua variável, o Gambas também já sabe quanto de memória ele vai utilizar para a sua criação

3. Quando você quiser guardar algum valor na variável você irá passar o valor para $MinhaVariavel e o Gambas irá guardar o valor na área de memória correta destinada a esta variável

4. A mesma coisa quando você quiser consultar o valor atual da variável

13

Page 14: 206_gambas

Desenvolvendo aplicações para Linux utilizando Gambas – Ubiraci Lage Brandão Júnior

Vejamos um exemplo de declaração em Gambas:

Dim $MinhaVariavel as String

$MinhaVariavel = “Carlos”

if $MinhaVariavel = “Maria” then

$MinhaVariavel = “José”

End if

Neste exemplo eu declarei uma variável de nome $MinhaVariavel do tipo String. Quando é declarada a variável, o Gambas cria uma área de memória associada ao nome da variável. Note que quando a variável é criada, ela ainda não tem valor nenhum. Na segunda linha eu estou guardando (atribuindo) um valor na variável (meu valor é a palavra “Carlos”). Reparem que a palavra foi passada entre aspas duplas. Todas as strings devem ser passadas entre aspas duplas. Outra coisa que o leitor deve reparar é que, como a variável é criada sem nenhum valor, devemos inicializa-la com algum valor antes de podermos utiliza-la. Na terceira linha eu faço um comando condicional: se o valor atual da variável $MinhaVariavel for igual a “Maria”, então eu guardo um novo valor na variável (o novo valor é “José”). Quando você acrescenta um novo valor a uma variável, o Gambas substitui o valor atual pelo novo valor, ou seja, o valor anterior é perdido.

Quanto aos operadores, Gambas suporta a maioria dos operadores que as outras linguagens de programação suportam:

1. Operadores Relacionais

• Igualdade (=)

• Desigualdade (<>)

• Menor que (<)

• Maior que (>)

• Menor que ou igual a (<=)

• Maior que ou igual a (>=)

2. Operadores Matemáticos

• Adição (+)

• Subtração (-)

• Multiplicação (*)

• Divisão (/)

• Potenciação (^)

• Retorna o quociente entre dois números (\)

• Retorna o resto de uma divisão (MOD)

14

Page 15: 206_gambas

Desenvolvendo aplicações para Linux utilizando Gambas – Ubiraci Lage Brandão Júnior

Gambas também inclui seqüências Escape como na linguagem C:

1. Nova linha (\n)

2. Retorno de carro (\r)

3. Tabulação (\t)

4. Aspas duplas (\”)

5. Barra invertida (\\)

Todas as estruturas condicionais e de controle que pertenciam ao Basic e ao Visual Basic são implementadas por Gambas:

1. if..then..end if

2. Select Case...end Select

3. for..next

Estas foram apenas algumas das estruturas. Há muito mais a ver. Nós já vimos a estrutura if sendo aplicada no exemplo que demos anteriormente sobre declaração de variáveis. Durante este projeto e nos próximos, nós iremos explorar todas estas diferentes estruturas.

Todos estes conceitos podem, num primeiro momento, parecer complicados mas, você não precisa se preocupar em decorá-los; à medida que nós formos criando as aplicações, iremos falar das funções, procedimentos, e de qualquer item não falado até agora. Você irá aprender gradativamente, enquanto cria aplicações profissionais utilizando o Gambas.

Continuando o desenvolvimento da Calculadora

Vamos dar continuidade ao desenvolvimento de nossa calculadora. Vamos colocar no formulário 19 componentes do tipo Button e 1 componente do tipo Label. Vamos redimensionar os componentes para que fiquem com a aparência da Figura n. 15.

15

Page 16: 206_gambas

Desenvolvendo aplicações para Linux utilizando Gambas – Ubiraci Lage Brandão Júnior

Figura n. 15 – Formulário

com os componentes

Basicamente esta vai ser a nossa interface visual para a calculadora. Devemos alterar algumas propriedades dos componentes para iniciarmos o desenvolvimento propriamente dito. Abaixo estão os nomes dos componentes e o valor de algumas propriedades que devemos alterar:

Qual Componente Name Text FontBotão n. 1 btn0 0 Bitstream Vera Sans +5Botão n. 2 btn1 1 Bitstream Vera Sans +5Botão n. 3 btn2 2 Bitstream Vera Sans +5Botão n. 4 btn3 3 Bitstream Vera Sans +5Botão n. 5 btn4 4 Bitstream Vera Sans +5Botão n. 6 btn5 5 Bitstream Vera Sans +5Botão n. 7 btn6 6 Bitstream Vera Sans +5Botão n. 8 btn7 7 Bitstream Vera Sans +5Botão n. 9 btn8 8 Bitstream Vera Sans +5Botão n. 10 btn9 9 Bitstream Vera Sans +5Botão n. 11 btnIgual = Bitstream Vera Sans +5Botão n. 12 btnDivisao / Bitstream Vera Sans +5Botão n. 13 btnMultiplicacao * Bitstream Vera Sans +5Botão n. 14 btnSubtracao - Bitstream Vera Sans +5Botão n. 15 btnAdicao + Bitstream Vera Sans +5Botão n. 16 btnFechar Fechar Bitstream Vera Sans +3Botão n. 17 btnC C Bitstream Vera Sans +3Botão n. 18 btnCE CE Bitstream Vera Sans +3Botão n. 19 btnPonto . Bitstream Vera Sans +5Label lblVisor 0 Bitstream Vera Sans +2

Com estas alterações, nós nomeamos todos os nossos componentes. Este passo é importante

16

Page 17: 206_gambas

Desenvolvendo aplicações para Linux utilizando Gambas – Ubiraci Lage Brandão Júnior

porque, durante o código, nós iremos nos referenciar aos componentes pelo seu nome. É uma boa prática de programação, nomear os componentes. Como regra geral, você deve nomear todos os componentes que vão ser referenciados no código. Se você tiver algum componente em um formulário, que não será acessado pelo código, se quiser, pode deixar com o nome padrão; porém, se quiser nomeá-los, não há nenhum problema.

Obs. Para alterar uma propriedade qualquer de um componente, você deve primeiro selecionar o componente. Após isto, vá à janela de propriedades e selecione a propriedade que deseja alterar. Altere o valor da propriedade na janela de propriedades.

Vamos agora aprender como mudar a propriedade de vários componentes juntos ao mesmo tempo. Pelo que você já aprendeu até agora, quando você seleciona um componente, as propriedades que podemos alterar nele são mostradas na janela de propriedades. Quando selecionamos vários componentes, as propriedades comuns aos componentes selecionados serão mostradas na janela de propriedades. Por exemplo, se selecionamos componentes do mesmo tipo, aparecerão todas as propriedades do componente pois, os componentes selecionados são do mesmo tipo; agora se selecionamos componentes de tipos diferentes, somente as propriedades comuns serão mostradas. Ao alterar uma propriedade, quando dois ou mais componentes estão selecionados, estamos alterando esta propriedade para cada um dos componentes selecionadas. Vamos fazer isto agora. Clique com o mouse sobre o botão zero da calculadora. Com este primeiro componente selecionado, aperte a tecla Control (ctrl) e mantenha pressionada. Agora dê um clique com o mouse em cada um dos botões, com exceção do botão btnIgual, enquanto segura a tecla ctrl. Após selecionar os botões pode soltar a tecla ctrl. Se tudo deu certo, você deve ter selecionado todos os componentes de botões com exceção do botão btnIgual.. Vá para a janela de propriedades e altere a propriedade Group para Digitos. Após alterar a propriedade, dê um clique com o mouse em uma área vazia do formulário para selecionar o formulário. Você acabou de alterar a propriedade Group para quase todos os botões do formulário, ao mesmo tempo. Esta propriedade tem por finalidade criar um grupo de componentes onde, podemos associar um procedimento que será executado sobre o grupo, ou seja, um único procedimento que será compartilhado por todos do grupo. Note que não são todos os componentes que pertencem ao grupo; somente os que nós selecionamos e alteramos sua propriedade Group. Os demais componentes, não pertencem a grupo nenhum.

Vamos dar inicio à codificação de nossa aplicação. Primeiro vamos declarar algumas variáveis que nós iremos utilizar na calculadora. Para isso, com o formulário selecionado, digite no teclado ctrl+W para irmos para a tela de código. Digite as declarações de variáveis mostradas na listagem abaixo:

PRIVATE $NumAnt AS Float ' Esta variável armazenará o primeiro operando

PRIVATE $UltimoOperando AS Float ' Esta variável armazenará o último operando

PRIVATE $operacao AS String ' Esta variável armazenará a operação

PRIVATE $UltimoOperador AS String ' Esta variável armazenará o último operador

PRIVATE $blnCEClicado AS Boolean ' Esta variável armazena se o botão CE foi clicado

17

Page 18: 206_gambas

Desenvolvendo aplicações para Linux utilizando Gambas – Ubiraci Lage Brandão Júnior

A diretiva Private antes do nome da variável, informa que estas variáveis são para uso privado, ou seja, somente este formulário pode utilizar estas variáveis. Se eu quisesse que outros formulários pudessem acessar estas variáveis, eu declararia elas com a diretiva Public, deixando-as públicas. Agora vamos voltar ao formulário digitando outra vez a seqüência de teclas ctrl+W. Clique com o mouse em uma area vazia do formulário para seleciona-lo e clique com o botão direito sobre ele. Será aberto um menu com diversas opções. Selecione o item Evento -> Open. Será aberto a janela de códigos novamente com parte do procedimento Open criado. Este método é executado sempre que a calculadora é iniciada. É um local apropriado para inicializar as variáveis que criamos a pouco. Digite no procedimento Open:

PUBLIC SUB Form_Open()

$operacao = ""

$UltimoOperador = ""

$UltimoOperando = 0

$NumAnt = 0

$blnCEClicado = FALSE

btnFechar.SetFocus

END

Este código inicializa as variáveis com valores padrão e faz o foco de entrada cair sobre o botão fechar. O controle com o foco é o controle que primeiro recebe os pressionamentos de tecla e cliques do mouse. Com este código, assim que a Calculadora é iniciada o foco vai para o botão Fechar. Neste momento, se você quiser, pode salvar as alterações que fizemos. Podemos ver como está nossa calculadora até agora. Tecle F5 para que o Gambas possa executar nossa calculadora.

Obs. Neste livro sempre que for utilizado o termo método, este termo estará se referindo à uma função ou a um procedimento.

Existem dois modos de se executar um programa em Gambas. Primeiro é desta forma como você está fazendo agora (teclando F5); o segundo modo é mandar o Gambas gerar o executável. No momento nós estamos pedindo ao Gambas para interpretar o programa e executá-lo. Este geralmente é o meio mais prático para nós que estamos desenvolvendo o programa. Quando o programa estiver pronto, podemos mandar o Gambas gerar o executável e depois gerar o pacote de instalação.

Uma nota sobre esta segunda forma de executar o programa, é que, para se executar um programa Gambas, mesmo a partir do executável gerado, é necessário que seja distribuído o interpretador Gambas; ou seja, para você executar um programa Gambas, no mínimo, o

18

Page 19: 206_gambas

Desenvolvendo aplicações para Linux utilizando Gambas – Ubiraci Lage Brandão Júnior

interpretador deve estar instalado. O que a maioria das pessoas estão fazendo é instalar o Gambas completo na máquina do cliente. Não é um programa grande (o arquivo de instalação tem mais ou menos uns 7 MB) e você está dando a oportunidade do cliente conhecer esta ferramenta também, mesmo que o cliente não se interesse por programação. É muito comum em muitas distribuições Linux virem diversas ferramentas de desenvolvimento; o Gambas seria apenas mais uma, mesmo que o cliente só a tenha instalado para rodar o executável. Mas, como dito anteriormente, não é obrigado você instalar o Gambas na máquina cliente; basta o interpretador e algumas bibliotecas que o programa necessite para o correto funcionamento.

Uma outra observação, para quem vem da plataforma da Microsoft, é que os executáveis gerados pelo Gambas não têm a extensão .Exe e sim .gambas; ou seja, no DOS você teria um programa chamado Prog1.exe e em Gambas você teria um programa chamado Prog1.gambas.

Existe também uma particularidade com relação à criação de Links para o aplicativo gerado. Deve ser passado ao interpretador do Gambas o caminho completo para o diretório do projeto sem passar o nome do arquivo. O Gambas já sabe que o nome do executável tem o mesmo nome do projeto; por isso basta informar o diretório do projeto. Na verdade, se você passar o nome do arquivo .gambas, o interpretador não vai conseguir executar o programa porque ele vai procurar um diretório com o nome passado e não vai encontrar. Para um exemplo prático mande o Gambas gerar o executável. Agora vá no Desktop do Kurumin e crie um Link para a aplicação. Quando você for informar a linha de comando para o Link informe passando o diretório completo da sua aplicação, sem o nome do programa. Não esqueça que antes de passar o caminho você tem de passar o nome do interpretador, que na verdade é o nome do programa que executa o projeto, que será passado como parâmetro. Aqui na minha máquina a linha de comando para o Link ficou assim:

/usr/bin/gbx2 /home/kurumin/”Meus Documentos”/Programacao/gmbCalculadora

Como vocês podem ver, eu passei primeiro o caminho completo junto com o nome do interpretador Gambas (gbx2), para o Kurumin saber qual o programa que irá ser executado (no caso o interpretador Gambas); depois passei o caminho completo do meu projeto, que está localizado em /home/kurumin/Meus Documentos/Programacao/gmbCalculadora. Notem que foi passado um caminho de um diretório. Dentro de gmbCalculadora estão os arquivos do projeto junto com o executável. Também foi necessário colocar aspas entre o inicio e o fim do diretório Meus Documentos, por se tratar de um diretório que contém espaços. Se você utilizou outro diretório para gravar o seu projeto e nenhum dos diretórios possui espaços no nome, você não precisa utilizar as aspas. Feche o Gambas, somente para teste, e execute o programa pelo Link criado. Você verá que o programa executou normalmente apesar da IDE do Gambas não estar ativa. Somente o interpretador está em funcionamento neste momento. Feche o aplicativo, abra novamente o Gambas e vamos continuar com o desenvolvimento da nossa calculadora.

Agora vamos criar um procedimento muito importante neste projeto. Este procedimento será responsável por atualizar o visor da calculadora e alterar o valor de algumas variáveis. É o coração do programa. Vá para a janela de código e digite a seguinte linha:

PUBLIC SUB DigitosClick(Texto AS String)

19

Page 20: 206_gambas

Desenvolvendo aplicações para Linux utilizando Gambas – Ubiraci Lage Brandão Júnior

Após digitar tecle enter. O Gambas completou a declaração e está esperando que nós continuemos com a implementação do método. Este método é muito longo portanto, irei escrevendo por partes e explicando. Digite no procedimento:

PUBLIC SUB DigitosClick(Texto AS String)

IF ((Texto = "+") OR (Texto = "-") OR (Texto = "x") OR (Texto = "/") OR (Texto = "*")) THEN

ExecutaIgual

$NumAnt = CFloat(lblVisor.Text)

$operacao = Texto

$UltimoOperador = Texto

ELSE

Neste começo do procedimento, é verificado se o parâmetro Texto é igual a uma das quatro operações matemáticas. Se for, realiza a operação, atualiza o visor com o resultado da operação e armazena nas variáveis qual foi a operação escolhida, qual o último operador, e armazena o último número. Foi utilizado neste trecho de código a função CFloat do Gambas que converte um valor string em Float. Continuando com o procedimento, continue digitando a seqüência:

IF ((Texto <> "C") AND (Texto <> "CE") AND (Texto <> "Fechar")) THEN

IF ($operacao = "") AND (lblVisor.Text <> "0") THEN

' O usuário está digitando um número

IF (Texto = ".") OR (Texto = ",") THEN

IF (InStr(lblVisor.Text, ".") = 0) AND (InStr(lblVisor.Text, ",") = 0) THEN

lblVisor.Text = lblVisor.Text & "."

END IF

ELSE

lblVisor.Text = lblVisor.Text & Texto

END IF

ELSE IF ($operacao = "") AND (lblVisor.Text = "0") THEN

' É a primeira vez que o usuário está digitando o número ou ele acabou de realizar

' uma operação e clicou no botão C para zerar os valores

lblVisor.Text = ""

IF (Texto = ".") OR (Texto = ",") THEN

lblVisor.Text = "0" & Texto

ELSE

20

Page 21: 206_gambas

Desenvolvendo aplicações para Linux utilizando Gambas – Ubiraci Lage Brandão Júnior

lblVisor.Text = lblVisor.Text & Texto

END IF

ELSE

' Se a operação não é nula, verifica se o número que se encontra no visor é igual

' ao número anterior. Se for, limpa o visor

IF (CFloat(lblVisor.Text) = $NumAnt) THEN

lblVisor.Text = ""

END IF

' Verifica se o botão CE foi clicado. Caso tenha sido, configura o valor da variável

' blnCEClicado para Falso e limpa o conteúdo do visor

IF $blnCEClicado THEN

$blnCEClicado = FALSE

lblVisor.Text = ""

END IF

' Atualiza no visor o número digitado pelo usuário

IF (Texto = ".") OR (Texto = ",") THEN

lblVisor.Text = "0" & Texto

ELSE

lblVisor.Text = lblVisor.Text & Texto

END IF

END IF

ELSE

O código está bem comentado mas o que esta parte do procedimento faz é atualizar o visor da calculadora quando um número de 0 a 9 é digitado. Também é esta parte do código que verifica se foi digitado uma vírgula. Caso já tenha uma vírgula ou ponto decimal, não deixa a inclusão de outro. Aqui também foi utilizado outra função do Gambas chamada InStr. Esta função pesquisa se uma determinada string está inserida dentro de outra. Recebe dois parâmetros string: o primeiro a string origem da pesquisa e o segundo a string a ser pesquisada. Se a função consegue encontrar a string a ser pesquisada dentro da string de origem, InStr retorna um valor inteiro representando o índice para primeiro caractere da string a ser pesquisada, dentro da string de origem. Se InStr não encontra a string a ser pesquisada, InStr retorna 0. Continuando:

IF Texto = "C" THEN

' O botão C foi clicado

21

Page 22: 206_gambas

Desenvolvendo aplicações para Linux utilizando Gambas – Ubiraci Lage Brandão Júnior

lblVisor.Text = "0"

$NumAnt = 0

$operacao = ""

$UltimoOperando = 0

ELSE IF Texto = "CE" THEN

' O botão CE foi clicado

IF $operacao <> "" THEN

lblVisor.Text = "0"

$blnCEClicado = TRUE

END IF

ELSE IF Texto = "Fechar" THEN

' O botão Fechar foi clicado

ME.Close

END IF

END IF

END IF

END

Esta parte final do procedimento, verifica se o parâmetro passado é igual a “C”. Se for, limpa a operação anterior e volta as variáveis ao seu estado original; se o parâmetro passado for “CE”, então deve ser anulada apenas a última operação; se o parâmetro passado for “Fechar” então o sistema é encerrado. O objetivo deste procedimento é ter em um local apenas a lógica de apresentação dos valores no visor, além de dar a possibilidade de poder executar via programação passando qual o botão que foi clicacdo.

Obs. Em qualquer parte do código, quando for encontrado um objeto com o nome ME, este se refere sempre ao objeto atual, seja o formulário, botão ou qualquer outro objeto. O uso comum deste objeto é ser uma referência ao formulário atual.

Agora vamos implementar o procedimento associado ao botão btnIgual. Este procedimento será o responsável por realizar o calculo, apresentar o resultado no visor, limpar a operação atual e armazenar o último número mostrado no visor da calculadora. Para isso, vá até o formulário e clique duplo sobre o botão btnIgual. Será criado o procedimento de clique do botão btnIgual. Implemente este procedimento conforme a listagem abaixo:

22

Page 23: 206_gambas

Desenvolvendo aplicações para Linux utilizando Gambas – Ubiraci Lage Brandão Júnior

PUBLIC SUB btnIgual_Click()

DIM $Result AS Float

IF $operacao = "" THEN

$operacao = $UltimoOperador

SELECT CASE $operacao

CASE "+"

$Result = $NumAnt + $UltimoOperando

CASE "-"

$Result = $NumAnt - $UltimoOperando

CASE "x", "*"

$Result = $NumAnt * $UltimoOperando

CASE "/"

IF $UltimoOperando <> 0 THEN

$Result = $NumAnt / $UltimoOperando

ELSE

message.Info("Não é permitido a divisão por zero")

lblVisor.Text = $NumAnt

$operacao = ""

RETURN

END IF

END SELECT

ELSE

IF ($NumAnt = 0) THEN

$NumAnt = CFloat(lblVisor.Text)

END IF

SELECT CASE $operacao

CASE "+"

$Result = $NumAnt + CFloat(lblVisor.Text)

CASE "-"

$Result = $NumAnt - CFloat(lblVisor.Text)

CASE "x", "*"

23

Page 24: 206_gambas

Desenvolvendo aplicações para Linux utilizando Gambas – Ubiraci Lage Brandão Júnior

$Result = $NumAnt * CFloat(lblVisor.Text)

CASE "/"

IF (CFloat(lblVisor.Text) <> 0) THEN

$Result = $NumAnt / CFloat(lblVisor.Text)

ELSE

message.Info("Não é permitido a divisão por zero")

lblVisor.Text = $NumAnt

$operacao = ""

RETURN

END IF

END SELECT

$UltimoOperando = CFloat(lblVisor.Text) ' Para ficar sabendo qual é o último operando

END IF

$UltimoOperador = $operacao ' Para saber qual a última operação realizada com o número

lblVisor.Text = $Result ' Armazena o resultado no visor

$operacao = "" ' Limpa o operador

' Armazena o resultado na variável$NumAnt para poder realizar novos cálculos baseados

' no resultado desta variável

$NumAnt = $Result

END

Como podemos ver, este procedimento realiza o calculo e armazena o resultado nas variáveis, mostrando também o resultado no visor. Foi apresentado também neste procedimento a classe message que representa a forma como nós iremos apresentar caixas de mensagem ao usuário. Esta classe implementa diversas caixas de mensagem. Nós utilizamos a caixa de mensagens de informações (Info) para mostrar uma mensagem com apenas um botão de confirmação e o ícone de informação.

Vamos agora criar um procedimento que quando chamado, verifica primeiro se foi selecionado alguma operação, e em caso positivo, chama o procedimento associado ao botão btnIgual. Este procedimento é chamado dentro do procedimento DigitosClick que nós implementamos a pouco. Digite o procedimento com base na listagem abaixo:

24

Page 25: 206_gambas

Desenvolvendo aplicações para Linux utilizando Gambas – Ubiraci Lage Brandão Júnior

PRIVATE SUB ExecutaIgual()

IF $operacao <> "" THEN

btnIgual_Click

END IF

END

Agora, com qualquer um dos botões do grupo “Digitos” selecionado, clique com o botão direito, selecione Evento -> KeyPress. Com estas ações, nós iremos implementar o procedimento KeyPress para o grupo “Digitos”, ou seja, todos os botões do grupo terão o mesmo evento KeyPress. Implemente conforme a listagem abaixo:

PUBLIC SUB Digitos_KeyPress()

Form_KeyPress

END

Este evento apenas chama o evento KeyPress do formulário. Vamos agora fazer a mesma coisa para o procedimento KeyPress do botão btnIgual. Implemente conforme a listagem a baixo:

PUBLIC SUB btnIgual_KeyPress()

Form_KeyPress

END

Este evento também faz a mesma coisa que o procedimento KeyPress do grupo “Digitos”, ou seja, chama o procedimento KeyPress do Formulário.

Vamos agora implementar o procedimento de Click nos botões do grupo “Digitos”. Selecione qualquer um dos botões do grupo “Digitos”, clique com o botão direito e selecione Evento -> Click ou dê um clique duplo no botão. Será gerado uma parte do procedimento de clique. Termine a implementação deste método baseado na listagem abaixo:

25

Page 26: 206_gambas

Desenvolvendo aplicações para Linux utilizando Gambas – Ubiraci Lage Brandão Júnior

PUBLIC SUB Digitos_Click()

DigitosClick(LAST.Text)

END

O que nós fizemos neste procedimento é chamar o procedimento DigitosClick que nós criamos antes. O parâmetro que está sendo passado é Last que equivale a passar o último objeto do grupo. Como estamos passando Last.Text, estamos passando o texto do último botão selecionado. Lembra quando eu falei anteriormente que aquele método (DigitosClick) era o coração do programa? Ele é chamado a cada clique nos botões e posteriormente, quando o usuário teclar algum número no teclado, este método será chamado via programação, passando o botão que foi clicado.

Bom, agora vamos implementar o último método que ainda falta ser implementado. Iremos programar o evento KeyPress do formulário. Lembra que o evento KeyPress do grupo “Digitos” e o evento KeyPress do botão btnIgual apenas chamam este evento? Então vamos clicar com o botão direito no formulário e selecionar o item Evento -> KeyPress para o Gambas gerar o procedimento KeyPress para o formulário. Termine a implementação deste método, baseado na listagem abaixo:

PUBLIC SUB Form_KeyPress()

' Mantém compatibilidade com o teclado. O usuário poderá utilizar o teclado para

' digitar os números

SELECT CASE Key.Code

CASE Key["1"]

DigitosClick("1")

CASE Key["2"]

DigitosClick("2")

CASE key["3"]

DigitosClick("3")

CASE key["4"]

DigitosClick("4")

CASE key["5"]

DigitosClick("5")

CASE key["6"]

DigitosClick("6")

CASE key["7"]

DigitosClick("7")

26

Page 27: 206_gambas

Desenvolvendo aplicações para Linux utilizando Gambas – Ubiraci Lage Brandão Júnior

CASE key["8"]

DigitosClick("8")

CASE key["9"]

DigitosClick("9")

CASE key["0"]

DigitosClick("0")

CASE key["+"]

DigitosClick("+")

CASE key["-"]

DigitosClick("-")

CASE key["x"]

DigitosClick("x")

CASE key[“X”]

DigitosClick(“x”)

CASE key["*"]

DigitosClick("*")

CASE key["/"]

DigitosClick("/")

CASE key["="]

btnIgual_Click

CASE key["Enter"]

btnIgual_Click

CASE key["Return"]

btnIgual_Click

CASE key["Escape"]

DigitosClick("C")

END SELECT

END

Neste procedimento nós capturamos as teclas pressionadas pelo usuário, utilizando a classe estática key. Classes estáticas, são classes que não precisam ser criadas para nós podermos utilizá-la. Quando criamos uma classe, na verdade estamos instanciando este classe, ou seja, estamos criando uma instância, ou um objeto desta classe na memória. Classes estáticas não são objetos mas, contém métodos que podem ser executados diretamente sobre a classe, sem a necessidade de nós criarmos um objeto desta classe. É claro que a classe estática também está carregada na memória do computador mas, ela não é um objeto. Consulte um livro de programação orientada a objetos para

27

Page 28: 206_gambas

Desenvolvendo aplicações para Linux utilizando Gambas – Ubiraci Lage Brandão Júnior

ter mais informações sobre classes estáticas, virtuais, abstratas, objetos, instâncias, etc. No procedimento, a classe estática key possui uma propriedade chamada Code que contém o código da tecla pressionada. Eu utilizo um Select Case para verificar a tecla pressionada. Neste caso eu acesso a classe como se fosse uma matriz, passando o valor da tecla como uma string. Dependendo da tecla que estou capturando eu chamo ou o procedimento DigitosClick ou o procedimento btnIgual_Click.

Feito isto, nós podemos salvar o projeto e teclar F5 para podermos testar nossa Calculadora. O projeto está acabado. Acabamos de desenvolver nossa primeira aplicação em Gambas. Nos próximos capítulos eu irei desenvolver junto com vocês outros projetos mas, os passos descritos aqui para se criar um novo projeto e salvar, não serão mais abordados com tantos detalhes, visto você já estar mais familiarizado com a ferramenta. Segue na listagem abaixo o código-fonte completo da nossa calculadora:

'

' Programa criado por: Ubiraci Lage Brandão Júnior ([email protected])

' Licensa: GNU/GPL

' Data de Criação: 01/2006

'

PRIVATE $NumAnt AS Float ' Esta variável armazenará o primeiro operando

PRIVATE $UltimoOperando AS Float ' Esta variável armazenará o último operando

PRIVATE $operacao AS String ' Esta variável armazenará a operação

PRIVATE $UltimoOperador AS String ' Esta variável armazenará o último operador

PRIVATE $blnCEClicado AS Boolean ' Esta variável armazena se o botão CE foi clicado

PUBLIC SUB Form_Open()

$operacao = ""

$UltimoOperador = ""

$UltimoOperando = 0

$NumAnt = 0

$blnCEClicado = FALSE

btnFechar.SetFocus

END

PUBLIC SUB DigitosClick(Texto AS String)

28

Page 29: 206_gambas

Desenvolvendo aplicações para Linux utilizando Gambas – Ubiraci Lage Brandão Júnior

IF ((Texto = "+") OR (Texto = "-") OR (Texto = "x") OR (Texto = "/") OR (Texto = "*")) THEN

ExecutaIgual

$NumAnt = CFloat(lblVisor.Text)

$operacao = Texto

$UltimoOperador = Texto

ELSE

IF ((Texto <> "C") AND (Texto <> "CE") AND (Texto <> "Fechar")) THEN

IF ($operacao = "") AND (lblVisor.Text <> "0") THEN

' O usuário está digitando um número

IF (Texto = ".") OR (Texto = ",") THEN

IF (InStr(lblVisor.Text, ".") = 0) AND (InStr(lblVisor.Text, ",") = 0) THEN

lblVisor.Text = lblVisor.Text & "."

END IF

ELSE

lblVisor.Text = lblVisor.Text & Texto

END IF

ELSE IF ($operacao = "") AND (lblVisor.Text = "0") THEN

' É a primeira vez que o usuário está digitando o número ou ele acabou de realizar

' uma operação e clicou no botão C para zerar os valores

lblVisor.Text = ""

IF (Texto = ".") OR (Texto = ",") THEN

lblVisor.Text = "0" & Texto

ELSE

lblVisor.Text = lblVisor.Text & Texto

END IF

ELSE

' Se a operação não é nula, verifica se o número que se encontra no visor é igual

' ao número anterior. Se for, limpa o visor

IF (CFloat(lblVisor.Text) = $NumAnt) THEN

lblVisor.Text = ""

END IF

' Verifica se o botão CE foi clicado. Caso tenha sido, configura o valor da variável

' blnCEClicado para Falso e limpa o conteúdo do visor

29

Page 30: 206_gambas

Desenvolvendo aplicações para Linux utilizando Gambas – Ubiraci Lage Brandão Júnior

IF $blnCEClicado THEN

$blnCEClicado = FALSE

lblVisor.Text = ""

END IF

' Atualiza no visor o número digitado pelo usuário

IF (Texto = ".") OR (Texto = ",") THEN

lblVisor.Text = "0" & Texto

ELSE

lblVisor.Text = lblVisor.Text & Texto

END IF

END IF

ELSE

IF Texto = "C" THEN

' O botão C foi clicado

lblVisor.Text = "0"

$NumAnt = 0

$operacao = ""

$UltimoOperando = 0

ELSE IF Texto = "CE" THEN

' O botão CE foi clicado

IF $operacao <> "" THEN

lblVisor.Text = "0"

$blnCEClicado = TRUE

END IF

ELSE IF Texto = "Fechar" THEN

' O botão Fechar foi clicado

ME.Close

END IF

END IF

END IF

END

PUBLIC SUB btnIgual_Click()

30

Page 31: 206_gambas

Desenvolvendo aplicações para Linux utilizando Gambas – Ubiraci Lage Brandão Júnior

DIM $Result AS Float

IF $operacao = "" THEN

$operacao = $UltimoOperador

SELECT CASE $operacao

CASE "+"

$Result = $NumAnt + $UltimoOperando

CASE "-"

$Result = $NumAnt - $UltimoOperando

CASE "x", "*"

$Result = $NumAnt * $UltimoOperando

CASE "/"

IF $UltimoOperando <> 0 THEN

$Result = $NumAnt / $UltimoOperando

ELSE

message.Info("Não é permitido a divisão por zero")

lblVisor.Text = $NumAnt

$operacao = ""

RETURN

END IF

END SELECT

ELSE

IF ($NumAnt = 0) THEN

$NumAnt = CFloat(lblVisor.Text)

END IF

SELECT CASE $operacao

CASE "+"

$Result = $NumAnt + CFloat(lblVisor.Text)

CASE "-"

$Result = $NumAnt - CFloat(lblVisor.Text)

CASE "x", "*"

$Result = $NumAnt * CFloat(lblVisor.Text)

31

Page 32: 206_gambas

Desenvolvendo aplicações para Linux utilizando Gambas – Ubiraci Lage Brandão Júnior

CASE "/"

IF (CFloat(lblVisor.Text) <> 0) THEN

$Result = $NumAnt / CFloat(lblVisor.Text)

ELSE

message.Info("Não é permitido a divisão por zero")

lblVisor.Text = $NumAnt

$operacao = ""

RETURN

END IF

END SELECT

$UltimoOperando = CFloat(lblVisor.Text) ' Para ficar sabendo qual é o último operando

END IF

$UltimoOperador = $operacao ' Para saber qual a última operação realizada com o número

lblVisor.Text = $Result ' Armazena o resultado no visor

$operacao = "" ' Limpa o operador

' Armazena o resultado na variável$NumAnt para poder realizar novos cálculos baseados

' no resultado desta variável

$NumAnt = $Result

END

PRIVATE SUB ExecutaIgual()

IF $operacao <> "" THEN

btnIgual_Click

END IF

END

PUBLIC SUB Digitos_KeyPress()

32

Page 33: 206_gambas

Desenvolvendo aplicações para Linux utilizando Gambas – Ubiraci Lage Brandão Júnior

Form_KeyPress

END

PUBLIC SUB btnIgual_KeyPress()

Form_KeyPress

END

PUBLIC SUB Digitos_Click()

DigitosClick(LAST.Text)

END

PUBLIC SUB Form_KeyPress()

' Mantém compatibilidade com o teclado. O usuário poderá utilizar o teclado para

' digitar os números

SELECT CASE Key.Code

CASE Key["1"]

DigitosClick("1")

CASE Key["2"]

DigitosClick("2")

CASE key["3"]

DigitosClick("3")

CASE key["4"]

DigitosClick("4")

CASE key["5"]

DigitosClick("5")

CASE key["6"]

DigitosClick("6")

CASE key["7"]

33

Page 34: 206_gambas

Desenvolvendo aplicações para Linux utilizando Gambas – Ubiraci Lage Brandão Júnior

DigitosClick("7")

CASE key["8"]

DigitosClick("8")

CASE key["9"]

DigitosClick("9")

CASE key["0"]

DigitosClick("0")

CASE key["+"]

DigitosClick("+")

CASE key["-"]

DigitosClick("-")

CASE key["x"]

DigitosClick("x")

CASE key[“X”]

DigitosClick(“x”)

CASE key["*"]

DigitosClick("*")

CASE key["/"]

DigitosClick("/")

CASE key["="]

btnIgual_Click

CASE key["Enter"]

btnIgual_Click

CASE key["Return"]

btnIgual_Click

CASE key["Escape"]

DigitosClick("C")

END SELECT

END

Abaixo, na Figura n. 16, temos a janela de código com o código-fonte completo da nossa calculadora.

34

Page 35: 206_gambas

Desenvolvendo aplicações para Linux utilizando Gambas – Ubiraci Lage Brandão Júnior

Figura n. 16 – Janela de código com o código-Fonte da calculadora

35

Page 36: 206_gambas

Desenvolvendo aplicações para Linux utilizando Gambas – Ubiraci Lage Brandão Júnior

Conclusão

Como você deve ter percebido, nós iniciamos um primeiro projeto bem mais audacioso que o famoso “Alô Mundo” que muitos autores abordam. Também deve ter percebido que foi utilizado uma linguagem simples mas que foi exigido do leitor um certo conhecimento em programação pois, o livro não chega a ensinar com detalhes tópicos como: lógica de programação, programação orientada a objetos, utilização de blocos condicionais e de laço que são comuns a diversas outras linguagens, entre outros pequenos conhecimentos como por exemplo, saber utilizar o sistema operacional Linux. No próximo projeto iremos desenvolver um jogo simples, para provar que com Gambas, dá para fazer qualquer tipo de aplicação.

Ubiraci Lage Brandão Júnior – Com larga experiência no desenvolvimento de sistemas comerciais, desde 1995 implementa sistemas utilizando a linguagem de programação Delphi. Atualmente é desenvolvedor de uma software-house do interior paulista, na cidade de Sorocaba, programando na linguagem Visual C#.Net. Teve contato com o Linux em 2005 e logo no começo se interessou pela linguagem de programação Gambas. Também já utilizou a linguagem de programação Lazarus pela compatibilidade com programas escritos em Delphi. Seus objetivos para o ano de 2006 são, se aprofundar mais na programação para Linux, experimentando todas as opções de ferramentas de desenvolvimento, sempre com a intenção de compartilhar o conhecimento adquirido com a comunidade do software livre, e desenvolver um projeto com licença GNU GPL

para contribuir com a disseminação do conhecimento e incentivar a criação de mais programas de software livre.

36