Ir para conteúdo
Fórum Script Brasil
  • 0

(Resolvido)Selecionar imagens de um TImageList


robinhocne

Pergunta

Tive uma ideia de fazer que o usuário possa selecionar a imagem que ele quer que mostre em um determinado botão, mas essas imagens eu queria deixar já no ImageList e assim quando eu teria um cadastro dos botões e as imagens que eles tem, tipo assim;

informo qual o botão e pesquiso a imagem que está dentro de um TImageList e selecionar uma determinada image e salvo para esse botão, tpo as imagens ter um ID, mas não queria salvar essas imagens no banco de dados, queria pegar todas de um TImageList

Editado por robinhocne
Link para o comentário
Compartilhar em outros sites

13 respostass a esta questão

Posts Recomendados

  • 0

exemplo:

Como carregar um BMP de um ImageList em um Bitbtn

unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, Buttons, ImgList;

type
  TForm1 = class(TForm)
    ImageList1: TImageList;
    BitBtn1: TBitBtn;
    BitBtn2: TBitBtn;
    BitBtn3: TBitBtn;
    procedure BitBtn1Click(Sender: TObject);
    procedure BitBtn2Click(Sender: TObject);
    procedure BitBtn3Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.BitBtn1Click(Sender: TObject);
begin
   ImageList1.GetBitmap(0,BitBtn1.Glyph);
end;

procedure TForm1.BitBtn2Click(Sender: TObject);
begin
   ImageList1.GetBitmap(1,BitBtn2.Glyph);
end;

procedure TForm1.BitBtn3Click(Sender: TObject);
begin
   ImageList1.GetBitmap(2,BitBtn3.Glyph);
end;

end.

abraço

Link para o comentário
Compartilhar em outros sites

  • 0

faça assim... vai mostrar em um listview as imagens que estão no imagelist

procedure TForm1.Button1Click(Sender: TObject);
begin
   ListView1.ViewStyle := vsIcon;
   ListView1.LargeImages := ImageList1;
   ListView1.Items.Add.ImageIndex := 0;
   ListView1.Items.Add.ImageIndex := 1;
   ListView1.Items.Add.ImageIndex := 2;
end;

abraço

Link para o comentário
Compartilhar em outros sites

  • 0
faça assim... vai mostrar em um listview as imagens que estão no imagelist

procedure TForm1.Button1Click(Sender: TObject);
begin
   ListView1.ViewStyle := vsIcon;
   ListView1.LargeImages := ImageList1;
   ListView1.Items.Add.ImageIndex := 0;
   ListView1.Items.Add.ImageIndex := 1;
   ListView1.Items.Add.ImageIndex := 2;
end;

abraço

Perfeito, funcionou corretamente.......valeu Jhonas......mas queria ajuda em outra coisa se possivel.....

Como pego uma imagem de um SpeedButton e coloco em outro SpeedButton ?

Link para o comentário
Compartilhar em outros sites

  • 0
Como pego uma imagem de um SpeedButton e coloco em outro SpeedButton ?

amigo.. isso voce deveria saber

SpeedButton2.Glyph := SpeedButton1.Glyph;

abraço

Opa, foi descuido meu.....é que tinha tentando assim........SpeedButton2.Glyph.LoadFromFile(SpeedButton1.Glyph);

Obrigado pela atenção

mas agora já batalhei aqui e não consegui.......eu crio alguns SpeedButton em tempo de execução, mas já tenho uns criados no menu......e ai quando eu crio eles eu tenho que pegar a imagem no que já está criado, mas eu pego o nome do botão de dentro de uma consulta......ficou assim:

SpbShort := TSpeedButton.Create(Self);

          with SpbShort do
            begin
              Name    := 'TF' + Dtm.QryAtalhos.FieldByName('AtlFormulario').AsString;
              Caption := Dtm.QryAtalhos.FieldByName('AtlNome').AsString;
              Glyph   := TSpeedButton(FindComponent(Dtm.QryAtalhos.FieldByName('AtlFormulario').AsString)).Glyph;// dá erro aki
              Left    := 8 + Espaco;
              Top     := 8 + Altura;
              Width   := 105;
              Height  := 35;
              Parent  := pnAtalhos;
              Visible := false;
              OnClick := ChamaAtalhos;
            end;

mas ai dá erro na linha que eu vou pegar a imagem no botão que já está criado.

Editado por robinhocne
Link para o comentário
Compartilhar em outros sites

  • 0
mas agora já batalhei aqui e não consegui.......eu crio alguns SpeedButton em tempo de execução, mas já tenho uns criados no menu......e ai quando eu crio eles eu tenho que pegar a imagem no que já está criado, mas eu pego o nome do botão de dentro de uma consulta

amigo, não vejo muito sentido nessa lógica ...se eu crio botões em tempo de execução, eu tambem deveria pegar as imagens de dentro do meu imagelist e não de outro botão

então ficaria mais adequado fazer assim:

procedure TForm1.Button1Click(Sender: TObject);
var
  i: Integer;
const
  NamePrefix = 'SpeedButton';
begin
   // CRIAR 3 BOTÕES ( SpeedButton ) EM TEMPO DE EXECUÇÃO
   for i := 1 to 3 do begin
     TSpeedButton.Create(Self).Name := NamePrefix + IntToStr(i);
     with TSpeedButton(FindComponent(NamePrefix + IntToStr(i))) do
     begin
       Left := 10;
       Top := i * 25;
       Parent := self;
     end;
   end;

  // CADA BOTÃO RECEBE A IMAGEM DEFINIDA NO IMAGELIST
  for i := 1 to 4 do begin
     if Components[i] is TSpeedButton then
        ImageList1.GetBitmap(i-2,TSpeedButton(FindComponent(NamePrefix + IntToStr(i-1))).Glyph);
  end;

