quinta-feira, 30 de abril de 2009

Escrever valores sobrescritos em Label (Simbolizar exponenciação)

Aposto que só de ler o titulo você ficou curioso em saber como fazer pra simbolizar uma exponenciação no Delphi através de um componente Label. Bom, navegando pelos fóruns na web, encontrei um tópico com esse mesmo assunto, e fiquei curioso pra saber a solução. Procurei na web e não consegui encontrar nenhuma rotina pronta que fosse escrever texto e ter um valor sobrescrito, não restou outra alternativa a não ser "criar" a minha própria procedure.

Imagine que você tivesse que simbolizar no seu sistema o número 10 elevado ao expoente 6, como faria (106)? Crie um novo projeto no Delphi, e a ele adicione um componente
Button e um Label. Vá agora para o source do projeto onde vamos implementar a procedure "mágica" que irá deixar o texto sobrescrito. Como parâmetros, a procedure irá receber o Label onde o valor será exibido, o valor normal da expressão e o expoente.
procedure TForm1.EscreverSobrescrito(OndeEscrever: TLabel; Valor, Sobrescrito: Integer);
var
upLabel : TLabel;
begin
OndeEscrever.Caption := IntToStr(Valor);
upLabel := TLabel.Create(Self);
upLabel.Font.Size := 6;
upLabel.Parent := Self;
upLabel.Left := OndeEscrever.Left+OndeEscrever.Width+1;
upLabel.Top := OndeEscrever.Top;

upLabel.Caption := IntToStr(Sobrescrito);
end;


Observe que na procedure declaramos uma nova variável do tipo TLabel que será criada em tempo de execução, e esta por sua vez será exibida com posições idênticas ao Label onde será exibido o valor, porém com tamanho de fonte menor, deixando o valor sobrescrito.

Para a chamar a
procedure, adicione o seguinte código ao evento OnClick do botão, e veja o resultado:
EscreverSobrescrito(Label1,10,6);

Pronto, agora temos um procedimento capaz de simbolizar valores exponências em componentes do tipo Label no Delphi. Abraços

2 comentários:

Abner Castro disse...

Obrigado! Vai ajudar imensamente em meu projeto. Valeu pelas suas dicas.

Leonardo Albulqueruque Pires disse...

nossa, ajudou muito velho, valeu!