Менять картинки в Delphi
Модераторы: Duncon, Naeel Maqsudov, Игорь Акопян, Хыиуду
Здравствуйте! У меня такой вопрос. Делаю анкету студента, и там помещаются две фотографии: одна на другую. И нужно сделать так, чтобы при нажатии на кнопку показывалась одна фотография, нажал еще раз на кнопку и появилась другая фотография. Заранее спасибо.
Я знаю, что ничего не знаю. Но остальные не знают даже этого
самый простой вариант - сделать переменную флаг, которая будет меняться при нажатии кнопки и в соответствии со значением флага показывать 1-ую или 2-ую фотку
- Romeo
- Сообщения: 3126
- Зарегистрирован: 02 мар 2004, 17:25
- Откуда: Крым, Севастополь
- Контактная информация:
Просто играться флажком Vision.
Entites should not be multiplied beyond necessity @ William Occam
---
Для выделения С++ кода используйте конструкцию [ code=cpp ] Код [ /code ] (без пробелов)
---
Сообщение "Спасибо" малоинформативно. Благодарность правильнее высказать, воспользовавшись кнопкой "Reputation" в виде звёздочки, расположенной в левом нижнем углу рамки сообщения.
---
Для выделения С++ кода используйте конструкцию [ code=cpp ] Код [ /code ] (без пробелов)
---
Сообщение "Спасибо" малоинформативно. Благодарность правильнее высказать, воспользовавшись кнопкой "Reputation" в виде звёздочки, расположенной в левом нижнем углу рамки сообщения.
Простите, что за переменная "флаг"?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" в виде звёздочки, расположенной в левом нижнем углу рамки сообщения.
---
Для выделения С++ кода используйте конструкцию [ code=cpp ] Код [ /code ] (без пробелов)
---
Сообщение "Спасибо" малоинформативно. Благодарность правильнее высказать, воспользовавшись кнопкой "Reputation" в виде звёздочки, расположенной в левом нижнем углу рамки сообщения.
это образно говоря.
просто объявляешь переменную например var MyVariable: boolean;
и когда видна фотка 1, то значение MyVariable := True; а когда фотка 2 соответственно False
а вообще как сказал
Например если одна из них Visible, то при нажатии кнопки нужно ее сделать Visible := False; , а второй картинке True; и так далее
просто объявляешь переменную например 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)
Здесь
1) всякий раз PaintBox1 при своей отрисовке берет idx-ный рисунок из Imagelist1.
2) при нажатии на Button1 циклически уывеличивается idx и инициируется
перерисовка PaintBox1
Т.е. все что нужно - это поменять idx и инициировать перерисовку контрола,
который для свооей отрисовки использует рисунки из ImageList-а.
Фотографии грузятся в 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-а.
-
- Сообщения: 4
- Зарегистрирован: 22 дек 2004, 10:48
- Контактная информация:
Если размеры фоток одикаковые, то можно поиграться со свойствами .SendToBack, .BringToFront. Имхо это проще.
--=[cg_spooler]=--