Форум программистов, компьютерный форум, киберфорум
Наши страницы
Delphi для начинающих
Войти
Регистрация
Восстановить пароль
 
 
Рейтинг 4.52/25: Рейтинг темы: голосов - 25, средняя оценка - 4.52
Dryg
71 / 66 / 35
Регистрация: 09.04.2009
Сообщений: 359
Записей в блоге: 1
1

Имена в файлов ListBox, а сам текст в Memo

21.12.2009, 23:40. Просмотров 4457. Ответов 32
Метки нет (Все метки)

Проблема такая есть код он выдает все найденые файлы из папки MYFILE и включая все подкаталоги в ListBox!!

Код
procedure FindFiles(StartFolder, Mask: string; List: TStrings;
  ScanSubFolders: Boolean = True);
var
  SearchRec: TSearchRec;
  FindResult: Integer;
begin
  List.BeginUpdate;
  try
    StartFolder := IncludeTrailingBackslash(StartFolder);
    FindResult := FindFirst(StartFolder + '*.*', faAnyFile, SearchRec);
    try
      while FindResult = 0 do
        with SearchRec do
        begin
          if (Attr and faDirectory) <> 0 then
          begin
            if ScanSubFolders and (Name <> '.') and (Name <> '..') then
              FindFiles(StartFolder + Name, Mask, List, ScanSubFolders);
          end
          else
          begin
            if MatchesMask(Name, Mask) then
            begin
              List.Add(StartFolder +Name);
            end;

          end;
          FindResult := FindNext(SearchRec);
        end;
    finally
      FindClose(SearchRec);
    end;
  finally
    List.EndUpdate;
  end;
end;


применяется вот так

procedure TForm1.Button1Click(Sender: TObject);
begin
FindFiles('C:\MYFILE', '*.*',ListBox1.Items, true);
end;
смысол такой что граница ListBox у меня ограничено и получается что я не вижу имя фалы а только путь до него!!


пытался сделать так, убрать StartFolder

Код
.......
begin
              List.Add(Name);
            end;
........
вот тогда появляются только имя фала это в принцапе мне так и нужно!! но по двойному щелчку по ListBox точнее по имени файла выдает ошибку что файл не найден, а мне нужно что бы он открывался в Memo поле!
выгружаю вот так в Memo

Код
procedure TForm1.Button2Click(Sender: TObject);
begin
Memo1.Lines.LoadFromFile(PChar(ListBox1.Items[ListBox1.ItemIndex]));
end;
подскажите как сделать правильно!!
1
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
21.12.2009, 23:40
Ответы с готовыми решениями:

Выбор в ListBox -> вывод текст в Memo
Вот делаю для своего сайта о маппинге в CS 1.6 программу, но даже на начальном...

При нажатии на item ListBox-а показать текст в Memo
Как сделать чтобы при нажатии на item listbox'а показывало текст в мемо? Так же...

Как из memo вывести в listbox все слова, которые начинаются на ту же букву, что и последнее слово из memo?
и при этом сохранить порядок слов которые были в memo

Из Listbox в Memo
не могу перенести текст из Listbox в Memo, делаю так. ...

Listbox и Memo
Есть поле Listbox и Memo Нужно чтобы в листбох выгружался текст из файла ini...

32
deathNC
1892 / 1005 / 123
Регистрация: 08.12.2009
Сообщений: 2,792
Записей в блоге: 2
21.12.2009, 23:55 2
В смысле у тебя ЛистБокс как проводник?
если да, то заводи отдельную переменную и храни в ней путь к отображаемой папке, а всё, что в ней находится, выводи в листбокс... когда происходит двойной щелчок, тогда имя открываемого файла должно выглядеть так

путь к файлу := MyPath + ListBox1.Items.Strings[ListBox1.ItemIndex];
// MyPath - это путь к текущей папке

Добавлено через 43 секунды
если не то, то скажи, что должна делать прога.... объясни всё нормально
0
Dryg
71 / 66 / 35
Регистрация: 09.04.2009
Сообщений: 359
Записей в блоге: 1
22.12.2009, 00:04  [ТС] 3
Цитата Сообщение от deathNC Посмотреть сообщение
В смысле у тебя ЛистБокс как проводник?
если да, то заводи отдельную переменную и храни в ней путь к отображаемой папке, а всё, что в ней находится, выводи в листбокс... когда происходит двойной щелчок, тогда имя открываемого файла должно выглядеть так

путь к файлу := MyPath + ListBox1.Items.Strings[ListBox1.ItemIndex];
// MyPath - это путь к текущей папке

Добавлено через 43 секунды
если не то, то скажи, что должна делать прога.... объясни всё нормально
прога делат вот что!! в папке куча файлов и папок текстовых имеется виду!!

Код
FindFiles('[COLOR="SeaGreen"]C:\MYFILE[/COLOR]', '*.*',ListBox1.Items, true);
C:\MYFILE - это путь до папки по нажатию кнопки в ListBox выгружаются все файлы который он нашел MYFILE причем в папке куча еще папок он и в них находит все файлы( мне только файлы нужны !! )

