SlideShare una empresa de Scribd logo
1 de 5
Descargar para leer sin conexión
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

Más contenido relacionado

Similar a Loading icons in tbitbtn and tspeedbutton buttons

Similar a Loading icons in tbitbtn and tspeedbutton buttons (20)

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
 
BizTalk Server - Como funcionam os Mapas
BizTalk Server - Como funcionam os MapasBizTalk Server - Como funcionam os Mapas
BizTalk Server - Como funcionam os Mapas
 
novidades autocad_2013
novidades autocad_2013novidades autocad_2013
novidades autocad_2013
 
THREADS EM JAVA: INTRODUÇÃO
THREADS EM JAVA: INTRODUÇÃOTHREADS EM JAVA: INTRODUÇÃO
THREADS EM JAVA: INTRODUÇÃO
 
Apostila2 clp logo
Apostila2 clp logoApostila2 clp logo
Apostila2 clp logo
 
Tutorial visual c# express
Tutorial  visual c# expressTutorial  visual c# express
Tutorial visual c# express
 
Access intermediário
Access intermediárioAccess intermediário
Access intermediário
 

Más de Michel Alves

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 UseMichel Alves
 
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 PalettesMichel Alves
 
A Framework for Harmonic Color Measures
A Framework for Harmonic Color MeasuresA Framework for Harmonic Color Measures
A Framework for Harmonic Color MeasuresMichel Alves
 
Effectiveness of Image Quality Assessment Indexes
Effectiveness of Image Quality Assessment IndexesEffectiveness of Image Quality Assessment Indexes
Effectiveness of Image Quality Assessment IndexesMichel Alves
 
Introduction to Kernel Functions
Introduction to Kernel FunctionsIntroduction to Kernel Functions
Introduction to Kernel FunctionsMichel Alves
 
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 SpaceMichel Alves
 
Color Harmonization - Results
Color Harmonization - ResultsColor Harmonization - Results
Color Harmonization - ResultsMichel Alves
 
Wave Simulation Using Perlin Noise
Wave Simulation Using Perlin NoiseWave Simulation Using Perlin Noise
Wave Simulation Using Perlin NoiseMichel Alves
 
Similarity Maps Using SSIM Index
Similarity Maps Using SSIM IndexSimilarity Maps Using SSIM Index
Similarity Maps Using SSIM IndexMichel Alves
 
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 HarmonizationMichel Alves
 
TMS - Schedule of Presentations and Reports
TMS - Schedule of Presentations and ReportsTMS - Schedule of Presentations and Reports
TMS - Schedule of Presentations and ReportsMichel Alves
 
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/UFRJMichel Alves
 
Color Palettes in R
Color Palettes in RColor Palettes in R
Color Palettes in RMichel Alves
 
Hue Wheel Prototype
Hue Wheel PrototypeHue Wheel Prototype
Hue Wheel PrototypeMichel Alves
 
Triangle Mesh Plot
Triangle Mesh PlotTriangle Mesh Plot
Triangle Mesh PlotMichel Alves
 
Capacity-Constrained Point Distributions :: Video Slides
Capacity-Constrained Point Distributions :: Video SlidesCapacity-Constrained Point Distributions :: Video Slides
Capacity-Constrained Point Distributions :: Video SlidesMichel Alves
 
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 CatalogMichel Alves
 

Más de 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
 

Último

Slides Lição 03, Central Gospel, O Arrebatamento, 1Tr24.pptx
Slides Lição 03, Central Gospel, O Arrebatamento, 1Tr24.pptxSlides Lição 03, Central Gospel, O Arrebatamento, 1Tr24.pptx
Slides Lição 03, Central Gospel, O Arrebatamento, 1Tr24.pptxLuizHenriquedeAlmeid6
 
Governo Provisório Era Vargas 1930-1934 Brasil
Governo Provisório Era Vargas 1930-1934 BrasilGoverno Provisório Era Vargas 1930-1934 Brasil
Governo Provisório Era Vargas 1930-1934 Brasillucasp132400
 
Orações subordinadas substantivas (andamento).pptx
Orações subordinadas substantivas (andamento).pptxOrações subordinadas substantivas (andamento).pptx
Orações subordinadas substantivas (andamento).pptxKtiaOliveira68
 
activIDADES CUENTO lobo esta CUENTO CUARTO GRADO
activIDADES CUENTO  lobo esta  CUENTO CUARTO GRADOactivIDADES CUENTO  lobo esta  CUENTO CUARTO GRADO
activIDADES CUENTO lobo esta CUENTO CUARTO GRADOcarolinacespedes23
 
Universidade Empreendedora como uma Plataforma para o Bem comum
Universidade Empreendedora como uma Plataforma para o Bem comumUniversidade Empreendedora como uma Plataforma para o Bem comum
Universidade Empreendedora como uma Plataforma para o Bem comumPatrícia de Sá Freire, PhD. Eng.
 
