
Delphi@Brasil Magazine - Março 98
Tópico do mês : Criação de um componente do tipo TLabel que nos dê a possibilidade de criar hiperlinks dentro de nosso aplicativos.
Para quem trabalha na área de softwares a internet hoje é uma realidade clara, e quem ignorar isto e não promover uma gradual mudança nos seus aplicativos de modo a integrá-lo com as vantagens que a internet oferece aos usuários corre o perigo de ficar com seus aplicativos defasados.
Por isto este mês vamos ter como tema da matéria a criação de um componente TLabel que quando o colocamos em um Form e clicamos em cima do mesmo ele nos abrirá o browser e procederá com a conexão até o hiperlink indicado pelo nosso label.
Sem perdermos muito tempo vamos com explicações sobre os passos básicos da criação de um componente (isto pode ser melhor detalhado na edição de Dezembro-97), vamos até a opção New Component do menu Component e na tela que nos aparece escolhamos como ancestral o tipo TCustomLabel, e coloquemos como nome do nosso componente TLabelLink como pode ser verificado na figura I.

Figura I
Clique na opção criar a Unit e não em instalar o componente já que temos que fazer alguns testes. Com a nossa unit crada vamos declarar como published algumas propriedades que queremos que sejam visualizadas pelos usuários de nosso componente a partir do Object Inspector. Nunca é demais observar que pegamos como nosso ancestral TCustomLabel porque ele nos dá a possibilidade de ocultar propriedades que de outra forma não teriamos pois não há como tornar propriedades menos restritivas, no caso de optarmos por ter TLabel como nosso ancestral. São essas as propriedades que vamos publicar :
Uma breve explanação de nossas necessidades com cada uma dessas propriedades seria :
Caption : Nos dá a possibilidade de configurar o endereço do hiperlink que desejamos visitar.
Transparent : No caso de nosso hiperlink estar situado acima de uma figura podemos setar Transparent com True e assim termos um efeito de um form como se fosse uma página html.
Font e Color : Cor da fonte e fundo do label.
Alignment e Align : Alinhamento do label e do texto do label no form.
Após a declaração de nossas propriedades vamos ao código que realmente executa o trabalho pesado. Como na maioria dos caso necessitamos dar um override em nosso construtor create de modo a inicializar o nosso componente com as características que desejamos (código abaixo). Note que como estamos dando um override no create inclusive a declaração do método na parte public fica por nossa conta(nunca é demais lembrar que só deve ser digitadado o que está em negrito).
{Dentro da declaração do Type}
public
{ Public declarations }
Constructor Create(AOwner : TComponent); override; // Precisa ser
público
{O código em si}
Constructor
TLabelLink.Create(AOwner : TComponent);
begin
Inherited Create(AOwner);
with Self do
begin
Cursor := crHandPoint;
Font.Color := clBlue;
Font.Style :=
[fsUnderline];
end;
end;
Após herdarmos o Create do componente Owner(que no nosso caso é TCustomLabel), setamos algumas propriedades para dar ao nosso label o aspecto de um link de internet. São propriedades como o cursor no formato de mão, a cor azul e a fonte sublinhada.
Após o create vamos dar um override no método Click, para que assim possamos rasterear se o usuário de nossos aplicativos clicou em cima do nosso label para assim executarmos a chamada ao browser. O código deste método fica muito semelhante ao código do create como podemos ver abaixo.
{Dentro da declaração do Type}
public
{ Public declarations }
Constructor Create(AOwner : TComponent); override; //
Precisa ser público
procedure Click; Override;
{O código em si}
procedure TLabelLink.Click;
begin
inherited Click;
with Self do
begin
Font.Color := clRed;
AcionaUrl(Self.Caption);
end;
end;
Como podemos ver herdamos de nosso ancestral o método click, para logo após mudarmos a cor de nosso link para vermelho(como acontece com o browser quando se clica num link), e depois fazemos a chamada a um método AcionaUrl, o qual criaremos logo a seguir, que têm como parâmetro o próprio caption de nosso label, o qual indicará ao browser qual endereço devemos procurar. O método AcionaUrl é quem realmente vai fazer todo o trabalho pesado para nós como poderemos verificar no código abaixo. Declare este método como private, pois a boa programação OOP nos diz que devemos ocultar o código dos usuários de nosso componente que não será chamado diretamente por eles. Veja o código abaixo :
Procedure
TLabelLink.AcionaURL(cUrl : String);
Var
cStr : Array[0..120] of char;
begin
StrPCopy(cStr,cUrl); // É necessário
transformar nossa String do URL em PChar
// Para tratamento pela API do Windows em
ShellExecute
try // Nunca é demais fazer o tratamento
ShellExecute(0, Nil,
cStr, Nil, Nil, SW_NORMAL);
// Faz todo o trabalho
conforme está descrito no registro do windows
// como deve se
proceder ao encontrar um link de internet...
except
MessageDlg('Houve
Algum problema no acionamento do seu browser !', mtError,
[mbOk],0);
end;
end;
Inicialmente vemos a declaração de uma matriz de caracteres do tipo char. Esta matriz será a responsável por nossa comunicação com o ambiente da API(application programer interface) do windows, é necessário ser uma matriz pois o windows só entende como paramêtros strings do tipo PChar, ou seja terminada com um nulo. Isso acontece para manter a compatibilidade com o C, pois a maior parte do OS é escrita nesta linguagem.
O trabalho começa mesmo com o uso da função StrPCopy para transfomar nossa string pascal em string C. Chamamos a função ShellExecute da API do windows dentro de um bloco Try/Except para passar ao Shell nossa string, como esta é uma string que têm referência ao modo de endereçamento http da internet o Shell vai procurar no registro do windows o que deve ser feito quando isto acontece. Note que esta função pode ser usada basicamente com qualquer tipo de arquivo que tenha uma entrada no registro do windows. Por exemplo se o Pkunzip estiver associado à extensão .zip, quando passarmos como parâmetro um arquivo deste tipo ao ShellExecute, automaticamente ele rodará o Pkunzip para descompactar o arquivo.
Abaixo na figura II podemos dar uma olhada num aplicativo simples desenvolvido para demonstrar o nosso link internet em funcionamento após a chamada a um browser.

Figura II
Se desejar dar uma olhada no código que criamos você pode baixá-lo aqui.
- Esperamos que as informações aqui contidas tenha lhe sido de grande utilidade. Venho reforçar o pedido para que se desejarem entrem em contato conosco por meio de [email protected] , e também lembrá-los que estamos abertos a publicar matérias vindas de nossos leitores para que desse modo possamos melhorar ainda mais os nossos serviços para os leitores e servir de vitrine para o autor da matéria.
Fúlvio C. Albuquerque
Editor Responsável