но когда делаешь событие ListBox1DblClick он должен открыть файл memo и по нажатию кнопки например Сохранить должен его сохранить в том же месте где и лежит!!
а у меня выдает что файл не найден!!
0
deathNC
1892 / 1005 / 123
Регистрация: 08.12.2009
Сообщений: 2,792
Записей в блоге: 2
22.12.2009, 00:10 4
жди, щас я тебе эту прогу напишу... тебе её сегодня надо?
0
Dryg
71 / 66 / 35
Регистрация: 09.04.2009
Сообщений: 359
Записей в блоге: 1
22.12.2009, 00:15  [ТС] 5
Цитата Сообщение от deathNC Посмотреть сообщение
жди, щас я тебе эту прогу напишу... тебе её сегодня надо?
Да в принципе не к спеху, но хотелось бы сегодня!
0
deathNC
1892 / 1005 / 123
Регистрация: 08.12.2009
Сообщений: 2,792
Записей в блоге: 2
22.12.2009, 00:17 6
тогда сейчас жди, я уже проект начал...
0
Dryg
71 / 66 / 35
Регистрация: 09.04.2009
Сообщений: 359
Записей в блоге: 1
22.12.2009, 00:19  [ТС] 7
Цитата Сообщение от deathNC Посмотреть сообщение
тогда сейчас жди, я уже проект начал...
Жду!! Спасибо огромное!!
0
deathNC
1892 / 1005 / 123
Регистрация: 08.12.2009
Сообщений: 2,792
Записей в блоге: 2
22.12.2009, 00:27 8
я правильно понял - чел указывает папку, и из этой папки в список загружаются все *.txt файлы... если есть подпапки, то загружать в список файлы, найденные и в подпапках....

основная функция поиска файлов должна быть рекурсивной....
0
Dryg
71 / 66 / 35
Регистрация: 09.04.2009
Сообщений: 359
Записей в блоге: 1
22.12.2009, 00:31  [ТС] 9
да так и должно быть!!
0
deathNC
1892 / 1005 / 123
Регистрация: 08.12.2009
Сообщений: 2,792
Записей в блоге: 2
22.12.2009, 01:10 10
Прога почти готова... осталось тока - загрузка и сохранение файлов...

единственный минус в проге - тебе придётся самому модернизировать фильтрацию текстовых файлов от всех остальных...

а так - всё ОК

скоро ссылочку сюда кину, жди ещё минут 15...
0
Dryg
71 / 66 / 35
Регистрация: 09.04.2009
Сообщений: 359
Записей в блоге: 1
22.12.2009, 01:18  [ТС] 11
Цитата Сообщение от deathNC Посмотреть сообщение
Прога почти готова... осталось тока - загрузка и сохранение файлов...

единственный минус в проге - тебе придётся самому модернизировать фильтрацию текстовых файлов от всех остальных...

а так - всё ОК

скоро ссылочку сюда кину, жди ещё минут 15...
жду
0
deathNC
1892 / 1005 / 123
Регистрация: 08.12.2009
Сообщений: 2,792
Записей в блоге: 2
22.12.2009, 01:18 12
ЮЗАЙ

и сразу пиши, после того, как протестишь!!!
интересно, правильно ли у меня получилось?
1
Dryg
71 / 66 / 35
Регистрация: 09.04.2009
Сообщений: 359
Записей в блоге: 1
22.12.2009, 01:28  [ТС] 13
Цитата Сообщение от deathNC Посмотреть сообщение
ЮЗАЙ

и сразу пиши, после того, как протестишь!!!
интересно, правильно ли у меня получилось?
все ок! спасибо слушай а сделай чтобы любой файл искал не обизательно txt просто *.*
0
deathNC
1892 / 1005 / 123
Регистрация: 08.12.2009
Сообщений: 2,792
Записей в блоге: 2
22.12.2009, 01:34 14
блин!!!! Проснись! Не спи!!!! Переходи по ссылке и юзай прогу.....

Добавлено через 27 секунд
ща сделаю

Добавлено через 5 минут
Вот тебе со всеми файлами, а не только с txt
1
Dryg
71 / 66 / 35
Регистрация: 09.04.2009
Сообщений: 359
Записей в блоге: 1
22.12.2009, 01:36  [ТС] 15
все спасибо!! я ушел спать!!
0
deathNC
1892 / 1005 / 123
Регистрация: 08.12.2009
Сообщений: 2,792
Записей в блоге: 2
22.12.2009, 01:37 16
Давай... удачи... пиши, если что-то непонятно...
0
Dryg
71 / 66 / 35
Регистрация: 09.04.2009
Сообщений: 359
Записей в блоге: 1
22.12.2009, 08:27  [ТС] 17
Прога хорошая надо оставить тему может еще кому поможет!!
0
Ferz-2009
23 / 23 / 2
Регистрация: 26.12.2009
Сообщений: 51
26.12.2009, 19:12 18
Используй вместо Memo второй Листбокс! в нём храни пути к файлу!!!!
вот пример:

