Экспертная система Delphi.int.ru

Сообщество программистов
Общение, помощь, обмен опытом

Логин:
Пароль:
Регистрация | Забыли пароль?

Delphi.int.ru Expert

Другие разделы портала

Переход к вопросу:

#   

Статистика за сегодня:  


Лучшие эксперты

Подробнее »



Вопрос # 617

/ вопрос решён /

Здравствуйте, уважаемые эксперты!
У меня на форме есть Image1, ImageList1, Button1,
Button2, Button3. Допустим, я ImageList1 загрузил
тремя иконками. Как сделать так, чтобы нажав на
Button1, в Image1 отображалась иконка с индексом
0 (то есть первая), нажав на Button2, отображалась
иконка с индексом 1 (то есть вторая), нажав на Button3
отображалась иконка с индексом 2, (то есть третья) ну
и так далее. Короче говоря, мне нужно чтобы в Image1
отображались разные иконки, как в Memo1 отображается
текст.Заранее благодарен.

Толков Геннадий Викторович Вопрос решён, но можно продолжить его обсуждение в мини-форуме

Вопрос задал: Толков Геннадий Викторович (статус: Посетитель)
Вопрос отправлен: 7 июня 2007, 00:10
Состояние вопроса: решён, ответов: 2.

Ответ #1. Отвечает эксперт: Вадим К

Здравствуйте, Толков Геннадий Викторович!
Здравствуйте, Толков Геннадий Викторович!
Я думаю это вас натолкнёт на полёт мысли
ImageList1.GetBitmap(0,Image1.Picture.Bitmap);
где ноль - индекс картинки в ImageList1

Ответ отправил: Вадим К (статус: Академик)
Время отправки: 7 июня 2007, 01:33
Оценка за ответ: 5

Ответ #2. Отвечает эксперт: Venom

Здравствуйте, Толков Геннадий Викторович!
Можно сделать следующим образом:
1. в свойстве Tag для каждой кнопки указать номер картинки, которая будет отображаться при нажатии на кнопку.
2. по событию Onclick для одной из кнопок прописать:

var bitmap:TBitmap;
i:integer;
begin
bitmap:=TBitMap.Create;
i:=(Sender as TButton).Tag;
Edit1.Text:=IntToStr(i);
ImageList1.GetBitMap(i,bitmap);
Image1.Picture.Bitmap:=bitmap;
end;

3.Данную процедуру (например, Button1Click(Sender) )указать в событии onclick для каждой кнопки.

Тогда одной процедурой можно решить подобную проблему.

Ответ отправил: Venom (статус: 1-ый класс)
Время отправки: 7 июня 2007, 06:27
Оценка за ответ: 5


Мини-форум вопроса

Всего сообщений: 4; последнее сообщение — 8 июня 2007, 11:09; участников в обсуждении: 2.
Venom

Venom (статус: 1-ый класс), 7 июня 2007, 06:28 [#1]:

хм...
строчка
Edit1.Text:=IntToStr(i);
не нужна, это я для себя писал, для проверки :)
Вадим К

Вадим К (статус: Академик), 7 июня 2007, 15:12 [#2]:

to Venom:
Мне кажеться, у вас будут утечки памяти в приведённом коде. Объект то вы создаёте, а кто удалять будет за собой?
Галочка "подтверждения прочтения" - вселенское зло.
Venom

Venom (статус: 1-ый класс), 8 июня 2007, 05:51 [#3]:

Вы правы, писал второпях, замечание принимается :)
2Толков Геннадий Викторович
в самом конце желательно добавить Bitmap.Free;
Вадим К

Вадим К (статус: Академик), 8 июня 2007, 11:09 [#4]:

Во, вот теперь хорошо. А для общего развития добавлю, что вообщето конструкция присваивания одного объекта другому и удалением, например так
var p,t:TObject;
begin
p:=TObject.create;
t:=TObject.create;
p:=t;
t.free;
p.free;

В этом коде на строке p.free будет исключение, так как объекта уже нет. почему - подумайте.

Но в нашем случае, с картинками, всё нормально - так как в коде происходит не присваивание указателей (это подсказка к предыдущему вопросу) а реальное копирование. Можете сами подсмотреть в Graphics.pas
Галочка "подтверждения прочтения" - вселенское зло.

31 января 2011, 19:27: Статус вопроса изменён на решённый (изменил модератор Ерёмин А.А.): Автоматическая обработка (2 и более ответов с оценкой 5)

Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.

Версия движка: 2.6+ (26.01.2011)
Текущее время: 22 февраля 2025, 11:57
Выполнено за 0.02 сек.