Модераторы: Snowy, MetalFan, bems, Poseidon
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> имена в файлов ListBox а сам тех в Memo, По ListBox1DblClick в текст в memo 
:(
    Опции темы
Dryg
Дата 21.12.2009, 21:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 3
Регистрация: 21.12.2009

Репутация: нет
Всего: нет



Проблема такая есть код он выдает все найденые файлы из папки 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;


подскажите как сделать правильно!! 


Это сообщение отредактировал(а) Dryg - 21.12.2009, 23:40
PM MAIL   Вверх
kami
Дата 22.12.2009, 00:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1806
Регистрация: 25.8.2007
Где: Санкт-Петербург

Репутация: 22
Всего: 72



Имхо, проще всего завести второй список (TStringList), в котором хранить полные имена файлов. В ListBox загружать только имя, без пути. И по двойному клику на элементе обращаться не к ListBox1.Items[i], а к этому TStringList...

Добавлено через 5 минут и 36 секунд
Поясняю.

Код

type
  TForm1=class....
  .......
  private
    FFullNames:TStringList;
  ........
  end;

implementation

procedure FindFiles(StartFolder, Mask: string; List, FullNames: TStrings; ScanSubFolders: Boolean = True);
begin
 ....
            if MatchesMask(Name, Mask) then
            begin
              FullNames.Add(StartFolder +Name);
              List.Add(Name);
            end;
...
end;

procedure TForm1.FormCreate(...);
begin
  FFullNames:=TStringList.Create;
end;

procedure TForm1.FromDestroy(...);
begin
  FFullNames.Free;
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
  Memo1.Lines.LoadFromFile(FFullNames[ListBox1.ItemIndex]);
end;


Добавлено через 6 минут и 29 секунд
Ну и вызов, соответственно
Код

procedure TForm1.Button1Click(Sender: TObject);
begin
  FindFiles('C:\MYFILE', '*.*',ListBox1.Items, FFullNames, true);
end;

PM MAIL WWW   Вверх
Данкинг
Дата 22.12.2009, 00:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Yersinia pestis
****


Профиль
Группа: Завсегдатай
Сообщений: 8302
Регистрация: 7.11.2006
Где: მოსკოვი

Репутация: 11
Всего: 130



Грузи не в ListBox, а в Memo: у него скроллбары есть. smile 
Код

FindFiles('C:\MYFILE', '*.*',memo1.Lines, true);




--------------------
There's nothing left but silent epitaphs.
PM MAIL WWW   Вверх
aidaid
Дата 3.1.2010, 17:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 2
Регистрация: 12.12.2009

Репутация: нет
Всего: нет



Может сделать так
Код

procedure TForm1.ListBox1DrawItem(Control: TWinControl; Index: Integer; Rect: TRect; State: TOwnerDrawState);

begin
    with ListBox1, Canvas do
    begin
          if odFocused in State then
          begin
                Brush.Color := clBlue;
                Font.Color  := clWhite;
          end
          else
          begin
                Brush.Color := clWhite;
                Font.Color  := clBlack;
          end;
          FillRect(Rect);
          TextOut(Rect.Left + 2, Rect.Top + 0, ExtractFileName(Items[Index]));
   end;
end;

 


 

Это сообщение отредактировал(а) aidaid - 15.1.2010, 15:15
PM MAIL   Вверх
ферзь
Дата 4.1.2010, 00:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 6
Регистрация: 2.1.2010

Репутация: нет
Всего: нет



aidaid Умное решение данной проблемы так как не придётся использовать ни чего лишнего! Никаких Листбоксов, Массивов и Мемо! smile 

PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Для новичков"
SnowyMetalFan
bemsPoseidon
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.0759 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.