Код
   procedure FindIt(dir:string);
Код
procedure Tform1.FindIt(dir:string);
const
  EXT = '.mp3';
var
str:string;
  SearchRec: TSearchRec;
begin
  Dir := IncludeTrailingBackslash(Dir);
  if FindFirst(Dir + '*.*', faAnyFile, SearchRec) = 0 then
    repeat
      if (SearchRec.Name = '.') or (SearchRec.Name = '..') then
        Continue;
      if (SearchRec.Attr and faDirectory) <> 0 then
        FindIt(Dir + SearchRec.Name)
      else
    if ExtractFileExt(Dir + SearchRec.Name) = EXT then
         l.Items.Add(Dir + SearchRec.Name);
         if ExtractFileExt(Dir + SearchRec.Name) = EXT then

            list.Items.Add(ChangeFileExt(searchrec.Name,''));
    until
      FindNext(SearchRec) <> 0;
  FindClose(SearchRec);
  end;

if ExtractFileExt(Dir + SearchRec.Name) = EXT then
l.Items.Add(Dir + SearchRec.Name);
- в этом Листбоксе будут хранится пути к файлу!

if ExtractFileExt(Dir + SearchRec.Name) = EXT then
list.Items.Add(ChangeFileExt(searchrec.Name,''));
Вот сдесь Имя файла причём без расширения!!!


И когда будешь пользоваться Листбоксе с именами файл, советую тебе сделать это:

Код
procedure TForm1.listClick(Sender: TObject);
begin
l.ItemIndex:=list.ItemIndex;
Будет равнять выбранный Итеминдекс в Именном Листбоксе с Итеминдекс в ПуТевом Листбоксе

Код
procedure TForm1.listDblClick(Sender: TObject);
begin
{Сюда пишешь, то что тебе надо сделать}
Удачи!!!!

1
deathNC
1892 / 1005 / 123
Регистрация: 08.12.2009
Сообщений: 2,792
Записей в блоге: 2
27.12.2009, 07:28 19
Цитата Сообщение от Ferz-2009 Посмотреть сообщение
Используй вместо Memo второй Листбокс! в нём храни пути к файлу!!!!
вот пример:

Код
   procedure FindIt(dir:string);
Код
procedure Tform1.FindIt(dir:string);
const
  EXT = '.mp3';
var
str:string;
  SearchRec: TSearchRec;
begin
  Dir := IncludeTrailingBackslash(Dir);
  if FindFirst(Dir + '*.*', faAnyFile, SearchRec) = 0 then
    repeat
      if (SearchRec.Name = '.') or (SearchRec.Name = '..') then
        Continue;
      if (SearchRec.Attr and faDirectory) <> 0 then
        FindIt(Dir + SearchRec.Name)
      else
    if ExtractFileExt(Dir + SearchRec.Name) = EXT then
         l.Items.Add(Dir + SearchRec.Name);
         if ExtractFileExt(Dir + SearchRec.Name) = EXT then

            list.Items.Add(ChangeFileExt(searchrec.Name,''));
    until
      FindNext(SearchRec) <> 0;
  FindClose(SearchRec);
  end;
if ExtractFileExt(Dir + SearchRec.Name) = EXT then
l.Items.Add(Dir + SearchRec.Name);
- в этом Листбоксе будут хранится пути к файлу!

if ExtractFileExt(Dir + SearchRec.Name) = EXT then
list.Items.Add(ChangeFileExt(searchrec.Name,''));
Вот сдесь Имя файла причём без расширения!!!


И когда будешь пользоваться Листбоксе с именами файл, советую тебе сделать это:

Код
procedure TForm1.listClick(Sender: TObject);
begin
l.ItemIndex:=list.ItemIndex;
Будет равнять выбранный Итеминдекс в Именном Листбоксе с Итеминдекс в ПуТевом Листбоксе

Код
procedure TForm1.listDblClick(Sender: TObject);
begin
{Сюда пишешь, то что тебе надо сделать}
Удачи!!!!

Ferz-2009, не понимаю, зачем хранить пути к файлам во втором листбоксе, кода я обеспечил хранение этих путей в самой наипростейшей переменной... Если вы хотите, чтобы показывались пути выбранных файлов, то это можно обеспечить и из моего примера...
0
Dryg
71 / 66 / 35
Регистрация: 09.04.2009
Сообщений: 359
Записей в блоге: 1
27.12.2009, 10:16  [ТС] 20
deathNC, привет!! тебе вчера письмо в личку послал!!
0
27.12.2009, 10:16
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
27.12.2009, 10:16

Listbox или Memo?
Нужно написать определённый текст (в memo или listbox), который невозможно...

Listbox Button и Memo
Тема такая....в Listbox есть таблицы и я допустим выбираю один столбец нажимаю...

Взаимодействие ListBox и Memo
В ListBox имеется 10 пунктов (к примеру пункты 1, 2, 3, 4, 5, 6, 7, 8, 9, 10) и...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru