|
Вопрос # 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 (статус: 1-ый класс), 7 июня 2007, 06:28 [#1]:
хм...
строчка
Edit1.Text:=IntToStr(i);
не нужна, это я для себя писал, для проверки
|
|
Вадим К (статус: Академик), 7 июня 2007, 15:12 [#2]:
to 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)
Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.
|