Icons e Jpg em BitBtn e SpeedButton’s
Como carregar imagens com extensão (*.ico e *.jpg) para SpeedButton e BitBtn.
Pessoal, tenho visto que muitos colegas procuram imagens (glyph) para colocarem em seus botões sejam eles BitBtn ou SpeedButton, e muitas vezes as imagens encontradas não são suportadas por esses componentes, como as (*.jpg, *.ico, etc...).
Muitas vezes encontramos ícones no estilo XP que serviriam direitinho para serem adicionados em nossos botões, mas os componentes não nos dão suporte nativo para essas imagens, temos como opção tentar levá-las para um outro programa e tentar salvá-las com um formato que realmente seja suportado pelos componentes buttons, eu mesmo já passei por isso, então resolvi correr atrás de uma solução prática, e baseado em uma dica de Zarko Gajic, escrevi esse material para ser utilizado por outros programadores e por eles também melhorado, e assim sendo, que seja novamente divulgado para que possamos engrandecer ainda mais a comunidade delphi.
Em tempo de projeto
Esse material tem o objetivo de mostrar aos colegas como contornar essa situação. Veja a imagem do formulário ainda em tempo de projeto. Aqui além de carregarmos as imagens que estão dentro de um ImageList em run-time para os BitBtn, vamos incrementar um pouco carregando uma imagem a partir do OpenPictureDialog.
Figura 1. Projeto em tempo de designer
Como podemos ver utilizei para montar o exemplo:
3 – BitBtns;
1 – ImageList;
1 – OpenPictureDialog;
1 – Image;
1 – StatusBar.
Em tempo de execução
Abaixo está o projeto em tempo de execução.
Figura 2. Projeto em tempo de execução
Vamos ver logo abaixo os códigos do nosso projeto, ressalto novamente que os colegas podem melhorar esse pequeno exemplo, pois ele tem apenas ilustrativo, tendo como objetivo principal repassar aos colegas que estão iniciando que o delphi tem uma gama de recursos e que explorá-los só depende da criatividade e curiosidade do desenvolvedor. (veja a Listagem 1).
Listagem 1. Descrição da listagem
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, jpeg, ExtCtrls, Buttons, ImgList, ExtDlgs, ComCtrls;
type
TForm1 = class(TForm)
ImgList: TImageList;
Panel1: TPanel;
btn1: TBitBtn;
btn2: TBitBtn;
btn3: TBitBtn;
StBar: TStatusBar;
Image1: TImage;
OpenImg: TOpenPictureDialog;
procedure FormCreate(Sender: TObject);
procedure btn1Click(Sender: TObject);
procedure btn2Click(Sender: TObject);
procedure btn3Click(Sender: TObject);
private
{ Private declarations }
function IconBmp(Btn: TBitBtn; Ind: Integer):TBitMap;
procedure ShowHint(Sender: TOBject);
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.ShowHint(Sender: TOBject);
begin
StBar.Panels[0].Text := GetLongHint (Application.Hint); //Exibiremos os hints na barra de status.
StBar.Panels[1].Text := DateToStr(Now); //Exibiremos a data atual
StBar.Panels[2].Text := 'e-mail: martinsbios@hotmail.com';
end;
function TForm1.IconBmp(Btn: TBitBtn; Ind: Integer):TBitMap;
var
bmp: TBitmap; // A variável bmp vai representar o objeto TBitMap
begin
bmp:=TBitmap.Create; //Criamos o nosso objeto grágico TBitMap
try
ImgList.GetBitmap(Ind,bmp); //As imagens utilizadas estão dentro de um ImageList
Btn.Glyph:=bmp;
finally
bmp.Free;
end;
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
Application.OnHint := ShowHint;
DoubleBuffered := True;
IconBmp(Btn1,0);
IconBmp(Btn2,1);
IconBmp(Btn3,2);
end;
procedure TForm1.btn1Click(Sender: TObject);
begin
ShowMessage('Desculpe, estou desligado, hehehehe!!!');
end;
procedure TForm1.btn2Click(Sender: TObject);
begin
OpenImg.Execute;
if OpenImg.FileName <> '' then //Caso seja selecionada uma imagem exiba…
Image1.Picture.LoadFromFile(OpenImg.FileName)
Else //Do contrário, mostre a mensagem...(assim evitaremos um possível erro caso nada seja
//selecionado
ShowMessage('Não foi selecionada nenhuma imagem para exibição!');
end;
procedure TForm1.btn3Click(Sender: TObject);
begin
ShowMessage('Não foi possível ler esse Cd/DVD piratão...!');
end;
end.
Como vimos é algo bem simples de se fazer, com isso não ficaremos mais presos às limitações desses componentes no quesito imagens, agora fica por conta dos colegas para criarem e recriarem, utilizem o poder da ferramenta que vocês têm em mãos.
Bom desenvolvimento.
Perivaldo Martins (perivaldol@walla.com – martinsbios@gmail.com) é desenvolvedor Delphi desde 1998. Trabalha com dbExpress, IBX e DataSnap em projetos cliente/servidor e multicamadas, atualmente é desenvolvedor na PROCONSULT em Santa Inês – MA, membro ativo do Fórum Clube Delphi.