Страница 1 из 1

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

Добавлено: 17 ноя 2004, 19:20
senator
Здравствуйте! У меня такой вопрос. Делаю анкету студента, и там помещаются две фотографии: одна на другую. И нужно сделать так, чтобы при нажатии на кнопку показывалась одна фотография, нажал еще раз на кнопку и появилась другая фотография. Заранее спасибо.

Добавлено: 18 ноя 2004, 15:02
AndreykA
самый простой вариант - сделать переменную флаг, которая будет меняться при нажатии кнопки и в соответствии со значением флага показывать 1-ую или 2-ую фотку

Добавлено: 18 ноя 2004, 16:34
Romeo
Просто играться флажком Vision.

Добавлено: 18 ноя 2004, 17:39
senator
AndreykA писал(а):самый простой вариант - сделать переменную флаг, которая будет меняться при нажатии кнопки и в соответствии со значением флага показывать 1-ую или 2-ую фотку
Простите, что за переменная "флаг"?

Добавлено: 18 ноя 2004, 17:47
Romeo
У картинки есть куча свойств, одно из них - Vision. Это свойство можно менять как в редакторе форм, так и в ходе выполнения прораммы, обращаясь к нему через точку (например img.Vision).

Добавлено: 18 ноя 2004, 17:50
AndreykA
это образно говоря.
просто объявляешь переменную например var MyVariable: boolean;
и когда видна фотка 1, то значение MyVariable := True; а когда фотка 2 соответственно False
а вообще как сказал
Romeo писал(а):Просто играться флажком Vision.
то есть вместо обявления и попеременного присваивания значения переменной, проверяй свойство у картинки
Например если одна из них Visible, то при нажатии кнопки нужно ее сделать Visible := False; , а второй картинке True; и так далее

Добавлено: 01 дек 2004, 05:40
Naeel Maqsudov
Наиболее простое решение, как мне кажется, - это использование 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-а.

Добавлено: 23 дек 2004, 12:50
cg_spooler
Если размеры фоток одикаковые, то можно поиграться со свойствами .SendToBack, .BringToFront. Имхо это проще.