CAPÍTULO 8
Programação visual com Software Livre
EDIT LIN EDITORIAL S.L,  dos autores  Daniel Campos Fernández e José Luis Redrejo.  Prólogo de Benoit Minisini

<< Anterior Próximo >>


Implementação básica


 
Criaremos um novo projeto gráfico, que chamaremos ColorLabel, para nossos testes. Dentro dele, originaremos um formulário FMain, também para nossos testes, assim como uma classe chamada ColorLabel para implementar o controle. Igual a um label normal, definiremos uma propriedade Text com o texto a mostrar, e adicionaremos duas propriedades novas Color1 e Color2 que contem o valor inicial e final do gradiente. Para manipular as três propriedades, teremos três variáveis privadas: hText para  o texto, hColor1 para a primeira cor e hColor2 que contem o valor inicial e final do gradiente. Para manipular as três propriedades, teremos três variáveis privadas: hText  para  o texto hColor1 para a primeira cor e hColor2 para a segunda cor.
 
Figura 5
Figura 5. Novo projeto gráfico ColorLabe

Começamos agora a escrever o código da classe:
 

' Gambas class file

INHERITS DrawingArea

PRIVATE hText AS String

PRIVATE hColor1 AS Integer

PRIVATE hColor2 AS Integer

PROPERTY Text AS String

PROPERTY Color1 AS Integer

PROPERTY Color2 AS Integer

PRIVATE FUNCTION Text_Read () AS String


END

PRIVATE FUNCTION Color1_Read () AS Integer


END

PRIVATE FUNCTION Color2_Read () AS Integer


END
 

Em quanto as funções de escrita, atribuir, temos de atribuir o valor que o usuário passa a nossa propriedade, e temos de atualizar o controle cada vez que haja uma mudança, tarefa que realizaremos em uma função chamada Redraw(), ainda por definir:
 

PRIVATE SUB Text_Write ( V1 AS String )

hText = V1

RedraW()

END

PRIVATE SUB Color1_Write ( V1 AS Integer )

hColor1 = V1

RedraW()

END

PRIVATE SUB Color2_Write ( V1 AS Integer )

hColor2 = V1

RedraW()

END
 

Chegamos ao ponto de implementar Redraw(), pa o qual recorreremos caracter por caracter a cadeia armazenada na variável hText e iremos representar letra por letra usando as diversas cores do gradiente. Para calcular a posição no eixo X de cada letra, nos servimos do método Font.Width() que determina o largura de cada letra com a fonte atual do controle
 

PRIVATE SUB Redraw()

DIM xPos AS Integer

DIM Lupe AS Integer

DIM hColor AS Integer

DIM hDiff AS Integer

ME.Clear

hColor = hColor1

IF Len ( hText THEN hDiff  ( hColor2 – hColor1 )  /  Len ( hText )

Draw.Begin ( ME )

FOR Lupe = 1 TO Len ( hText )

Draw.ForeColor = hColor

Draw.Text ( Mid ( hText, Lupe, 1 ), xPos, 0 )

xPos = xPos + SUPER.Font.Width ( Mid(hText, Lupe, 1 ) )

hColor = hColor + hDiff

NEXT

Draw.End()

END
 

Finalmente, nos interessa que o controle se encarregue por si mesmo de redesenhar a janela. Por padrão, todo o desenho sobre uma DrawingArea desaparece se a janela se oculta atras de outra janela ou se minimizar. Para evita-lo, utilizamos a propriedade Cached de DrawingArea, que se encarrega de manter um buffer e redesenhar as partes do controle exposta ao usuário:
 

PUBLIC SUB _New()

SUPER.Cached = TRUE

END
 

Experimentemos agora o controle. Nosso formulário Fmain terá dimensões 225x240 pixeis e conterá um botão chamado BtnTeste com o texto Teste.

O código do formulário consiste em criar um controle ColorLabel em tempo de execução, situando-o no formulário com um texto de exemplo e duas cores definidas para o gradiente:
6Figura 6
Figura 6. Texto do teste do formulário.
 

Ao executarmos o programa e pressionarmos o botão, podemos ver o nosso controle em funcionamento. Foi uma tarefa rápida e simples, se bem, que podemos depurar bastante o código do controle. Por exemplo, este controle terá problemas com caracteres com o código ASCII maior que 127, já que na codificação do Gambas (UTF-8) ocupa mais de um byte, rompendo o algorítimo que recolhe o texto letra por letra.
 

Podemos solucionar este problema convertendo a cadeia para uma codificação que empregue sempre um byte por letra (por exemplo, (ISO-8859-1) e converte-lo a UTF-8 na hora de representa-lo. Também poderíamos incluir uma propriedade para alinhar o texto a direita, esquerda ou centro, assim como melhorar o algoritmo para obter o gradiente, separando os componentes  RGB de cada cor, podemos fazer todas elas se desejarmos praticar
 
Figura 7
Figura 7. Controle ColorLabel em funcionamento.
 
Este novo controle podemos reutilizar em todos os programas que desenharmos adicionando a classe ColorLabel ao projeto.








 

<< Anterior Próximo >>

HOME



Cópia literal

Extraído do livro “GAMBAS, programação visual com software Livre”, da editora EDIT LIN EDITORIAL S.L,  dos autores  Daniel Campos Fernández e José Luis Redrejo. Prólogo de Benoit Minisini

LICENSA DESTE DOCUMENTO


É permitido a cópia e distribuição da totalidade ou parte desta obra sem fins lucrativo. Toda cópia total ou parcial devera expressar o nome do autor e da editora e incluir esta mesma licença, adicionando se é uma cópia literal “Cópia literal”. Se é autorizada a modificação e tradução da obra  sem fins lucrativo sempre se deve constar na obra resultante  a modificação o nome da obra original o autor da obra original e o nome da editora e a obra resultante também deverá ser livremente reproduzida, distribuída, ao publico e transformada em termos similares ao exposto nesta licença.

Tradução

Cientista
 (Antonio Sousa)