Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2006.01.22;
Скачать: CL | DM;

Вниз

Работа с таймером   Найти похожие ветки 

 
mozgan   (2006-01-05 18:43) [0]

Всем вечер добрый !
У меня есть один вопрос, который решить не могу никак.
Я начинающий, и добрался до попытки написать прогу для
просмотра картинок в формате jpeg. Получилось.
Да вот прикол-то: картинок 1000, а руки две (клацкает правая).
Ужас! Задача такая, как можно реализовать работу таймера?
Точнее, чтобы сам загружал следующую картинку, в цикле.
Моя попытка привела к зацикливанию одного и того же изображения.
Подскажите, пожалуйста, если вопрос не сложный!
С уважением, Саша.

procedure TForm1.Timer1Timer(Sender: TObject);
var i: integer;
begin
 for i:=0 to FileListBox1.Items.Count-1 do
 if FileListBox1.Selected[i]=true then
 image1.Picture.LoadFromFile(FileListBox1.FileName);
end;


 
Anatoly Podgoretsky ©   (2006-01-05 18:52) [1]

Цикл for нужно убрать отсюда и сделать поле LastIndex, которое наращивать здесь

while LastIndex < FileListBox1.Items.Count do
begin
  if FileListBox1.Selected[LastIndex]
  then
  begin
    image1.Picture.LoadFromFile(FileListBox1.FileName);
    LastIndex := LastIndex + 1;
    Break;
  end
  else
  begin
    LastIndex := LastIndex + 1
  end;
end;


 
Джо ©   (2006-01-05 19:03) [2]

А зачем в обработчике OnTimer вообще цикл?!


 
Джо ©   (2006-01-05 19:19) [3]

Пример.
Форма, на ней две кнопки, лист-бокс со списком имен файлов и TImage.

 TForm16 = class(TForm)
   Image1: TImage;
   ListBox1: TListBox;
   Timer1: TTimer;
   Button1: TButton;
   Button2: TButton;
   procedure Button2Click(Sender: TObject);
   procedure Button1Click(Sender: TObject);
   procedure Timer1Timer(Sender: TObject);
 private
   FPicIndex: Integer;
   procedure NextIndex;
   procedure StartSlideShow;
   procedure StopSlideShow;
 public
 end;

implementation

...

procedure TForm16.Button1Click(Sender: TObject);
begin
 StartSlideShow
end;

procedure TForm16.Button2Click(Sender: TObject);
begin
 StopSlideShow
end;

procedure TForm16.NextIndex;
begin
 Inc (FPicIndex);
 if FPicIndex > (ListBox1.Items.Count-1) then
   FPicIndex := 0;
end;

procedure TForm16.ResetIndex;
begin
 FPicIndex := 0;
end;

procedure TForm16.StartSlideShow;
begin
 if ListBox1.Items.Count=0 then
   raise Exception.Create("Список пуст");

 ResetIndex;
 Timer1.Enabled := True;
end;

procedure TForm16.StopSlideShow;
begin
 Timer1.Enabled := False;
 ResetIndex;
end;

procedure TForm16.Timer1Timer(Sender: TObject);
var
 FileName: string;
begin
 ListBox1.ItemIndex := FPicIndex;
 FileName := ListBox1.Items[FPicIndex];
 if FileExists (FileName) then
   Image1.Picture.LoadFromFile(FileName);

 NextIndex;
end;

В дизайнере установи Timer1.Enabled := False;
Одна кнопка запускает слайд-шоу, другая останавливает.


 
mozgan   (2006-01-05 19:31) [4]

Anatoly !

Спасибо за ответ! Я немного не понял, что такое LastIndex? Переменная?
И как правильно сделать? В таймере?
Я переписал Ваш код, но прога ничего не делает. Интервал таймер - 1000



Страницы: 1 вся ветка

Текущий архив: 2006.01.22;
Скачать: CL | DM;

Наверх




Память: 0.47 MB
Время: 0.026 c
1-1134734764
OlegNik
2005-12-16 15:06
2006.01.22
Завершение потока TTread;


14-1133813568
Rouse_
2005-12-05 23:12
2006.01.22
Новогодний MMP (Совместный)


1-1134635289
oleggar
2005-12-15 11:28
2006.01.22
C+Delphi


14-1135976124
Kerk
2005-12-30 23:55
2006.01.22
Почитал ветки


3-1132682236
tyo
2005-11-22 20:57
2006.01.22
ProgressBar во время ExecProc