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.

Icone1.gif 

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.

Icone2.gif 

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.