Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > Программа и интерфейс
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 29.08.2014, 19:27
DeathStroke DeathStroke вне форума
Прохожий
 
Регистрация: 29.08.2014
Сообщения: 1
Версия Delphi: Delphi 7
Репутация: 10
По умолчанию Delphi 7 Ошибка при работе с таймером

Всем доброго времени суток! Пишу программу, которая загружает с сервера (посредствам FTP) информацию о статусе отслеживаемых пользователей. Задача то шуточная: поочередно загрузить файлы с сервера, соответствующие строкам списка. Грубо говоря: если в списке Вася, Петя, то загрузить файлы Вася.txt Петя.txt. В файле текст либо "online" или "offline". И в зависимости от этого поменять imageindex у компонента в listview (проще говоря: если "онлайн" - зеленая иконка, "оффлайн" - красная). И все это замечательно пашет, если вызывать это, например, в событии onclick. Но в моем случае, программа должна постоянно следить за состоянием пользователей. Поэтому я прибег к использованию компонента timer. Первые 1-2 раза все идет как по маслу. Но потом программа выдает ошибку "Unknown Command". А компилятор подсвечивает одну из строк, связанных с работой с файловой системой. Будь то Savetofile или FTP.Put. При этом почти каждый раз разные. При этом ошибка может выскочить через минуту, а может и через час. Сразу приношу извинения за код. Он реально грязный, нерациональный и все такое. Дело в том, что я этим занимаюсь на уровне хобби и вообще еще даже школу не закончил. Прошу отнестись с пониманием.

Код:
procedure TForm1.Timer1Timer(Sender: TObject);
var i,q,s:integer;
acc:Boolean;
begin

if fileexists('list.bat') then  sMemo1.Lines.LoadFromFile('list.bat');   ///проверяем наличие файла со списком пользователей и если он есть, то загружаем в memo
if sMemo1.Lines.Count>0 then  ///на случай, если файл пуст
begin

sListView1.Clear;  
 for i:=0 to sMemo1.Lines.Count-1 do
  begin
      acc:=false; /// acc - существует ли на сервере файл
      sListView1.Items.Add;
    ListBox1.Items.Clear;
      sListView1.Items[i].Caption:=sMemo1.Lines.Strings[i];
      sListView1.Items[i].ImageIndex:=0;
       IdFTP1.List(  ListBox1.Items,'*.bat',False);  /// ищем файлы на FTP по критерию 
   if ListBox1.Items.Count<>0 then for q:=0 to listbox1.items.count-1 do if ListBox1.Items.Strings[q]=LowerCase(sMemo1.Lines.Strings[i])+'.bat' then  begin acc:=True;  ///определяем существует ли файл

  if acc=True then begin IdFTP1.Get(LowerCase(sMemo1.Lines.Strings[i])+'.bat','omn.bat',true); /// получаем файл с сервера
    memo1.Lines.LoadFromFile('omn.bat');
     if Memo1.lines.text='online' then
    begin
      sListView1.Items[i].ImageIndex:=1; ///устонавливаем зеленую иконку
 
       jvdesktopalert1.HeaderText:='Сообщение короче';
       JvDesktopAlert1.MessageText:='Пользователь '+sMemo1.Lines.Strings[i]+', сейчас онлайн'; ///голос со стороны параши (трея)
         JvDesktopAlert1.StyleOptions.DisplayDuration:=0;

      if JvDesktopAlert1.Showing= False then begin
        JvWavePlayer1 .FileName:='sound.wav';
       if sEdit1.Text<>'no' then  JvWavePlayer1.Play ;   JvDesktopAlert1.Execute();       end;   ///вызываем сообщение из трея     (Edit1.text='no' если пользователь не хочет слушать звуковое оповещение


    end;
    if Memo1.Lines.Text='offline' then sListView1.Items[i].ImageIndex:=2; ///устанавливаем красную иконку
    end;
  end;
  end;

end;
end;
Админ: Пользуемся тегами по назначению!

Авторизация FTP производится при запуске.
Буду благодарен любой помощи.
Заранее спасибо!

Последний раз редактировалось Admin, 29.08.2014 в 19:41.
Ответить с цитированием
  #2  
Старый 03.09.2014, 10:31
Аватар для min@y™
min@y™ min@y™ вне форума
Заблокирован
 
Регистрация: 29.08.2014
Адрес: Рязань
Сообщения: 26
Версия Delphi: D7, CB6, etc
Репутация: 10
По умолчанию

Дай посмотреть скриншот вот этого:
Цитата:
Сообщение от DeathStroke
Но потом программа выдает ошибку "Unknown Command". А компилятор подсвечивает одну из строк, связанных с работой с файловой системой. Будь то Savetofile или FTP.Put.
Компайлер может что-то подсвечивать только в процессе компиляции.

З.Ы. Не делай больше посты на 2+ экрана в ширину, очень неудобно читать. Юзай кнопку "предварительный просмотр".
Ответить с цитированием
  #3  
Старый 03.09.2014, 10:46
Аватар для Uniq!
Uniq! Uniq! вне форума
Местный
 
Регистрация: 29.09.2010
Сообщения: 539
Версия Delphi: Delphi XE3
Репутация: 374
По умолчанию

А у вас таймер настроен хоть на какой-то адекватный промежуток времени?
Я уверен, что фтп сервер имеет ограничение на количество запросов к нему. Насколько важно знать статус пользователя, скажем, раз в 30 секунд?

В любом случае нужен if проверяющий, если пользователь был онлайн и сейчас онлайн, то ничего переписывать на сервере не надо.

Почему был выбран ftp протокол для передачи столь простой, можно сказать двоичной информации?
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 04:07.


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2023

ВКонтакте   Facebook   Twitter