SlideShare ist ein Scribd-Unternehmen logo
1 von 5
Downloaden Sie, um offline zu lesen
CARREGANDO ÍCONES EM BOTÕES TBITBTN E TSPEEDBUTTON
Michel Alves dos Santos
RESUMO
O presente artigo apresenta o esqueleto estrutural de uma
classe para manipulação de ícones com a finalidade de carga em
botões pertencentes às classes TBitBtn ou TSpeedButton, já que
nessas classes o desenho de uma figura na área referenciada por sua
propriedade Glyph (TBitmap) pode ser simulado através de conversão
de formatos. Tendo em conta que por padrão, botões do tipo TBitBtn
e TSpeedButton aceitam apenas arquivos do formato *.bmp em sua
propriedade Glyph, manipularemos a propriedade canvas (camada ou
superfície na qual podem ser inseridos itens gráficos ou desenhos)
pertencentes a todas as instâncias da classe TBitmap e assim
simularemos a carga de arquivos em outros formatos executando
desenhos nesses tipos de botões.
Palavras-chave: Programação, Delphi, Classes, Conversão, Formatos.
INTRODUÇÃO
As orientações aqui apresentadas são frutos de pesquisas
dentro de métodos para facilitação do desenvolvimento de aplicações
para ambiente desktop. Freqüentemente nos deparamos com
adversidades que pedem um pouco mais de atenção devido à falta de
flexibilidade de alguns componentes, seja por restrições da própria
plataforma ou por motivos legais. No nosso caso apenas por
restrições da própria plataforma que no momento não configuram um
cenário instransponível. O fato que iremos abordar nesse artigo é o
carregamento de outros formatos de figuras diferentes do formato
padrão *.bmp em componentes das classes TBitBtn e/ou
TSpeedButton.
Para muitos programadores os formatos referentes ao padrão
bitmap não são tão recomendados visto que, um número muito
grande de informações (profundidade de bits, numero de cores,
mantissa, sombra, efeitos de degrade, etc) torna a escolha do
formato “mapa de bits” uma solução não tão atraente, devido ao
tamanho em disco que a figura pode alcançar no final de sua edição.
Não esquecendo que uma figura muito rebuscada pode pesar no
tamanho final em disco do software, depois de compilado. Contudo
alguns programadores optam por manter arquivos reduzidos de
algumas figuras com o mesmo formato bitmap, perdendo na maioria
das vezes no design e conseqüentemente empobrecendo a interface.
Usar os ícones que acompanham o Delphi pode ser uma boa
pedida como forma de padronização de interfaces, mas ao mesmo
tempo pode prejudicar o programador, pois suas aplicações não
conseguirão obter um diferencial, o que poderia distingui-lo de outros
no que tange o escopo de design de seus softwares. Além disso,
arquivos no formato *.ico ou *.jpeg podem armazenar um número
maior de informações ao mesmo tempo em que ocupam um menor
espaço em disco.
DESENVOLVIMENTO
Para a execução da conversão dos formatos *.ico, *.jpg e
*.wmf para o formato bitmap, que pode ser escrito na propriedade
glyph dos componentes TBitBtn e/ou TspeedButton, construímos uma
classe com os métodos LoadIcon, LoadJpeg, LoadMetafile, sendo suas
assinaturas basicamente semelhantes: recebem como parâmetro um
caminho onde possa estar armazenado o arquivo desejado e
retornam um objeto da classe TBitmap. Este objeto por sua vez é
setado na propriedade Glyph dos botões na forma de linha de
comando, em tempo de runtime, fazendo com que a figura não seja
incorporada ao executável, flexibilizando a mudança a qualquer
momento e simulando uma espécie de skin.
Esqueleto da classe TLoadIcons.
A forma de invocação dos métodos da classe pode ser
visualizada logo abaixo, com a simples chamada ao método que
converterá o arquivo de formato escolhido (ico, jpg ou wmf) para o
formato *.bmp.
Chamada ao método que converte formatos *.ico em *.bmp para apresentação em botões.
A interface em execução pode ser vista logo abaixo
representada na figura que segue. As seções estão separadas por
classe de botão e método de carregamento. Na primeira seção
(“Carregamento Normal de Ícones e Figuras”) temos 3 botões sendo
dois do tipo TSpeedButton e um do tipo TBitBtn. O primeiro que está
com foco é um botão do tipo TBitBtn e receberá um ícone. O segundo
botão é do tipo TSpeedButton, que também receberá um ícone e
finalmente o terceiro é um TSpeedButton que receberá um arquivo no
formato *.jpg, obviamente convertido para o formato *.bmp.
Visualização da interface de testes dos métodos de carregamento
de imagens em botões do tipo TBitBtn ou/e TSpeedButton.
Na segunda seção (“Carregamento de ícone através de caminho
fornecido”) temos um botão da classe TSpeedButton que receberá
uma figura do tipo *.ico, passado como parâmetro o caminho de tal
arquivo. O caminho poderá ser dado através da caixa de texto ou
fornecido através da caixa de diálogo OpenPicture, que é executada
quando o botão ‘Procurar ícone’ é pressionado. Na terceira e última
seção (“Carregando WMF”), quando o botão (“TSpeedButton WMF”)
da classe TSpeedButton é executado, um WMF é carregado em seu
canvas. A classe pode ser expandida para outros formatos gráficos,
mas para tanto, deve ser assegurado que a plataforma Delphi usada
comporte classes que possam fazer a conversão do formato desejado
para o formato Bitmap, como é o caso do formato *.gif (Graphic
Interchange Format) que na maioria das vezes, consegue ser apenas
processado através da aquisição de bibliotecas de terceiros.
Abaixo, temos a visão do carregamento dos formatos
permitidos pela classe TLoadIcons.
Ìcones carregados através dos métodos da classe TLoadIcons.
Devemos atentar que, para ícones que se comportam como ICL
´s a figura padrão que será carregada será o ícone setado como
default dentro do arquivo. Para burlar esse tipo de infortúnio
devemos editar o ícone desejado excluindo as camadas adicionais
(ícones 8x8, ícones 16x16, ícones 48x48) existentes dentro do
arquivo com algum editor especializado tal como microangelo,
iconedit, Icon Studio, ABBIcon Pro, Active ICONStudio, ArtIcons,
IconDeveloper (particularmente recomendado) ou qualquer outro da
sua preferência.
Os demais formatos de figuras devem ser mensurados
conforme a necessidade do programador e modelos de design
utilizados. Conforme vimos, esse método de carregamento ajuda o
programador a diversificar a forma como uma interface entre sistema
e usuário é projetada flexibilizando as alternativas para arquivos
diferentes do padrão *.bmp, diminuindo algumas vezes de forma
substancial o tamanho do executável. Trechos do código da classe de
conversão podem ser vistos logo abaixo.
{Método que retorna um bitmap a partir de um ico}
function TLoadIcons.LoadIcon(const strPath: String): TBitmap;
var Icon : TIcon;
Bitmap : TBitmap;
begin
{Cria um ícone temporario}
Icon := TIcon.Create;
try
{Cria um bitmap temporario}
Bitmap := TBitmap.Create;
try
{Carrega o icone .ICO}
Icon.LoadFromFile(strPath);
{Faz a conversao}
Bitmap.Height := Icon.Height;
Bitmap.Width := Icon.Width;
Bitmap.Canvas.Draw(0, 0, Icon);
{Retorna o bitmap}
Result := Bitmap;
finally
//Bitmap.Free;
end;
finally
Icon.Free;
end;
end;
Para maiores informações sobre os métodos de conversão consulte os
arquivos em anexo.
CONCLUSÃO
Dessa forma podemos conhecer outros métodos de
carregamento de imagens em botões fazendo com que o tamanho
final do software seja bem menor além de desacoplar as figuras do
executável, criando uma espécie de padrão de skin (pele) para cada
tipo de aplicação precisando apenas mudar a pasta de figuras na qual
estão localizados os ícones da aplicação.
Michel Alves dos Santos - Formado em Processamento de Dados (Curso Técnico de Nível Médio) e
Tecnologia da Informação (Tecnólogo de Nível Superior) pelo Centro Federal de Educação Tecnológica do
Estado de Alagoas – CEFET/AL. Programador Delphi desde a versão 2.0. Contato :
michel.mas@gmail.com ou michelalvessantos@hotmail.com