Apresentação | Eleições Europeias 2024-2029
Apresentação | Eleições Europeias 2024-2029Apresentação | Eleições Europeias 2024-2029
Apresentação | Eleições Europeias 2024-2029Centro Jacques Delors
 
ABRIL VERDE.pptx Slide sobre abril ver 2024
ABRIL VERDE.pptx Slide sobre abril ver 2024ABRIL VERDE.pptx Slide sobre abril ver 2024
ABRIL VERDE.pptx Slide sobre abril ver 2024Jeanoliveira597523
 
D9 RECONHECER GENERO DISCURSIVO SPA.pptx
D9 RECONHECER GENERO DISCURSIVO SPA.pptxD9 RECONHECER GENERO DISCURSIVO SPA.pptx
D9 RECONHECER GENERO DISCURSIVO SPA.pptxRonys4
 
A Arte de Escrever Poemas - Dia das Mães
A Arte de Escrever Poemas - Dia das MãesA Arte de Escrever Poemas - Dia das Mães
A Arte de Escrever Poemas - Dia das MãesMary Alvarenga
 
William J. Bennett - O livro das virtudes para Crianças.pdf
William J. Bennett - O livro das virtudes para Crianças.pdfWilliam J. Bennett - O livro das virtudes para Crianças.pdf
William J. Bennett - O livro das virtudes para Crianças.pdfAdrianaCunha84
 
Slides Lição 5, CPAD, Os Inimigos do Cristão, 2Tr24, Pr Henrique.pptx
Slides Lição 5, CPAD, Os Inimigos do Cristão, 2Tr24, Pr Henrique.pptxSlides Lição 5, CPAD, Os Inimigos do Cristão, 2Tr24, Pr Henrique.pptx
Slides Lição 5, CPAD, Os Inimigos do Cristão, 2Tr24, Pr Henrique.pptxLuizHenriquedeAlmeid6
 
Recurso Casa das Ciências: Sistemas de Partículas
Recurso Casa das Ciências: Sistemas de PartículasRecurso Casa das Ciências: Sistemas de Partículas
Recurso Casa das Ciências: Sistemas de PartículasCasa Ciências
 
UFCD_10392_Intervenção em populações de risco_índice .pdf
UFCD_10392_Intervenção em populações de risco_índice .pdfUFCD_10392_Intervenção em populações de risco_índice .pdf
UFCD_10392_Intervenção em populações de risco_índice .pdfManuais Formação
 
AD2 DIDÁTICA.KARINEROZA.SHAYANNE.BINC.ROBERTA.pptx
AD2 DIDÁTICA.KARINEROZA.SHAYANNE.BINC.ROBERTA.pptxAD2 DIDÁTICA.KARINEROZA.SHAYANNE.BINC.ROBERTA.pptx
AD2 DIDÁTICA.KARINEROZA.SHAYANNE.BINC.ROBERTA.pptxkarinedarozabatista
 
“Sobrou pra mim” - Conto de Ruth Rocha.pptx
“Sobrou pra mim” - Conto de Ruth Rocha.pptx“Sobrou pra mim” - Conto de Ruth Rocha.pptx
“Sobrou pra mim” - Conto de Ruth Rocha.pptxthaisamaral9365923
 
ATIVIDADE AVALIATIVA VOZES VERBAIS 7º ano.pptx
ATIVIDADE AVALIATIVA VOZES VERBAIS 7º ano.pptxATIVIDADE AVALIATIVA VOZES VERBAIS 7º ano.pptx
ATIVIDADE AVALIATIVA VOZES VERBAIS 7º ano.pptxOsnilReis1
 
Música Meu Abrigo - Texto e atividade
Música   Meu   Abrigo  -   Texto e atividadeMúsica   Meu   Abrigo  -   Texto e atividade
Música Meu Abrigo - Texto e atividadeMary Alvarenga
 

Último (20)

Slides Lição 03, Central Gospel, O Arrebatamento, 1Tr24.pptx
Slides Lição 03, Central Gospel, O Arrebatamento, 1Tr24.pptxSlides Lição 03, Central Gospel, O Arrebatamento, 1Tr24.pptx
Slides Lição 03, Central Gospel, O Arrebatamento, 1Tr24.pptx
 
Governo Provisório Era Vargas 1930-1934 Brasil
Governo Provisório Era Vargas 1930-1934 BrasilGoverno Provisório Era Vargas 1930-1934 Brasil
Governo Provisório Era Vargas 1930-1934 Brasil
 
Orações subordinadas substantivas (andamento).pptx
Orações subordinadas substantivas (andamento).pptxOrações subordinadas substantivas (andamento).pptx
Orações subordinadas substantivas (andamento).pptx
 
Bullying, sai pra lá
Bullying,  sai pra láBullying,  sai pra lá
Bullying, sai pra lá
 