end;

OBS: se não for isso que voce quer, faça uma adaptação ao seu código

abraço

Link para o comentário
Compartilhar em outros sites

  • 0

é que funciona assim;

No formulário principal coloquei um PageControl, separando alguns botões por modulos e fiz um formulário que o usuario poder criar atalhos que automaticamente quando abre o sistema apareça no canto direito da tela do sistema os botões de atalhos e caso tenha um atalho de um determinado botão então eu queria que ele mostrasse a mesma imagem daquele botão, sem precisar ficar pegando do ImageList.

Entendeu ?

Link para o comentário
Compartilhar em outros sites

  • 0
Já dei a resposta a voce ... está nos posts acima.

agora é pensar um pouco para achar a resposta

abraço

Consegui resolver uma boa parte e agora só falta uma coisa.......

Assim Resolveu o que eu precisava de pegar a imagem de um botão e passar para o outro.

TSpeedButton(FindComponent('TF' + Dtm.QryAtalhos.FieldByName('AtlFormulario').AsString)).Glyph := TSpeedButton(FindComponent(Dtm.QryAtalhos.FieldByName('AtlFormulario').AsString)).Glyph;
mas existe uns casos em que o botão que está no atalho não ter no menu, porque ele é acessado por dentro de algum formulário, sendo assim eu teria que verificar se nos botões que são para acessos no de formularios não ter ele deixa sem imagem no botão de atalho, fiz dessa maneira embaixo mas está dando erro de invalid class typecast. tipo tinha que pegar e ver se o botão
TSpeedButton(FindComponent('TF' + Dtm.QryAtalhos.FieldByName('AtlFormulario').AsString)).name
não ter um com o nome de
TSpeedButton(FindComponent(Dtm.QryAtalhos.FieldByName('AtlFormulario').AsString)).name
então ele pula, porque como está abaixo está dando erro.
for test := 0 to ComponentCount -1 do
      begin

         if TSpeedButton(FindComponent(Dtm.QryAtalhos.FieldByName('AtlFormulario').AsString)).Name = ( Components [test] as TSpeedButton ).Name then
               begin
                 TSpeedButton(FindComponent('TF' + Dtm.QryAtalhos.FieldByName('AtlFormulario').AsString)).Glyph := TSpeedButton(FindComponent(Dtm.QryAtalhos.FieldByName('AtlFormulario').AsString)).Glyph;
               end;


       end;

Link para o comentário
Compartilhar em outros sites

  • 0

veja onde voce esta errando:

(TSpeedButton(FindComponent(Nome_do_Componente)).Glyph);
for test := 0 to ComponentCount -1 do
      begin

         if TSpeedButton(FindComponent(Dtm.QryAtalhos.FieldByName('AtlFormulario').AsString)).Name = ( Components [test] as TSpeedButton ).Name then
               begin
                 TSpeedButton(FindComponent('TF' + Dtm.QryAtalhos.FieldByName('AtlFormulario').AsString)).Glyph := TSpeedButton(FindComponent(Dtm.QryAtalhos.FieldByName('AtlFormulario').AsString)).Glyph;
               end;


       end;

OBS: o nome do componente está variando igualmente junto com a pesquisa do componente ?

abraço

Link para o comentário
Compartilhar em outros sites

  • 0
veja onde voce esta errando:

(TSpeedButton(FindComponent(Nome_do_Componente)).Glyph);
for test := 0 to ComponentCount -1 do
      begin

         if TSpeedButton(FindComponent(Dtm.QryAtalhos.FieldByName('AtlFormulario').AsString)).Name = ( Components [test] as TSpeedButton ).Name then
               begin
                 TSpeedButton(FindComponent('TF' + Dtm.QryAtalhos.FieldByName('AtlFormulario').AsString)).Glyph := TSpeedButton(FindComponent(Dtm.QryAtalhos.FieldByName('AtlFormulario').AsString)).Glyph;
               end;


       end;

OBS: o nome do componente está variando igualmente junto com a pesquisa do componente ?

abraço

Sim ele tem que variar......

Porque eu faço assim......

Verifico se o Atalho vai ser igual ao botão de um menu, porque se ele for igual vai pegar a imagem do botão do menu se não for ele vai ficar sem imagem, mas acontece que quando tem o atalho e não o botão de menu ele dá erro.

Link para o comentário
Compartilhar em outros sites

  • 0

Consegui resolver com Ajuda de um amigo

com uma função

function ExisteSpeedButton(AButtonName: String): boolean;
var
  lButton : TComponent;
begin
  Result  := False;
  lButton := FrmPrincipal.FindComponent(AButtonName);
  Result  := lButton <> nil;
end;
Então na hora de ver os Atalhos com a função verifico se esse botão existe e ai passo a imagem, caso não existe fica sem imagem.
if ExisteSpeedButton(Dtm.QryAtalhos.FieldByName('AtlFormulario').AsString) then
   begin
       TSpeedButton(FindComponent('TF' + Dtm.QryAtalhos.FieldByName('AtlFormulario').AsString)).Glyph := TSpeedButton(FindComponent(Dtm.QryAtalhos.FieldByName('AtlFormulario').AsString)).Glyph;
   end;

Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,3k
    • Posts
      652,3k
×
×
  • Criar Novo...