Weitere ähnliche Inhalte

Was ist angesagt?

Kernel_Crash_Dump_Analysis
Kernel_Crash_Dump_AnalysisKernel_Crash_Dump_Analysis
Kernel_Crash_Dump_Analysis
Buland Singh
 
Placa mãe e barramentos
Placa mãe e barramentosPlaca mãe e barramentos
Placa mãe e barramentos
Neil Azevedo
 

Was ist angesagt? (9)

Puppeteer - Headless Chrome Node API
Puppeteer - Headless Chrome Node APIPuppeteer - Headless Chrome Node API
Puppeteer - Headless Chrome Node API
 
Build your own embedded linux distributions by yocto project
Build your own embedded linux distributions by yocto projectBuild your own embedded linux distributions by yocto project
Build your own embedded linux distributions by yocto project
 
Launch the First Process in Linux System
Launch the First Process in Linux SystemLaunch the First Process in Linux System
Launch the First Process in Linux System
 
Kernel_Crash_Dump_Analysis
Kernel_Crash_Dump_AnalysisKernel_Crash_Dump_Analysis
Kernel_Crash_Dump_Analysis
 
Placa mãe e barramentos
Placa mãe e barramentosPlaca mãe e barramentos
Placa mãe e barramentos
 
Exercices : Algorithmes et Langage C
Exercices : Algorithmes et Langage CExercices : Algorithmes et Langage C
Exercices : Algorithmes et Langage C
 
