Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Общие вопросы > Как запихнуть програмно картинку в ImageList


Автор: User 16.3.2005, 13:35
Вот хочу написать модуль, который бы позволял добавлять картинку скажем размером 32х32 в ImageList, при этом все картинки имеющиеся в ImageList показывались бы в виде ComboBox, для выбора их и присвоения кнопкам. Как такое осуществить?
Вобщем хочется програмно менять картинки на кнопках!

Автор: z-END 16.3.2005, 13:50
Код

   Ic := TIcon.Create;
   Ic.LoadFromFile ("BLABLA.ico");
   ImageList1.AddIcon (Ic);

типа так, с *.bmp аналогично

Автор: User 16.3.2005, 14:57
Это создание динамически. а если у меня на форме есть уже ImageList1

Автор: z-END 16.3.2005, 15:01
User я те показываю как в ImageList1 добавить икону, а не его создание

Автор: Snowy 16.3.2005, 15:15
Положи на форму ComboBoxEx и укажи ему имаджлист.
Только строчек пустых наделать де забудь

Автор: User 16.3.2005, 16:22
Код
procedure TForm1.Button3Click(Sender: TObject);
var
  Ic : TBitmap;
begin
   Ic := TBitmap.Create;
   Ic.LoadFromFile('C:\3d.bmp');
   ImageList1.Add(Ic, nil);
end;

Добавляет, но не сохраняет картинку в ImageList1, как быть?

Автор: z-END 16.3.2005, 16:48
куда не сохраняет?

Автор: User 17.3.2005, 11:50
Вот что вышло, после некоторого редактирования: Но хотелосьбы увидеть другие варианты решения сей проблемы


Код

unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, Spin, ComCtrls, ToolWin, ImgList, ExtDlgs;

type
  TForm1 = class(TForm)
    Button1: TButton;
    ImageList1: TImageList;
    ToolBar1: TToolBar;
    ToolButton1: TToolButton;
    SpinEdit1: TSpinEdit;
    Label1: TLabel;
    OpenPictureDialog1: TOpenPictureDialog;
    Button2: TButton;
    Button3: TButton;
    procedure SpinEdit1Change(Sender: TObject);
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
    procedure Button3Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.SpinEdit1Change(Sender: TObject);
begin
ToolButton1.ImageIndex := SpinEdit1.Value;
end;

procedure TForm1.Button1Click(Sender: TObject);
var
  bmp: TBitmap;
begin
  if openpicturedialog1.Execute then
  begin
    bmp := TBitmap.Create;
    bmp.LoadFromFile(OpenPictureDialog1.FileName);
    bmp.Width := ImageList1.Width;
    bmp.Height := ImageList1.Height;
    ImageList1.Add(bmp,nil);
    bmp.Free;
  end;
end;

procedure TForm1.Button2Click(Sender: TObject);
var
  bufbmp,bmp: TBitmap;
  i:integer;
begin
  bmp := TBitmap.Create;
  bufbmp := TBitmap.Create;
  bmp.Height := ImageList1.Height;
  bmp.Width := ImageList1.Width * ImageList1.Count;
  for i:=0 to ImageList1.Count-1 do
    if ImageList1.GetBitmap(i,bufbmp) then
      bmp.Canvas.Draw(i*ImageList1.Width,0,bufbmp);

  bmp.SaveToFile(ExtractFileDir(ParamStr(0))+'\pics.bmp');
  bmp.Free;
  bufbmp.Free;
end;

procedure TForm1.Button3Click(Sender: TObject);
var
  bmp: TBitmap;
begin
  bmp := TBitmap.Create;
  bmp.LoadFromFile(ExtractFileDir(ParamStr(0))+'\pics.bmp');

  ImageList1.Assign(nil);
  ImageList1.Add(bmp,nil);
  bmp.Free;
end;

end.

Автор: Snowy 17.3.2005, 12:03
А зачем такое извращение?
Цитата(User @ 17.3.2005, 11:50)

  bmp.Canvas.Draw(i*ImageList1.Width,0,bufbmp);

Разве нельзя:
Код

  bufbmp.SaveToFile(ExtractFileDir(ParamStr(0))+'\pics.bmp');

И будет тебе щастя.

Автор: User 17.3.2005, 14:46
Можно конечно, кто же спорит

Автор: Snowy 17.3.2005, 14:51
Код

var
  bmp: TBitMap;
  fs:  TFileStream;
begin
  fs:=TFileStream.Create('pics.bmp',fmCreate);
  for i:=0 to ImageList1.Count-1 do
   if ImageList1.GetBitmap(i,bufbmp) then
     bmp.SaveToStream(fs);
  fs.Free;
end;

Такой вариант, имхо надежней.
Только проверь, точно ли в цикл попадаешь.
Может просто условия не выполняются.

Автор: User 17.3.2005, 15:00
Согласен. Спасибо за пример. Спасибо.
Бывает немного закидывает в сторону..... smile

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)