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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 17.07.2012, 02:37   #1
Putin-mode
Пользователь
 
Регистрация: 04.06.2010
Сообщений: 82
По умолчанию Перемещение файлов из списка Listview

Доброй ночи!
Есть программа, в ней выводится список файлов конкретной папки в Listbox а потом происходит перемещение этих файлов в другую папку.

Минус в том что нет выбора какие именно файлы из списка нужно переместить и они перемещаются все.

Вот моя функция перемещения

Код:
procedure TForm1.Button4Click(Sender: TObject);

begin
  while ListBox1.Items.Count > 0 do
  begin
    if Movedir(PAnsiChar(listbox1.Items[listbox1.ItemIndex]), PAnsiChar(Edit2.Text)) then

      ListBox1.Items.Delete(i2)

    else
    begin
      ShowMessage('Объект не перемещен');

      Break;
    end;
  end;

  ShowMessage('Объекты перемещены');
end;
Подскажите как переделать с листбокса на листвив?

Нужно чтоб пользователь ставил чеки на против нужных файлов и уже запускал перемещение файлов.

Спасибо!
Putin-mode вне форума Ответить с цитированием
Старый 17.07.2012, 07:42   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
Нужно чтоб пользователь ставил чеки на против нужных файлов и уже запускал перемещение файлов.
Используй TCheckListBox.
Код:
with CheckListBox1 do 
 for i:=0 to Count-1 do if checked[i] then 
  Movedir(PAnsiChar(Items[ItemIndex]), PAnsiChar(Edit2.Text))
Идея ясна?
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 17.07.2012, 12:04   #3
Putin-mode
Пользователь
 
Регистрация: 04.06.2010
Сообщений: 82
По умолчанию

А само перемещение? Ваша процедура сработает?

Вот на пример функция удаления выбраных файлов в Listview

Код:
begin
if (Form1.ListView1.Selected<>nil) and (Form1.ListView1.Selected.Caption<>'') then begin
 DeleteFile(Form1.ListView1.Selected.Caption);
 Form1.ListView1.Selected.Delete;
end;
вот функция удаления всех файлов из listview

Код:
begin
while Form1.ListView1.Items.Count>0 do begin
 if Form1.ListView1.Items[0].Checked=true then begin
  StatusBar1.Panels[0].Text:='Удаление: '+Form1.ListView1.Items[0].Caption;
  if DeleteFile(Form1.ListView1.Items[0].Caption)=false then StatusBar1.Panels[0].Text:='Не могу удалить '+Form1.ListView1.Items[0].Caption;
 end else StatusBar1.Panels[0].Text:='Файл '+ListView1.Items[0].Caption+' удален не будет';
 Form1.ListView1.Items[0].Delete;
 application.ProcessMessages;
end;
StatusBar1.Panels[0].Text:='';
ShowText(0,0);
end;
А как мне вот эту строку

Код:
Movedir(PAnsiChar(listbox1.Items[listbox1.ItemIndex]), PAnsiChar(Edit2.Text))
переписать под Listview?
Putin-mode вне форума Ответить с цитированием
Старый 17.07.2012, 12:06   #4
Putin-mode
Пользователь
 
Регистрация: 04.06.2010
Сообщений: 82
По умолчанию

Цитата:
Сообщение от Stilet Посмотреть сообщение
Используй TCheckListBox.
А этот компонент есть для дельфи 7?
Putin-mode вне форума Ответить с цитированием
Старый 17.07.2012, 12:28   #5
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Закладки Additional в компонентах у вас нет конечно
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 17.07.2012, 13:07   #6
Putin-mode
Пользователь
 
Регистрация: 04.06.2010
Сообщений: 82
По умолчанию

С чеклистбоксом вроде разобрался, осталось понять как в цикл запихать чтоб перемещал чекнутые а нечекнутые пропускал.
Putin-mode вне форума Ответить с цитированием
Старый 17.07.2012, 13:46   #7
Putin-mode
Пользователь
 
Регистрация: 04.06.2010
Сообщений: 82
По умолчанию

как дописать вот эту процедуру?
Код:
begin
  while CheckListBox1.Count > 0 do

  if CheckListBox1.Checked[I] then
 begin
  Movedir(PAnsiChar(CheckListBox1.Items[CheckListBox1.ItemIndex]), PAnsiChar(Edit2.Text));
  CheckListBox1.Items.Delete(i2);
  end
end;
Она работает но перемещает файл только если на нем стоит чек и если его выбрали путем выделения(серая строка).
Приходится заранее везде ставить чеки, потом щелкать на каждой строке файла и нажимать переместить.
Цикл выпадает с ошибкой List index out of bounds -1.

Спасибо!
Putin-mode вне форума Ответить с цитированием
Старый 17.07.2012, 20:48   #8
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
CheckListBox1.Items.Delete(i2);
Это ты зачем делаешь? Хочешь с перемещением избавляться от записи?
Тогда так:
Код:
with CheckListBox1 do 
 for i:=Count-1 downto 0 do if checked[i] then begin
  Movedir(PAnsiChar(Items[ItemIndex]), PAnsiChar(Edit2.Text))
  CheckListBox1.Items.Delete(i);
 end;
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 17.07.2012, 21:15   #9
Putin-mode
Пользователь
 
Регистрация: 04.06.2010
Сообщений: 82
По умолчанию

Stilet, а можно с вашей помощью в личке или в аське доделать этот кусок кода?

Перемещает но строчку не удаляет, снова ошибка List index out of bounds -1 плюс еще предупреждение компилятора FOR-Loop variable "i" may be undefined after loop

И перемещает опять же, при условии если на этой строчке файла стоит курсор(выделение серым)


Последний раз редактировалось Putin-mode; 17.07.2012 в 21:28.
Putin-mode вне форума Ответить с цитированием
Старый 18.07.2012, 07:36   #10
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
Перемещает но строчку не удаляет
А пройдись трассировкой по циклу, и посмотри при каких условиях ошибка.
Возможно нужно писать for i:=Items.Count-1
Цитата:
FOR-Loop variable "i" may be undefined after loop
Это не ошибка а предупреждение. Переменная I после цикла может быть равна черти-чему, будьте осторожны.
Цитата:
в личке или в аське
А меня там нет. Раньше был а сейчас уже не выхожу в контакты.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
перемещение элементов Listview Anfall Компоненты Delphi 4 30.03.2012 04:24
ListView привязать к элементу списка объект Casper-SC Общие вопросы .NET 1 26.02.2010 10:22
Программа получения списка файлов директории и изменения атрибутов файлов roma86 Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 7 09.06.2009 09:08
Перемещение элементов списка выше/ниже iankov PHP 8 09.03.2009 21:08
Печать pdf файлов из списка файлов в Excel АПС Microsoft Office Excel 5 15.04.2008 16:04