Tp2 excel
Tp2 excelTp2 excel
Tp2 excel
 
You Don't Know Query (WordCamp Netherlands 2012)
You Don't Know Query (WordCamp Netherlands 2012)You Don't Know Query (WordCamp Netherlands 2012)
You Don't Know Query (WordCamp Netherlands 2012)
 
ebpf and IO Visor: The What, how, and what next!
ebpf and IO Visor: The What, how, and what next!ebpf and IO Visor: The What, how, and what next!
ebpf and IO Visor: The What, how, and what next!
 

Ähnlich wie Loading icons in tbitbtn and tspeedbutton buttons

Construindo aplicações com netbeans
Construindo aplicações com netbeansConstruindo aplicações com netbeans
Construindo aplicações com netbeans
Sliedesharessbarbosa
 
Apostila br office.org impress
Apostila br office.org impressApostila br office.org impress
Apostila br office.org impress
wajsilva
 

Ähnlich wie Loading icons in tbitbtn and tspeedbutton buttons (20)

Interfaces windows em c sharp
Interfaces windows em c sharpInterfaces windows em c sharp
Interfaces windows em c sharp
 
ODI Series - Importar Arquivos Texto para Tabelas
ODI Series - Importar Arquivos Texto para TabelasODI Series - Importar Arquivos Texto para Tabelas
ODI Series - Importar Arquivos Texto para Tabelas
 
Manual multi bim
Manual multi bimManual multi bim
Manual multi bim
 
Aplicações java com netbeans
Aplicações  java com  netbeansAplicações  java com  netbeans
Aplicações java com netbeans
 
Linguagem c
Linguagem cLinguagem c
Linguagem c
 
Aula3
Aula3Aula3
Aula3
 
Apostila Software Arena
Apostila Software ArenaApostila Software Arena
Apostila Software Arena
 
Lazarus tutor exerc_db_faq_-_v16
Lazarus tutor exerc_db_faq_-_v16Lazarus tutor exerc_db_faq_-_v16
Lazarus tutor exerc_db_faq_-_v16
 
Montagem
MontagemMontagem
Montagem
 
Tarefa Impress
Tarefa ImpressTarefa Impress
Tarefa Impress
 
Tarefa Impress
Tarefa ImpressTarefa Impress
Tarefa Impress
 
