Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Компоненты Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 07.12.2010, 23:32   #1
GrafAtRuss
 
Регистрация: 31.05.2010
Сообщений: 3
Восклицание Автоматическая построчная работа с ListBox в Delphi

Имеется автоматически генерируемый ListBox1 примерно на 150 строк (допустим это пути к файлам).
Требуется выполнить однотипные операции с каждой из строк, например автоматически поочередно отредактировать и добавить их в поле Memo1.
В голову приходит код на подобии:
Код:
procedure MemoFiles(Line: double);
var
  L:double;
begin
  Form1.ListBox1.ItemIndex := Line;
  if Form1.ListBox1.Items.Strings[(Form1.ListBox1.ItemIndex)] = '' then
  Form1.Memo1.Lines.Add('Анализ завершен.')
  else
  Form1.Memo1.Lines.Add('Анализ ' + Form1.ListBox1.Items.Strings[(Form1.ListBox1.ItemIndex)]);
  L := Line + 1;
  MemoFiles (L);
end;
Проблема в том, что ListBox1.ItemIndex не может быть равен текстовому значению Line, а только любому цифровому.
Вопрос в том, как автоматически переводить строки для последующей обработки?
GrafAtRuss вне форума Ответить с цитированием
Старый 08.12.2010, 02:16   #2
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

<Чего язык зачесался?> вы написали
циклы не изучали?

Код:
procedure MemoFiles;
var i:integer;
begin
 for i:=0 to ListBox1.Items.Count-1 do
  if Form1.ListBox1.Items[i]='' 
   then Form1.Memo1.Lines.Add('Анализ завершен.')
   else Form1.Memo1.Lines.Add('Анализ ' + Form1.ListBox1.Items[i]);
end;
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.

Последний раз редактировалось Stilet; 08.12.2010 в 11:01.
Пепел Феникса вне форума Ответить с цитированием
Старый 08.12.2010, 07:23   #3
GrafAtRuss
 
Регистрация: 31.05.2010
Сообщений: 3
По умолчанию

Я просто с ПХП по очень надо постепенно на Дельфи переезжаю.
Зы А как в этот цикл включить Form1.ProgressBar1.Position := ,где Form1.ProgressBar1.Max := Form1.ListBox1.Items.Count; ?
Код:
procedure MemoFiles;
var i:integer;
begin
 Form1.ProgressBar1.Max := Form1.ListBox1.Items.Count;
 for i:=0 to Form1.ListBox1.Items.Count-1 do
  if Form1.ListBox1.Items[i]=''
   then Form1.Memo1.Lines.Add('Анализ завершен.')
   else begin
   Form1.Memo1.Lines.Add('Анализ ' + Form1.ListBox1.Items[i]);
   Form1.ProgressBar1.Position := i;
   end;
end;
Сие правильный подход?

Последний раз редактировалось GrafAtRuss; 08.12.2010 в 07:39.
GrafAtRuss вне форума Ответить с цитированием
Старый 08.12.2010, 10:32   #4
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

Код:
procedure MemoFiles;
var i:integer;
begin
 Form1.ProgressBar1.Max := Form1.ListBox1.Items.Count;
 Form1.ProgressBar1.Position:=0;
 for i:=0 to Form1.ListBox1.Items.Count-1 do
  //if Form1.ListBox1.Items[i]='' считаю что условие не нужно, ибо если выйдем за пределы массива будет ошибка
   begin
    Form1.Memo1.Lines.Add('Анализ ' + Form1.ListBox1.Items[i]);
    Form1.ProgressBar1.Position := i;//не очень правильно но работает, правда пользователь не увидит обновление полоски:)
   end;
 Form1.Memo1.Lines.Add('Анализ завершен.')
end;
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 11.12.2010, 10:22   #5
GrafAtRuss
 
Регистрация: 31.05.2010
Сообщений: 3
По умолчанию

Цитата:
Сообщение от Пепел Феникса Посмотреть сообщение
Код:
Form1.ProgressBar1.Position := i;//не очень правильно но работает, правда пользователь не увидит обновление полоски:)
   end;
А что вписать, чтоб увидел?
GrafAtRuss вне форума Ответить с цитированием
Старый 11.12.2010, 10:42   #6
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

Код:
procedure MemoFiles;
var i:integer;
begin
 Form1.ProgressBar1.Max := Form1.ListBox1.Items.Count;
 Form1.ProgressBar1.Position:=0;
 for i:=0 to Form1.ListBox1.Items.Count-1 do
  //if Form1.ListBox1.Items[i]='' считаю что условие не нужно, ибо если выйдем за пределы массива будет ошибка
   begin
    Form1.Memo1.Lines.Add('Анализ ' + Form1.ListBox1.Items[i]);
    Form1.ProgressBar1.Position := i;//не очень правильно но работает, правда пользователь не увидит обновление полоски:)
    Appication.ProcessMessages;//позволим приложению обработать сообщения(перерисовки и тп)
   end;
 Form1.Memo1.Lines.Add('Анализ завершен.')
end;
красным выделил
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
работа со списками listbox(delphi) KaZaaM Помощь студентам 6 19.11.2009 22:42
Работа с ListBox xLoMMx Общие вопросы C/C++ 4 22.06.2009 18:34
Delphi:Работа с Listbox и StringGrid Shaitan Помощь студентам 2 11.11.2008 21:04
Работа с ListBox. CyberOrcX Компоненты Delphi 2 13.05.2008 18:41
Построчная печать Mridu Vaju Общие вопросы Delphi 3 21.09.2007 16:41