Como colocar um ImageList em um SpeedButton
Pessoal estou criando um formulario para os usuarios montar seus proprios ShortCut e ai estou querendo ja deixar umas imagens carregados em um ImageList para que o usuario escolha, mas no SpeedButton nao tem como colocar um ImageList....
ou alguem tem um outra ideia para me ajudar ???
ou alguem tem um outra ideia para me ajudar ???
Robson Morais
Curtidas 0
Respostas
Marco Salles
11/06/2010
sei não...
Usar um ActionList , definir neles as imagems ( Açoes comas respectivas Imagems)
Varrer Tipo dando um Next , Last , First , etc... essas açoes , associando respectivamente essas
açoes no SpeedButton , não daria Certo ???
Pensei rápido , pode ser que tenha coisa melhor ( provável )
Mas não funcionaria ?????
GOSTEI 0
Robson Morais
11/06/2010
é as vezes nao ficaria legal mesmo,
entao mas alguem teria alguma ideia de como eu poderia fazer isso, pois eu estava pensando aqui em salvar images no banco de dados e ai o usuario buscar essa imagem la...
mas será que ficaria legal ????
entao mas alguem teria alguma ideia de como eu poderia fazer isso, pois eu estava pensando aqui em salvar images no banco de dados e ai o usuario buscar essa imagem la...
mas será que ficaria legal ????
GOSTEI 0
Marco Salles
11/06/2010
beleza amigo , uma outra sugestão , mais Orientada a Objeto é usar uma classe para Fazer Isto
Aquela mesma Historia , defina uma Unit ( Não esquente pela quantidade de Uses do Seu Projeto , melhor
isto do que codigos espalhados no Seu Form )
E escreva o Método abaixo
No formulári oque vc via usar essa Uses defina pode ser na Implementation ( Porque iremos trabaçhar com
Métodos de Classe e Propriedades de Classe ) Não sera necessário Instanciar
Coloque o Seu SpeedButton e Seu ImageList ( Adione ao mesmo Varios Bitmaps acho que no formato 16X16)
Coloque quatro Botões para Teste com os Seguistes Captios
com isto vc consegue alterar os Glyph do seus SpeedButons em RumTime
unit uNomeDaSuaUnit;
interface
uses
Controls,Buttons;
Type
TAcao= class
private
class function GetFIndice: Integer;
class procedure SetFIndice(const Value: Integer);
class procedure Execute(cSbn:TSpeedButton; cImageList:TImageList);
property Indice:Integer read GetFIndice Write SetFIndice;
public
class procedure First(cSbn:TSpeedButton;cImageList:TImageList);
class procedure Prior(cSbn:TSpeedButton; cImageList:TImageList);
class procedure Next(cSbn:TSpeedButton; cImageList:TImageList);
class procedure Last(cSbn:TSpeedButton;cImageList:TImageList);
end;
implementation
{$WRITEABLECONST ON}
const
FImageList:TImageList = nil;
FSbn:TSpeedButton = nil;
FIndice:integer = -1;
{$WRITEABLECONST OFF}
{ TAcao }
class procedure TAcao.Execute(cSbn:TSpeedButton; cImageList:TImageList);
begin
cSbn.Glyph:=nil;
// FImageList:= cImageList;
cImageList.GetBitmap(FIndice,cSbn.Glyph);
end;
class procedure TAcao.First(cSbn:TSpeedButton; cImageList:TImageList);
begin
FIndice:=0;
Execute(cSbn,cImageList);
end;
class procedure TAcao.Last(cSbn:TSpeedButton; cImageList:TImageList);
begin
FIndice:=cImageList.Count-1;
Execute(cSbn,cImageList);
end;
class procedure TAcao.Next(cSbn:TSpeedButton; cImageList:TImageList);
begin
if FIndice < cImageList.Count-1 then
FIndice:=FIndice+1;
Execute(cSbn,cImageList);
end;
class procedure TAcao.Prior(cSbn:TSpeedButton; cImageList:TImageList);
begin
if FIndice > 0 then
FIndice:=FIndice - 1;
Execute(cSbn,cImageList);
end;
{****************************************************************************}
class function TAcao.GetFIndice: Integer;
begin
result:=FIndice;
end;
{*********************************************************************************** }
class procedure TAcao.SetFIndice(const Value: Integer);
begin
FIndice:=Value;
end;
end.
procedure TForm3.btnPrimeiroClick(Sender: TObject); begin TAcao.First(SpeedButton1,ImageList1); end; procedure TForm3.btnAnteriorClick(Sender: TObject); begin TAcao.Prior(SpeedButton1,ImageList1); end; procedure TForm3.btnProximoClick(Sender: TObject); begin TAcao.Next(SpeedButton1,ImageList1); end; procedure TForm3.btnUltimoClick(Sender: TObject); begin TAcao.Last(SpeedButton1,ImageList1); end;
GOSTEI 0
Marco Salles
11/06/2010
beleza amigo , uma outra sugestão , mais Orientada a Objeto é usar uma classe para Fazer Isto
Aquela mesma Historia , defina uma Unit ( Não esquente pela quantidade de Uses do Seu Projeto , melhor
isto do que codigos espalhados no Seu Form )
E escreva o Método abaixo
No formulári oque vc via usar essa Uses defina pode ser na Implementation ( Porque iremos trabaçhar com
Métodos de Classe e Propriedades de Classe ) Não sera necessário Instanciar
Coloque o Seu SpeedButton e Seu ImageList ( Adione ao mesmo Varios Bitmaps acho que no formato 16X16)
Coloque quatro Botões para Teste com os Seguistes Captios
com isto vc consegue alterar os Glyph do seus SpeedButons em RumTime
unit uNomeDaSuaUnit;
interface
uses
Controls,Buttons;
Type
TAcao= class
private
class function GetFIndice: Integer;
class procedure SetFIndice(const Value: Integer);
class procedure Execute(cSbn:TSpeedButton; cImageList:TImageList);
property Indice:Integer read GetFIndice Write SetFIndice;
public
class procedure First(cSbn:TSpeedButton;cImageList:TImageList);
class procedure Prior(cSbn:TSpeedButton; cImageList:TImageList);
class procedure Next(cSbn:TSpeedButton; cImageList:TImageList);
class procedure Last(cSbn:TSpeedButton;cImageList:TImageList);
end;
implementation
{$WRITEABLECONST ON}
const
FIndice:integer = -1;
{$WRITEABLECONST OFF}
{ TAcao }
class procedure TAcao.Execute(cSbn:TSpeedButton; cImageList:TImageList);
begin
cSbn.Glyph:=nil;
// FImageList:= cImageList;
cImageList.GetBitmap(FIndice,cSbn.Glyph);
end;
class procedure TAcao.First(cSbn:TSpeedButton; cImageList:TImageList);
begin
FIndice:=0;
Execute(cSbn,cImageList);
end;
class procedure TAcao.Last(cSbn:TSpeedButton; cImageList:TImageList);
begin
FIndice:=cImageList.Count-1;
Execute(cSbn,cImageList);
end;
class procedure TAcao.Next(cSbn:TSpeedButton; cImageList:TImageList);
begin
if FIndice < cImageList.Count-1 then
FIndice:=FIndice+1;
Execute(cSbn,cImageList);
end;
class procedure TAcao.Prior(cSbn:TSpeedButton; cImageList:TImageList);
begin
if FIndice > 0 then
FIndice:=FIndice - 1;
Execute(cSbn,cImageList);
end;
{****************************************************************************}
class function TAcao.GetFIndice: Integer;
begin
result:=FIndice;
end;
{*********************************************************************************** }
class procedure TAcao.SetFIndice(const Value: Integer);
begin
FIndice:=Value;
end;
end.
procedure TForm3.btnPrimeiroClick(Sender: TObject); begin TAcao.First(SpeedButton1,ImageList1); end; procedure TForm3.btnAnteriorClick(Sender: TObject); begin TAcao.Prior(SpeedButton1,ImageList1); end; procedure TForm3.btnProximoClick(Sender: TObject); begin TAcao.Next(SpeedButton1,ImageList1); end; procedure TForm3.btnUltimoClick(Sender: TObject); begin TAcao.Last(SpeedButton1,ImageList1); end;
GOSTEI 0
Robson Morais
11/06/2010
consegui resolver nessa maneira
mas a q voce passou vou testar também!
SpeedButton1.Glyph.Assign(nil); ImageList1.GetBitmap(0, SpeedButton1.Glyph);
mas a q voce passou vou testar também!
GOSTEI 0
Marco Salles
11/06/2010
consegui resolver nessa maneira
mas a q voce passou vou testar também!
perceba que esta Instrução faz parte do método execute
SpeedButton1.Glyph.Assign(nil); ImageList1.GetBitmap(0, SpeedButton1.Glyph);
mas a q voce passou vou testar também!
class procedure TAcao.Execute(cSbn:TSpeedButton; cImageList:TImageList); begin cSbn.Glyph:=nil; // FImageList:= cImageList; cImageList.GetBitmap(FIndice,cSbn.Glyph); end;
GOSTEI 0