Tarefa Impress
Tarefa ImpressTarefa Impress
Tarefa Impress
 
ODI Series - Exportar Tabelas para Arquivo Texto
ODI Series -  Exportar Tabelas para Arquivo TextoODI Series -  Exportar Tabelas para Arquivo Texto
ODI Series - Exportar Tabelas para Arquivo Texto
 
Introdução ao Abaqus
Introdução ao Abaqus Introdução ao Abaqus
Introdução ao Abaqus
 
Tutorial criando-model-builder-arc gis
Tutorial criando-model-builder-arc gisTutorial criando-model-builder-arc gis
Tutorial criando-model-builder-arc gis
 
Construindo aplicações com netbeans
Construindo aplicações com netbeansConstruindo aplicações com netbeans
Construindo aplicações com netbeans
 
Apostila: Netbeans
Apostila: NetbeansApostila: Netbeans
Apostila: Netbeans
 
Aula1 c++ builder
Aula1   c++ builderAula1   c++ builder
Aula1 c++ builder
 
Apostila br office.org impress
Apostila br office.org impressApostila br office.org impress
Apostila br office.org impress
 
CURSO JAVA 02
CURSO JAVA 02CURSO JAVA 02
CURSO JAVA 02
 

Mehr von Michel Alves

Mehr von Michel Alves (20)

Texture Synthesis: An Approach Based on GPU Use
Texture Synthesis: An Approach Based on GPU UseTexture Synthesis: An Approach Based on GPU Use
Texture Synthesis: An Approach Based on GPU Use
 
Intelligent Transfer of Thematic Harmonic Color Palettes
Intelligent Transfer of Thematic Harmonic Color PalettesIntelligent Transfer of Thematic Harmonic Color Palettes
Intelligent Transfer of Thematic Harmonic Color Palettes
 
A Framework for Harmonic Color Measures
A Framework for Harmonic Color MeasuresA Framework for Harmonic Color Measures
A Framework for Harmonic Color Measures
 
Effectiveness of Image Quality Assessment Indexes
Effectiveness of Image Quality Assessment IndexesEffectiveness of Image Quality Assessment Indexes
Effectiveness of Image Quality Assessment Indexes
 
Introduction to Kernel Functions
Introduction to Kernel FunctionsIntroduction to Kernel Functions
Introduction to Kernel Functions
 
About Perception and Hue Histograms in HSV Space
About Perception and Hue Histograms in HSV SpaceAbout Perception and Hue Histograms in HSV Space
About Perception and Hue Histograms in HSV Space
 
Color Harmonization - Results
Color Harmonization - ResultsColor Harmonization - Results
Color Harmonization - Results
 
Wave Simulation Using Perlin Noise
Wave Simulation Using Perlin NoiseWave Simulation Using Perlin Noise
Wave Simulation Using Perlin Noise
 
Similarity Maps Using SSIM Index
Similarity Maps Using SSIM IndexSimilarity Maps Using SSIM Index
Similarity Maps Using SSIM Index
 
Qualifying Exam - Image-Based Reconstruction With Color Harmonization
Qualifying Exam - Image-Based Reconstruction With Color HarmonizationQualifying Exam - Image-Based Reconstruction With Color Harmonization
Qualifying Exam - Image-Based Reconstruction With Color Harmonization
 
TMS - Schedule of Presentations and Reports
TMS - Schedule of Presentations and ReportsTMS - Schedule of Presentations and Reports
TMS - Schedule of Presentations and Reports
 
Month Presentations Schedule - March/2015 - LCG/UFRJ
Month Presentations Schedule - March/2015 - LCG/UFRJMonth Presentations Schedule - March/2015 - LCG/UFRJ
Month Presentations Schedule - March/2015 - LCG/UFRJ
 
Color Palettes in R
Color Palettes in RColor Palettes in R
Color Palettes in R
 
Sigmoid Curve Erf
Sigmoid Curve ErfSigmoid Curve Erf
Sigmoid Curve Erf
 
Hue Wheel Prototype
Hue Wheel PrototypeHue Wheel Prototype
Hue Wheel Prototype
 
Cosine Curve
Cosine CurveCosine Curve
Cosine Curve
 
Triangle Mesh Plot
Triangle Mesh PlotTriangle Mesh Plot
Triangle Mesh Plot
 
Triangle Plot
Triangle PlotTriangle Plot
Triangle Plot
 
Capacity-Constrained Point Distributions :: Video Slides
Capacity-Constrained Point Distributions :: Video SlidesCapacity-Constrained Point Distributions :: Video Slides
Capacity-Constrained Point Distributions :: Video Slides
 
Capacity-Constrained Point Distributions :: Density Function Catalog
Capacity-Constrained Point Distributions :: Density Function CatalogCapacity-Constrained Point Distributions :: Density Function Catalog
Capacity-Constrained Point Distributions :: Density Function Catalog
 

Kürzlich hochgeladen

8 Aula de predicado verbal e nominal - Predicativo do sujeito
8 Aula de predicado verbal e nominal - Predicativo do sujeito8 Aula de predicado verbal e nominal - Predicativo do sujeito
8 Aula de predicado verbal e nominal - Predicativo do sujeito
tatianehilda
 
19- Pedagogia (60 mapas mentais) - Amostra.pdf
19- Pedagogia (60 mapas mentais) - Amostra.pdf19- Pedagogia (60 mapas mentais) - Amostra.pdf
19- Pedagogia (60 mapas mentais) - Amostra.pdf
marlene54545
 
Teoria heterotrófica e autotrófica dos primeiros seres vivos..pptx
Teoria heterotrófica e autotrófica dos primeiros seres vivos..pptxTeoria heterotrófica e autotrófica dos primeiros seres vivos..pptx
Teoria heterotrófica e autotrófica dos primeiros seres vivos..pptx
TailsonSantos1
 

Kürzlich hochgeladen (20)

Plano de aula Nova Escola períodos simples e composto parte 1.pptx
Plano de aula Nova Escola períodos simples e composto parte 1.pptxPlano de aula Nova Escola períodos simples e composto parte 1.pptx
Plano de aula Nova Escola períodos simples e composto parte 1.pptx
 
Introdução às Funções 9º ano: Diagrama de flexas, Valor numérico de uma funçã...
Introdução às Funções 9º ano: Diagrama de flexas, Valor numérico de uma funçã...Introdução às Funções 9º ano: Diagrama de flexas, Valor numérico de uma funçã...
Introdução às Funções 9º ano: Diagrama de flexas, Valor numérico de uma funçã...
 
LENDA DA MANDIOCA - leitura e interpretação
LENDA DA MANDIOCA - leitura e interpretaçãoLENDA DA MANDIOCA - leitura e interpretação
LENDA DA MANDIOCA - leitura e interpretação
 
PROJETO DE EXTENSÃO I - AGRONOMIA.pdf AGRONOMIAAGRONOMIA
PROJETO DE EXTENSÃO I - AGRONOMIA.pdf AGRONOMIAAGRONOMIAPROJETO DE EXTENSÃO I - AGRONOMIA.pdf AGRONOMIAAGRONOMIA
PROJETO DE EXTENSÃO I - AGRONOMIA.pdf AGRONOMIAAGRONOMIA
 
Projeto de Extensão - ENGENHARIA DE SOFTWARE - BACHARELADO.pdf
Projeto de Extensão - ENGENHARIA DE SOFTWARE - BACHARELADO.pdfProjeto de Extensão - ENGENHARIA DE SOFTWARE - BACHARELADO.pdf
Projeto de Extensão - ENGENHARIA DE SOFTWARE - BACHARELADO.pdf
 
