Модераторы: Snowy, Alexeis, MetalFan
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Смена изображений, Смена изображений 
:(
    Опции темы
Jamb0
Дата 28.2.2010, 14:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 10
Регистрация: 25.2.2010

Репутация: нет
Всего: нет



В листе есть список нужных картинок. В Image находится первая картинка. Как сделать, что бы при клике на кнопку, второе изображение сменило первое в стиле паравозика. То есть будет выезжать со строны и перекрывать\замещать первое. Желательно увидеть пример. Без сторонних компонентов.
PM MAIL   Вверх
JnK
  Дата 28.2.2010, 15:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 11
Регистрация: 24.3.2007

Репутация: нет
Всего: нет



Разместить 2 Image. (который главный, другой вне зоны видимости) лучше на Panel.
Потом при нажатии запускать функцию которая загружает картинку во 2-й Image (который находится за пределами видимости) и в цикле двигать по Left картинку (картинки). 
При повторном делать сброс, Image1 принимает картинку от Image2 и становится на свое начальное место , после Image2 тоже на начальные координаты (тоесть за пределы видимости).


Это сообщение отредактировал(а) JnK - 28.2.2010, 15:07
PM MAIL   Вверх
Jamb0
Дата 11.3.2010, 15:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 10
Регистрация: 25.2.2010

Репутация: нет
Всего: нет



А может ли кто кодом помочь. А то что не пишу, в непонятно каком месте слетает. Может есть у кого простенькое но рабочее решение. Или возможно кто то напишет. Очень нужно  smile 
PM MAIL   Вверх
~FoX~
Дата 11.3.2010, 18:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


НЕ рыжий!!!
****


Профиль
Группа: Участник Клуба
Сообщений: 2819
Регистрация: 8.10.2003
Где: Зеленоград

Репутация: 2
Всего: 68



Цитата(Jamb0 @  11.3.2010,  16:27 Найти цитируемый пост)
А то что не пишу, в непонятно каком месте слетает

Либо давай код, либо в центр помощи...


--------------------
user posted image
…множественность никогда не следует полагать без необходимости…
PM MAIL WWW ICQ Jabber   Вверх
Jamb0
Дата 11.3.2010, 22:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 10
Регистрация: 25.2.2010

Репутация: нет
Всего: нет



Код

procedure TForm1.IMGPosition;
begin
  i:=0;
  fun:=0;
  Name_1 := ListBox.Items[i];
  IMG_1.Picture.LoadFromFile(Name_1);

  i:=i+1;
  Name_2:= ListBox.Items[i];
  IMG_2.Picture.LoadFromFile(Name_2);
end;

procedure TForm1.imgBtRightClick(Sender: TObject);
begin
  Ololo:=1;
  Timer_Right.Enabled:=true;
end;

procedure TForm1.Timer_RightTimer(Sender: TObject);
begin
if fun=0 then
    begin
    if IMG_2.Left=0 then
        begin
          IMG_1.Left:=-520;
          Timer_Right.Enabled:=false;
          Timer_left.Enabled:=false;
          ReloadRight;
        end
      else
        begin
          IMG_1.Left:=IMG_1.Left+10;
          IMG_2.Left:=IMG_2.Left+10;
        end;
    end;

     if fun=1 then
      begin
      if IMG_1.Left=10 then
        begin
          IMG_2.Left:=-520;
          Timer_Right.Enabled:=false;
          Timer_left.Enabled:=false;
          ReloadRight;
        end
      else
      begin
        IMG_2.Left:=IMG_2.Left+10;
        IMG_1.Left:=IMG_1.Left+10;
      end;
    end;
end;

procedure TForm1.ReloadRight;
begin
  if fun=0 then
    begin
      i:=i+1;
      if i=MyCount then
      begin
        i:=0;
        Name_1:=ListBox.Items[i];
        IMG_1.Picture.LoadFromFile(Name_1);
      end
      else
        Name_1:=ListBox.Items[i];
        IMG_1.Picture.LoadFromFile(Name_1);
    end;

    if fun=1 then
    begin
      i:=i+1;
      if i=MyCount then
      begin
        i:=0;
      Name_2:=ListBox.Items[i];
      IMG_2.Picture.LoadFromFile(Name_2);
      end
       else
       Name_2:=ListBox.Items[i];
      IMG_2.Picture.LoadFromFile(Name_2);
    end;

    if fun = 0 then fun:=1 else fun:=0;
end;

procedure TForm1.bt_addClick(Sender: TObject);
var
  TS : TStringList;
begin
TS := TStringList.Create;
if OpenDialog.Execute then
  begin
  ListBox.Items.Append(OpenDialog.FileName);
  MyCount:=MyCount+1;
  end;


end;

procedure TForm1.bt_endClick(Sender: TObject);
begin
   IMG_2.Left:=-520;
   IMGPosition;
end;

procedure TForm1.imgBTleftClick(Sender: TObject);
begin
  if fun=0 then IMG_2.Left:=520 else IMG_1.Left:=520;
  Timer_left.Enabled:=true;
end;

procedure TForm1.Timer_leftTimer(Sender: TObject);
begin
if fun=0 then
    begin
    if IMG_2.Left=20 then
        begin
          IMG_1.Left:=530;
          Timer_left.Enabled:=false;
          Timer_Right.Enabled:=false;
          ReloadLeft;
        end
      else
        begin
          IMG_1.Left:=IMG_1.Left-10;
          IMG_2.Left:=IMG_2.Left-10;

        end;
    end;

     if fun=1 then
      begin
      if IMG_1.Left=10 then
        begin
          IMG_2.Left:=520;
          Timer_left.Enabled:=false;
          Timer_Right.Enabled:=false;
          ReloadLeft;
        end
      else
      begin
        IMG_2.Left:=IMG_2.Left-10;
        IMG_1.Left:=IMG_1.Left-10;
      end;
    end
end;



procedure TForm1.ReloadLeft;
begin
if fun=0 then
    begin
      i:=i-1;
      if i=-1 then
      begin
        i:=MyCount-1;
        Name_1:=ListBox.Items[i];
        IMG_1.Picture.LoadFromFile(Name_1);
      end
      else
        Name_1:=ListBox.Items[i];
        IMG_1.Picture.LoadFromFile(Name_1);
    end;

    if fun=1 then
    begin
      i:=i-1;
      if i=-1 then
      begin
        i:=MyCount-1;
        Name_2:=ListBox.Items[i];
        IMG_2.Picture.LoadFromFile(Name_2);
      end
       else
       Name_2:=ListBox.Items[i];
      IMG_2.Picture.LoadFromFile(Name_2);
    end;

      if fun = 0 then fun:=1 else fun:=0;
end;


PM MAIL   Вверх
JnK
  Дата 16.3.2010, 02:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 11
Регистрация: 24.3.2007

Репутация: нет
Всего: нет



2 Image размещены на Panel.

Настройки для программы:
Код

procedure TForm1.FormCreate(Sender: TObject);
begin
Panel1.DoubleBuffered:=true;
Image2.Left:=Panel1.Width+1;
Timer1.Enabled:=false;
Timer1.Interval:=100;
end;


Тут можно сделать присваивание новой картинки Image2: 
запуск (остановка пролистывания)
Код

procedure TForm1.BitBtn1Click(Sender: TObject);
begin
Timer1.Enabled:=not Timer1.Enabled;
end;


Сам механизм листания и замены.
Код

procedure TForm1.Timer1Timer(Sender: TObject);
const
  Step=10;
begin
  if Image2.Left<step then
  begin
    {Ставим картинку на 0, т.к. может быть и -10 и -2}
    Image2.Left:=0;
    {Останавливаем таймер}
    timer1.Enabled:=false;
    {Меняем местами}
    Image1.Picture:=Image2.Picture;
    {ставим на начальные позиции}
    Image1.Left:=0;
    Image2.Left:=Panel1.Width+step;
  end;
  {Само передвежение}
  Image1.Left:=Image1.Left-step;
  Image2.Left:=Image2.Left-step;
end;


Это сообщение отредактировал(а) JnK - 18.3.2010, 10:28
PM MAIL   Вверх
Mikel
Дата 18.3.2010, 09:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник Клуба
Сообщений: 882
Регистрация: 30.3.2002
Где: Саратов

Репутация: 1
Всего: 2



И как? Не мигает? По-моему доверять такое стандартной прорисовке не хорошо smile Лучше рисовать все сначала на каком-то битмапе, а потом отображать его разом по таймеру, ну и прописать еще в WM_PAINT.


--------------------
...so remember, it's better to burn out than to fade away
PM MAIL ICQ   Вверх
JnK
  Дата 18.3.2010, 10:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 11
Регистрация: 24.3.2007

Репутация: нет
Всего: нет



Добавил в код:
Код

Panel1.DoubleBuffered:=true;

Уменьшает мерцание, но лучше воспользоваться как сказал Mikel, и сделать все через BitMap.

Статья про двойную буферизацию.
http://delphiblog.ru/2007/double-buffering-delphi/2/


Это сообщение отредактировал(а) JnK - 18.3.2010, 10:29
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Звук, графика и видео"
Girder
Snowy
Alexeis

Запрещено:

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делится вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи
  • По вопросам разработки игр стоит заглянуть сюда

FAQ раздела лежит здесь!


Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, Girder, Snowy.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Звук, графика и видео | Следующая тема »


 




[ Время генерации скрипта: 0.0804 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.