Модераторы: Poseidon, Snowy, bems, MetalFan
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Как запихнуть програмно картинку в ImageList 
:(
    Опции темы
User
Дата 16.3.2005, 13:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 213
Регистрация: 5.11.2004

Репутация: нет
Всего: нет



Вот хочу написать модуль, который бы позволял добавлять картинку скажем размером 32х32 в ImageList, при этом все картинки имеющиеся в ImageList показывались бы в виде ComboBox, для выбора их и присвоения кнопкам. Как такое осуществить?
Вобщем хочется програмно менять картинки на кнопках!
PM MAIL WWW   Вверх
z-END
Дата 16.3.2005, 13:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


прафесар™
****


Профиль
Группа: Комодератор
Сообщений: 3014
Регистрация: 13.3.2003
Где: Венья, Пиетари

Репутация: 11
Всего: 102



Код

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

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


--------------------
Каждый чилавек пасвоему праф...а памоему НЕТ! 

PM WWW ICQ   Вверх
User
Дата 16.3.2005, 14:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 213
Регистрация: 5.11.2004

Репутация: нет
Всего: нет



Это создание динамически. а если у меня на форме есть уже ImageList1
PM MAIL WWW   Вверх
z-END
Дата 16.3.2005, 15:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


прафесар™
****


Профиль
Группа: Комодератор
Сообщений: 3014
Регистрация: 13.3.2003
Где: Венья, Пиетари

Репутация: 11
Всего: 102



User я те показываю как в ImageList1 добавить икону, а не его создание


--------------------
Каждый чилавек пасвоему праф...а памоему НЕТ! 

PM WWW ICQ   Вверх
Snowy
Дата 16.3.2005, 15:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 11363
Регистрация: 13.10.2004
Где: Питер

Репутация: 192
Всего: 484



Положи на форму ComboBoxEx и укажи ему имаджлист.
Только строчек пустых наделать де забудь
PM MAIL   Вверх
User
Дата 16.3.2005, 16:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 213
Регистрация: 5.11.2004

Репутация: нет
Всего: нет



Код
procedure TForm1.Button3Click(Sender: TObject);
var
  Ic : TBitmap;
begin
   Ic := TBitmap.Create;
   Ic.LoadFromFile('C:\3d.bmp');
   ImageList1.Add(Ic, nil);
end;

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

Это сообщение отредактировал(а) Alex - 17.3.2005, 18:02
PM MAIL WWW   Вверх
z-END
Дата 16.3.2005, 16:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


прафесар™
****


Профиль
Группа: Комодератор
Сообщений: 3014
Регистрация: 13.3.2003
Где: Венья, Пиетари

Репутация: 11
Всего: 102



куда не сохраняет?


--------------------
Каждый чилавек пасвоему праф...а памоему НЕТ! 

PM WWW ICQ   Вверх
User
Дата 17.3.2005, 11:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 213
Регистрация: 5.11.2004

Репутация: нет
Всего: нет



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


Код

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.


Это сообщение отредактировал(а) Alex - 17.3.2005, 18:02
PM MAIL WWW   Вверх
Snowy
Дата 17.3.2005, 12:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 11363
Регистрация: 13.10.2004
Где: Питер

Репутация: 192
Всего: 484



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

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

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

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

И будет тебе щастя.
PM MAIL   Вверх
User
Дата 17.3.2005, 14:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 213
Регистрация: 5.11.2004

Репутация: нет
Всего: нет



Можно конечно, кто же спорит
PM MAIL WWW   Вверх
Snowy
Дата 17.3.2005, 14:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 11363
Регистрация: 13.10.2004
Где: Питер

Репутация: 192
Всего: 484



Код

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;

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

Это сообщение отредактировал(а) Snowy - 17.3.2005, 14:59
PM MAIL   Вверх
User
Дата 17.3.2005, 15:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 213
Регистрация: 5.11.2004

Репутация: нет
Всего: нет



Согласен. Спасибо за пример. Спасибо.
Бывает немного закидывает в сторону..... smile
PM MAIL WWW   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Общие вопросы"
SnowyMetalFan
bemsPoseidon
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0920 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.