Менять картинки в Delphi

Модераторы: Duncon, Naeel Maqsudov, Игорь Акопян, Хыиуду

Ответить
senator
Сообщения: 23
Зарегистрирован: 08 ноя 2004, 19:35
Откуда: Almaty
Контактная информация:

Здравствуйте! У меня такой вопрос. Делаю анкету студента, и там помещаются две фотографии: одна на другую. И нужно сделать так, чтобы при нажатии на кнопку показывалась одна фотография, нажал еще раз на кнопку и появилась другая фотография. Заранее спасибо.
Я знаю, что ничего не знаю. Но остальные не знают даже этого
AndreykA
Сообщения: 48
Зарегистрирован: 15 ноя 2004, 12:55
Откуда: Москва
Контактная информация:

самый простой вариант - сделать переменную флаг, которая будет меняться при нажатии кнопки и в соответствии со значением флага показывать 1-ую или 2-ую фотку
Аватара пользователя
Romeo
Сообщения: 3126
Зарегистрирован: 02 мар 2004, 17:25
Откуда: Крым, Севастополь
Контактная информация:

Просто играться флажком Vision.
Entites should not be multiplied beyond necessity @ William Occam
---
Для выделения С++ кода используйте конструкцию [ code=cpp ] Код [ /code ] (без пробелов)
---
Сообщение "Спасибо" малоинформативно. Благодарность правильнее высказать, воспользовавшись кнопкой "Reputation" в виде звёздочки, расположенной в левом нижнем углу рамки сообщения.
senator
Сообщения: 23
Зарегистрирован: 08 ноя 2004, 19:35
Откуда: Almaty
Контактная информация:

AndreykA писал(а):самый простой вариант - сделать переменную флаг, которая будет меняться при нажатии кнопки и в соответствии со значением флага показывать 1-ую или 2-ую фотку
Простите, что за переменная "флаг"?
Я знаю, что ничего не знаю. Но остальные не знают даже этого
Аватара пользователя
Romeo
Сообщения: 3126
Зарегистрирован: 02 мар 2004, 17:25
Откуда: Крым, Севастополь
Контактная информация:

У картинки есть куча свойств, одно из них - Vision. Это свойство можно менять как в редакторе форм, так и в ходе выполнения прораммы, обращаясь к нему через точку (например img.Vision).
Entites should not be multiplied beyond necessity @ William Occam
---
Для выделения С++ кода используйте конструкцию [ code=cpp ] Код [ /code ] (без пробелов)
---
Сообщение "Спасибо" малоинформативно. Благодарность правильнее высказать, воспользовавшись кнопкой "Reputation" в виде звёздочки, расположенной в левом нижнем углу рамки сообщения.
AndreykA
Сообщения: 48
Зарегистрирован: 15 ноя 2004, 12:55
Откуда: Москва
Контактная информация:

это образно говоря.
просто объявляешь переменную например var MyVariable: boolean;
и когда видна фотка 1, то значение MyVariable := True; а когда фотка 2 соответственно False
а вообще как сказал
Romeo писал(а):Просто играться флажком Vision.
то есть вместо обявления и попеременного присваивания значения переменной, проверяй свойство у картинки
Например если одна из них Visible, то при нажатии кнопки нужно ее сделать Visible := False; , а второй картинке True; и так далее
Аватара пользователя
Naeel Maqsudov
Сообщения: 2570
Зарегистрирован: 20 фев 2004, 19:17
Откуда: Moscow, Russia
Контактная информация:

Наиболее простое решение, как мне кажется, - это использование TImageList + TPaintBox

Фотографии грузятся в TImageList (в Design-time или в Run-time (метод Add))

Для отображения i-той фотографии используется TPaintBox, или любой компонент со своей канвой (Canvas)

Код: Выделить всё

const
  idx:integer=0;
procedure TForm1.PaintBox1Paint(Sender: TObject);
begin
  Imagelist1.Draw(PaintBox1.Canvas,0,0,idx);
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
  idx:=succ(idx) mod Imagelist1.Count;
  PaintBox1.Repaint;
end;

Здесь
1) всякий раз PaintBox1 при своей отрисовке берет idx-ный рисунок из Imagelist1.
2) при нажатии на Button1 циклически уывеличивается idx и инициируется
перерисовка PaintBox1

Т.е. все что нужно - это поменять idx и инициировать перерисовку контрола,
который для свооей отрисовки использует рисунки из ImageList-а.
cg_spooler
Сообщения: 4
Зарегистрирован: 22 дек 2004, 10:48
Контактная информация:

Если размеры фоток одикаковые, то можно поиграться со свойствами .SendToBack, .BringToFront. Имхо это проще.
--=[cg_spooler]=--
Ответить