Работа с картинками

DeathBloody

Всем привет! Такой вопрос, возможно ли сделать, чтобы на каждый клик кнопки, появлялась каждый раз другая картинка. Например, нажал кнопку появилась одна картинка, нажал ещё раз появилась другая, ещё раз третья (и всё это на одной форме)Ребят, только не говорите, что такое невозможно осуществить(((
10 ответов

DeathBloody

Так пропиши в обработчике OnClick кнопки смену картинок.


DeathBloody

gorfil, Я и пришел с этим вопросом, чтобы мне помогли сделать смену картинок. Что прописывать-то в OnClick?Ребят, есть варианты?Блин кто-нибудь...


DeathBloody

var
   index : Integer = 0;
procedure TForm1.Button4Click(Sender: TObject);
begin
   repeat
      Inc(index);
      try
      Image1.Picture.Bitmap.LoadFromFile(Format('%s\pics\pic_%.2d.bmp',
         [ExtractFilePath(ParamStr(0)), index]));
      except
         index := 0;
      end;
   until index <> 0;
end;
чем не вариант? Если названия файлов имеют один шаблон (pic_01, pic_02, и т.д.) - то будет циклично перебирать изображения...


DeathBloody

Спасибо конечно, а проще ничего нет?UI, Что значит эта строчка?
Image1.Picture.Bitmap.LoadFromFile(Format('%s\pics\pic_%.2d.bmp',[ExtractFilePath(ParamStr(0)), index]));


DeathBloody

Пропиши имена файлов картинок в массив. Сами файлы сохрани в папке, например Img, внутри папки проекта. В событии клика кнопки пиши:
Const 
  ImgArr : Array[1..10] Of String = ('Картинка 1.bmp','Картинка 1.bmp','Картинка 1.bmp',...,'Картинка 10.bmp');
Var
  Index : Integer = 0;
 
procedure TForm1.Button1Click(Sender: TObject);
begin
  Inc(Index);
  If Index>High(ImgArr) Then Index:=Low(ImgArr);
  Image1.Picture.Bitmap.LoadFromFile('Img\'+ImgArr[Index]); //Загрузим картинку в Image
end;


DeathBloody

Одиночка, Если вам не будет сложно, пожалуйста прокомментируйте ваш код


DeathBloody

Const 
  //Это массив, в который вы вбиваете имена файлов с картинками
  ImgArr : Array[1..10] Of String = ('Картинка 1.bmp','Картинка 1.bmp','Картинка 1.bmp',...,'Картинка 10.bmp');
Var
  Index : Integer = 0; //Это будет индекс выданной на текущий момент картинки в компонент Image
 
procedure TForm1.Button1Click(Sender: TObject); //Это очередной клик кнопки
begin
  Inc(Index); //Наращиваем индекс в массиве имён файлов
  If Index>High(ImgArr) Then Index:=Low(ImgArr); //Если индекс выходит за границы массива - устанавливаем его равным минимальному индексу в этом массиве
  Image1.Picture.Bitmap.LoadFromFile('Img\'+ImgArr[Index]); //Загрузим картинку в Image. Параметром здесь имя файла
end;


DeathBloody

Спасибо, очень помогли!


DeathBloody

а проще ничего нет?
Куда ж проще? Что именно было непонятно в моем решении? Только строка с Format-ом? Так вместо того, чтобы писать
LoadFromFile(ExtractFilePath(ParamStr(0)) + 'pics\pic_' + IntToStr(index) + '.bmp');
, я предпочитаю составлять строку с именем файла при помощи функции Format, что значительно упрощает запись...Одиночка, твой код очень легко приводит к сбоям. Как только текущая папка изменится - код тут же перестанет работать, гораздо надежнее использовать полный (абсолютный, а не относительный) путь к файлам...


DeathBloody

твой код очень легко приводит к сбоям. Как только текущая папка изменится - код тут же перестанет работать, гораздо надежнее использовать полный (абсолютный, а не относительный) путь к файлам...
Специально сделал проект и проверил. Как ни странно, запускал MSWord, открывал разные документы, проводником разные папки открывал. Но картинки нормально менялись. Может я не правильно менял текущую папку? У меня Windows XP и Delphi 7.