Aula 25 - A america espanhola - colonização, exploraçãp e trabalho (mita e en...
Aula 25 - A america espanhola - colonização, exploraçãp e trabalho (mita e en...Aula 25 - A america espanhola - colonização, exploraçãp e trabalho (mita e en...
Aula 25 - A america espanhola - colonização, exploraçãp e trabalho (mita e en...
 
8 Aula de predicado verbal e nominal - Predicativo do sujeito
8 Aula de predicado verbal e nominal - Predicativo do sujeito8 Aula de predicado verbal e nominal - Predicativo do sujeito
8 Aula de predicado verbal e nominal - Predicativo do sujeito
 
19- Pedagogia (60 mapas mentais) - Amostra.pdf
19- Pedagogia (60 mapas mentais) - Amostra.pdf19- Pedagogia (60 mapas mentais) - Amostra.pdf
19- Pedagogia (60 mapas mentais) - Amostra.pdf
 
Camadas da terra -Litosfera conteúdo 6º ano
Camadas da terra -Litosfera  conteúdo 6º anoCamadas da terra -Litosfera  conteúdo 6º ano
Camadas da terra -Litosfera conteúdo 6º ano
 
Conflitos entre: ISRAEL E PALESTINA.pdf
Conflitos entre:  ISRAEL E PALESTINA.pdfConflitos entre:  ISRAEL E PALESTINA.pdf
Conflitos entre: ISRAEL E PALESTINA.pdf
 
6ano variação linguística ensino fundamental.pptx
6ano variação linguística ensino fundamental.pptx6ano variação linguística ensino fundamental.pptx
6ano variação linguística ensino fundamental.pptx
 
aula de bioquímica bioquímica dos carboidratos.ppt
aula de bioquímica bioquímica dos carboidratos.pptaula de bioquímica bioquímica dos carboidratos.ppt
aula de bioquímica bioquímica dos carboidratos.ppt
 
Teoria heterotrófica e autotrófica dos primeiros seres vivos..pptx
Teoria heterotrófica e autotrófica dos primeiros seres vivos..pptxTeoria heterotrófica e autotrófica dos primeiros seres vivos..pptx
Teoria heterotrófica e autotrófica dos primeiros seres vivos..pptx
 
GÊNERO CARTAZ - o que é, para que serve.pptx
GÊNERO CARTAZ - o que é, para que serve.pptxGÊNERO CARTAZ - o que é, para que serve.pptx
GÊNERO CARTAZ - o que é, para que serve.pptx
 
M0 Atendimento – Definição, Importância .pptx
M0 Atendimento – Definição, Importância .pptxM0 Atendimento – Definição, Importância .pptx
M0 Atendimento – Definição, Importância .pptx
 
PROJETO DE EXTENSÃO I - Radiologia Tecnologia
PROJETO DE EXTENSÃO I - Radiologia TecnologiaPROJETO DE EXTENSÃO I - Radiologia Tecnologia
PROJETO DE EXTENSÃO I - Radiologia Tecnologia
 
LISTA DE EXERCICIOS envolveto grandezas e medidas e notação cientifica 1 ANO ...
LISTA DE EXERCICIOS envolveto grandezas e medidas e notação cientifica 1 ANO ...LISTA DE EXERCICIOS envolveto grandezas e medidas e notação cientifica 1 ANO ...
LISTA DE EXERCICIOS envolveto grandezas e medidas e notação cientifica 1 ANO ...
 
migração e trabalho 2º ano.pptx fenomenos
migração e trabalho 2º ano.pptx fenomenosmigração e trabalho 2º ano.pptx fenomenos
migração e trabalho 2º ano.pptx fenomenos
 
PROJETO DE EXTENSÃO I - TERAPIAS INTEGRATIVAS E COMPLEMENTARES.pdf
PROJETO DE EXTENSÃO I - TERAPIAS INTEGRATIVAS E COMPLEMENTARES.pdfPROJETO DE EXTENSÃO I - TERAPIAS INTEGRATIVAS E COMPLEMENTARES.pdf
PROJETO DE EXTENSÃO I - TERAPIAS INTEGRATIVAS E COMPLEMENTARES.pdf
 
PRÁTICAS PEDAGÓGICAS GESTÃO DA APRENDIZAGEM
PRÁTICAS PEDAGÓGICAS GESTÃO DA APRENDIZAGEMPRÁTICAS PEDAGÓGICAS GESTÃO DA APRENDIZAGEM
PRÁTICAS PEDAGÓGICAS GESTÃO DA APRENDIZAGEM
 

Loading icons in tbitbtn and tspeedbutton buttons

  • 1. CARREGANDO ÍCONES EM BOTÕES TBITBTN E TSPEEDBUTTON Michel Alves dos Santos RESUMO O presente artigo apresenta o esqueleto estrutural de uma classe para manipulação de ícones com a finalidade de carga em botões pertencentes às classes TBitBtn ou TSpeedButton, já que nessas classes o desenho de uma figura na área referenciada por sua propriedade Glyph (TBitmap) pode ser simulado através de conversão de formatos. Tendo em conta que por padrão, botões do tipo TBitBtn e TSpeedButton aceitam apenas arquivos do formato *.bmp em sua propriedade Glyph, manipularemos a propriedade canvas (camada ou superfície na qual podem ser inseridos itens gráficos ou desenhos) pertencentes a todas as instâncias da classe TBitmap e assim simularemos a carga de arquivos em outros formatos executando desenhos nesses tipos de botões. Palavras-chave: Programação, Delphi, Classes, Conversão, Formatos. INTRODUÇÃO As orientações aqui apresentadas são frutos de pesquisas dentro de métodos para facilitação do desenvolvimento de aplicações para ambiente desktop. Freqüentemente nos deparamos com adversidades que pedem um pouco mais de atenção devido à falta de flexibilidade de alguns componentes, seja por restrições da própria plataforma ou por motivos legais. No nosso caso apenas por restrições da própria plataforma que no momento não configuram um cenário instransponível. O fato que iremos abordar nesse artigo é o carregamento de outros formatos de figuras diferentes do formato padrão *.bmp em componentes das classes TBitBtn e/ou TSpeedButton. Para muitos programadores os formatos referentes ao padrão bitmap não são tão recomendados visto que, um número muito grande de informações (profundidade de bits, numero de cores, mantissa, sombra, efeitos de degrade, etc) torna a escolha do formato “mapa de bits” uma solução não tão atraente, devido ao tamanho em disco que a figura pode alcançar no final de sua edição. Não esquecendo que uma figura muito rebuscada pode pesar no tamanho final em disco do software, depois de compilado. Contudo alguns programadores optam por manter arquivos reduzidos de algumas figuras com o mesmo formato bitmap, perdendo na maioria das vezes no design e conseqüentemente empobrecendo a interface. Usar os ícones que acompanham o Delphi pode ser uma boa pedida como forma de padronização de interfaces, mas ao mesmo tempo pode prejudicar o programador, pois suas aplicações não
  • 2. conseguirão obter um diferencial, o que poderia distingui-lo de outros no que tange o escopo de design de seus softwares. Além disso, arquivos no formato *.ico ou *.jpeg podem armazenar um número maior de informações ao mesmo tempo em que ocupam um menor espaço em disco. DESENVOLVIMENTO Para a execução da conversão dos formatos *.ico, *.jpg e *.wmf para o formato bitmap, que pode ser escrito na propriedade glyph dos componentes TBitBtn e/ou TspeedButton, construímos uma classe com os métodos LoadIcon, LoadJpeg, LoadMetafile, sendo suas assinaturas basicamente semelhantes: recebem como parâmetro um caminho onde possa estar armazenado o arquivo desejado e retornam um objeto da classe TBitmap. Este objeto por sua vez é setado na propriedade Glyph dos botões na forma de linha de comando, em tempo de runtime, fazendo com que a figura não seja incorporada ao executável, flexibilizando a mudança a qualquer momento e simulando uma espécie de skin. Esqueleto da classe TLoadIcons. A forma de invocação dos métodos da classe pode ser visualizada logo abaixo, com a simples chamada ao método que converterá o arquivo de formato escolhido (ico, jpg ou wmf) para o formato *.bmp.
  • 3. Chamada ao método que converte formatos *.ico em *.bmp para apresentação em botões. A interface em execução pode ser vista logo abaixo representada na figura que segue. As seções estão separadas por classe de botão e método de carregamento. Na primeira seção (“Carregamento Normal de Ícones e Figuras”) temos 3 botões sendo dois do tipo TSpeedButton e um do tipo TBitBtn. O primeiro que está com foco é um botão do tipo TBitBtn e receberá um ícone. O segundo botão é do tipo TSpeedButton, que também receberá um ícone e finalmente o terceiro é um TSpeedButton que receberá um arquivo no formato *.jpg, obviamente convertido para o formato *.bmp. Visualização da interface de testes dos métodos de carregamento de imagens em botões do tipo TBitBtn ou/e TSpeedButton. Na segunda seção (“Carregamento de ícone através de caminho fornecido”) temos um botão da classe TSpeedButton que receberá uma figura do tipo *.ico, passado como parâmetro o caminho de tal arquivo. O caminho poderá ser dado através da caixa de texto ou fornecido através da caixa de diálogo OpenPicture, que é executada quando o botão ‘Procurar ícone’ é pressionado. Na terceira e última seção (“Carregando WMF”), quando o botão (“TSpeedButton WMF”) da classe TSpeedButton é executado, um WMF é carregado em seu canvas. A classe pode ser expandida para outros formatos gráficos, mas para tanto, deve ser assegurado que a plataforma Delphi usada comporte classes que possam fazer a conversão do formato desejado para o formato Bitmap, como é o caso do formato *.gif (Graphic
  • 4. Interchange Format) que na maioria das vezes, consegue ser apenas processado através da aquisição de bibliotecas de terceiros. Abaixo, temos a visão do carregamento dos formatos permitidos pela classe TLoadIcons. Ìcones carregados através dos métodos da classe TLoadIcons. Devemos atentar que, para ícones que se comportam como ICL ´s a figura padrão que será carregada será o ícone setado como default dentro do arquivo. Para burlar esse tipo de infortúnio devemos editar o ícone desejado excluindo as camadas adicionais (ícones 8x8, ícones 16x16, ícones 48x48) existentes dentro do arquivo com algum editor especializado tal como microangelo, iconedit, Icon Studio, ABBIcon Pro, Active ICONStudio, ArtIcons, IconDeveloper (particularmente recomendado) ou qualquer outro da sua preferência. Os demais formatos de figuras devem ser mensurados conforme a necessidade do programador e modelos de design utilizados. Conforme vimos, esse método de carregamento ajuda o programador a diversificar a forma como uma interface entre sistema e usuário é projetada flexibilizando as alternativas para arquivos diferentes do padrão *.bmp, diminuindo algumas vezes de forma
  • 5. substancial o tamanho do executável. Trechos do código da classe de conversão podem ser vistos logo abaixo. {Método que retorna um bitmap a partir de um ico} function TLoadIcons.LoadIcon(const strPath: String): TBitmap; var Icon : TIcon; Bitmap : TBitmap; begin {Cria um ícone temporario} Icon := TIcon.Create; try {Cria um bitmap temporario} Bitmap := TBitmap.Create; try {Carrega o icone .ICO} Icon.LoadFromFile(strPath); {Faz a conversao} Bitmap.Height := Icon.Height; Bitmap.Width := Icon.Width; Bitmap.Canvas.Draw(0, 0, Icon); {Retorna o bitmap} Result := Bitmap; finally //Bitmap.Free; end; finally Icon.Free; end; end; Para maiores informações sobre os métodos de conversão consulte os arquivos em anexo. CONCLUSÃO Dessa forma podemos conhecer outros métodos de carregamento de imagens em botões fazendo com que o tamanho final do software seja bem menor além de desacoplar as figuras do executável, criando uma espécie de padrão de skin (pele) para cada tipo de aplicação precisando apenas mudar a pasta de figuras na qual estão localizados os ícones da aplicação. Michel Alves dos Santos - Formado em Processamento de Dados (Curso Técnico de Nível Médio) e Tecnologia da Informação (Tecnólogo de Nível Superior) pelo Centro Federal de Educação Tecnológica do Estado de Alagoas – CEFET/AL. Programador Delphi desde a versão 2.0. Contato : michel.mas@gmail.com ou michelalvessantos@hotmail.com