activIDADES CUENTO lobo esta CUENTO CUARTO GRADO
activIDADES CUENTO  lobo esta  CUENTO CUARTO GRADOactivIDADES CUENTO  lobo esta  CUENTO CUARTO GRADO
activIDADES CUENTO lobo esta CUENTO CUARTO GRADO
 
Universidade Empreendedora como uma Plataforma para o Bem comum
Universidade Empreendedora como uma Plataforma para o Bem comumUniversidade Empreendedora como uma Plataforma para o Bem comum
Universidade Empreendedora como uma Plataforma para o Bem comum
 
Apresentação | Eleições Europeias 2024-2029
Apresentação | Eleições Europeias 2024-2029Apresentação | Eleições Europeias 2024-2029
Apresentação | Eleições Europeias 2024-2029
 
ABRIL VERDE.pptx Slide sobre abril ver 2024
ABRIL VERDE.pptx Slide sobre abril ver 2024ABRIL VERDE.pptx Slide sobre abril ver 2024
ABRIL VERDE.pptx Slide sobre abril ver 2024
 
D9 RECONHECER GENERO DISCURSIVO SPA.pptx
D9 RECONHECER GENERO DISCURSIVO SPA.pptxD9 RECONHECER GENERO DISCURSIVO SPA.pptx
D9 RECONHECER GENERO DISCURSIVO SPA.pptx
 
A Arte de Escrever Poemas - Dia das Mães
A Arte de Escrever Poemas - Dia das MãesA Arte de Escrever Poemas - Dia das Mães
A Arte de Escrever Poemas - Dia das Mães
 
William J. Bennett - O livro das virtudes para Crianças.pdf
William J. Bennett - O livro das virtudes para Crianças.pdfWilliam J. Bennett - O livro das virtudes para Crianças.pdf
William J. Bennett - O livro das virtudes para Crianças.pdf
 
Slides Lição 5, CPAD, Os Inimigos do Cristão, 2Tr24, Pr Henrique.pptx
Slides Lição 5, CPAD, Os Inimigos do Cristão, 2Tr24, Pr Henrique.pptxSlides Lição 5, CPAD, Os Inimigos do Cristão, 2Tr24, Pr Henrique.pptx
Slides Lição 5, CPAD, Os Inimigos do Cristão, 2Tr24, Pr Henrique.pptx
 
Recurso Casa das Ciências: Sistemas de Partículas
Recurso Casa das Ciências: Sistemas de PartículasRecurso Casa das Ciências: Sistemas de Partículas
Recurso Casa das Ciências: Sistemas de Partículas
 
UFCD_10392_Intervenção em populações de risco_índice .pdf
UFCD_10392_Intervenção em populações de risco_índice .pdfUFCD_10392_Intervenção em populações de risco_índice .pdf
UFCD_10392_Intervenção em populações de risco_índice .pdf
 
XI OLIMPÍADAS DA LÍNGUA PORTUGUESA -
XI OLIMPÍADAS DA LÍNGUA PORTUGUESA      -XI OLIMPÍADAS DA LÍNGUA PORTUGUESA      -
XI OLIMPÍADAS DA LÍNGUA PORTUGUESA -
 
AD2 DIDÁTICA.KARINEROZA.SHAYANNE.BINC.ROBERTA.pptx
AD2 DIDÁTICA.KARINEROZA.SHAYANNE.BINC.ROBERTA.pptxAD2 DIDÁTICA.KARINEROZA.SHAYANNE.BINC.ROBERTA.pptx
AD2 DIDÁTICA.KARINEROZA.SHAYANNE.BINC.ROBERTA.pptx
 
Orientação Técnico-Pedagógica EMBcae Nº 001, de 16 de abril de 2024
Orientação Técnico-Pedagógica EMBcae Nº 001, de 16 de abril de 2024Orientação Técnico-Pedagógica EMBcae Nº 001, de 16 de abril de 2024
Orientação Técnico-Pedagógica EMBcae Nº 001, de 16 de abril de 2024
 
“Sobrou pra mim” - Conto de Ruth Rocha.pptx
“Sobrou pra mim” - Conto de Ruth Rocha.pptx“Sobrou pra mim” - Conto de Ruth Rocha.pptx
“Sobrou pra mim” - Conto de Ruth Rocha.pptx
 
ATIVIDADE AVALIATIVA VOZES VERBAIS 7º ano.pptx
ATIVIDADE AVALIATIVA VOZES VERBAIS 7º ano.pptxATIVIDADE AVALIATIVA VOZES VERBAIS 7º ano.pptx
ATIVIDADE AVALIATIVA VOZES VERBAIS 7º ano.pptx
 
Música Meu Abrigo - Texto e atividade
Música   Meu   Abrigo  -   Texto e atividadeMúsica   Meu   Abrigo  -   Texto e atividade
Música Meu Abrigo - Texto e atividade
 

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