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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Ошибка при работе с методом собственного класса 
V
    Опции темы
Тутанхамец
Дата 27.2.2006, 17:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 612
Регистрация: 10.10.2005
Где: в пирамидЕ!

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



Наверняка ведь тупая ошибка, знаю, но не силен я в Делфи... Помогите кто чем может, а?)

Код

есть класс 


TTest=class (TObject)
public

procedure FindFiles(sPath:string; sExt:string;  var strs:Tstrings);

private

end;

implementation

procedure TTest.FindFiles(sPath:string; sExt:string; var Strs:TStrings);
var
  f:TSearchRec;
begin
      if FindFirst(sPath+'*.'+sExt,faAnyFile,f)=0 then begin

      repeat
      strs.Add(f.name);
      until not(findNext(f)=0);
    end;

end;


и есть процедура показывания формы:

procedure TfrmChangeTest.FormShow(Sender: TObject);
var
f:file;
f2:file;
s,s2:string;
fl,i:integer;

tfs:TFilestream;
stl:Tstrings;
Test:TTest;

begin

Test.create;

Test.FindFiles(Progpath, ftExt, lbTests.items);

Test.free;

end;





Всё это нужно, чтоб список найденных файлов отобразился в листбоксе.

Если при вызове передаю stl, то выдает access violation при добавлении строки в strs.

Если же передаю по ссылке lbTests.items, как мне и надо, то говорит, что constant object не может быть передан по ссылке.

Если убираю вызов findfiles вообще, то выдает EInvalidOperation на Test.free.

Как быть?
PM MAIL   Вверх
z-END
Дата 27.2.2006, 17:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


прафесар™
****


Профиль
Группа: Комодератор
Сообщений: 3014
Регистрация: 13.3.2003
Где: Венья, Пиетари

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



Цитата(Тутанхамец @ 27.2.2006, 17:22 Найти цитируемый пост)
Test.create;
Test.FindFiles(Progpath, ftExt, lbTests.items);
Test.free;

попробуй так
Код

Test := TTest.Create;
Test.FindFiles (Progpath, ftExt, lbTests.items);    
freeAndNil (Test);



--------------------
Каждый чилавек пасвоему праф...а памоему НЕТ! 

PM WWW ICQ   Вверх
Romikgy
Дата 27.2.2006, 17:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Любитель-программер
****


Профиль
Группа: Участник Клуба
Сообщений: 7326
Регистрация: 11.5.2005
Где: Porto Franco Odes sa

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



Код

var  sxl: TStringList;
Test:=Ttest.create;
sxl:=TStringList.Create;
Test.FindFiles(Progpath, ftExt,sxl);
lbTests.items.Assign(sxl);
sxl.Free;
Test.free;



--------------------
Владение русской орфографией это как владение кунг-фу — истинные мастера не применяют его без надобности. 
smile

PM   Вверх
DemoCode
Дата 27.2.2006, 17:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Вместо TStrings пользуйся классом TStringList


--------------------
Жить стало лучше, жить стало веселей
© И.В. Сталин 
PM MAIL ICQ   Вверх
Тутанхамец
Дата 27.2.2006, 17:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 612
Регистрация: 10.10.2005
Где: в пирамидЕ!

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



Да, проблема с free решилась. smile

Теперь только непонятно, как ему всучить items от листбокса...
PM MAIL   Вверх
Guedda
Дата 27.2.2006, 17:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Подрывник
****


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

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



Присвоение ListBox.Items->TStringList:
Код

sxl := ListBox.Items;

Присвоение TStringList->ListBox.Items:
Код

ListBox.Items := sxl;



--------------------
Ll 2
PM MAIL WWW ICQ Skype GTalk   Вверх
Romikgy
Дата 27.2.2006, 17:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Любитель-программер
****


Профиль
Группа: Участник Клуба
Сообщений: 7326
Регистрация: 11.5.2005
Где: Porto Franco Odes sa

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



Код

lbTests.perform(LB_DIR,DDL_ARCHIVE+DDL_HIDDEN+DDL_READONLY+DDL_READWRITE,integer(PChar(Progpath+'*.'+ftExt)));



--------------------
Владение русской орфографией это как владение кунг-фу — истинные мастера не применяют его без надобности. 
smile

PM   Вверх
Тутанхамец
Дата 27.2.2006, 17:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 612
Регистрация: 10.10.2005
Где: в пирамидЕ!

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



Пока писал ответ Зенду, еще два поста...)

Ребята, спасибо! Всё заработало через TStringlist и Assign в листбокс.
PM MAIL   Вверх
Romikgy
Дата 27.2.2006, 17:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Любитель-программер
****


Профиль
Группа: Участник Клуба
Сообщений: 7326
Регистрация: 11.5.2005
Где: Porto Franco Odes sa

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



Guedda, лучше через Assign


--------------------
Владение русской орфографией это как владение кунг-фу — истинные мастера не применяют его без надобности. 
smile

PM   Вверх
Тутанхамец
Дата 27.2.2006, 17:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 612
Регистрация: 10.10.2005
Где: в пирамидЕ!

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



Цитата

lbTests.perform(LB_DIR,DDL_ARCHIVE+DDL_HIDDEN+DDL_READONLY+DDL_READWRITE,integer(PChar(Progpath+'*.'+ftExt)));



Согласен, так было бы проще всего, но на самом деле мне надо выводить в лист только имена файлов, без пути и расширения.
PM MAIL   Вверх
Romikgy
Дата 27.2.2006, 17:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Любитель-программер
****


Профиль
Группа: Участник Клуба
Сообщений: 7326
Регистрация: 11.5.2005
Где: Porto Franco Odes sa

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



дык парси smile
Добавлено @ 18:02
Код

sxl:=TstringList.Create;
for i:=0 to lbTests.items.count-1 do
begin
sxl.add(copy(lbTests.items[i],
AnsiStrRScan(pchar(lbTests.items[i]),'\')+1,
AnsiStrRScan(pchar(lbTests.items[i]),'.')-AnsiStrRScan(pchar(lbTests.items[i]),'\')-1);
end;
sxl.Free;

Если гдет не ошибся smile


--------------------
Владение русской орфографией это как владение кунг-фу — истинные мастера не применяют его без надобности. 
smile

PM   Вверх
Guedda
Дата 27.2.2006, 20:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Подрывник
****


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

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



Да зачем так замудриваться?
ExtractFileName возвращает имя файла из полного пути.
ExtractFilePath возвращает только путь к файлу


--------------------
Ll 2
PM MAIL WWW ICQ Skype GTalk   Вверх
Тутанхамец
Дата 28.2.2006, 09:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 612
Регистрация: 10.10.2005
Где: в пирамидЕ!

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



Дык я и парсю smile

Код


procedure TTest.FindFiles(sPath:string; sExt:string; var Strs:TStrings);
var
  f:TSearchRec;
begin
      if FindFirst(sPath+'*.'+sExt,faAnyFile,f)=0 then begin

      repeat
            strs.Add(copy(ExtractFileName(f.name),1,length(f.name)-4));
      until not(findNext(f)=0);
    end;

end;


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


Любитель-программер
****


Профиль
Группа: Участник Клуба
Сообщений: 7326
Регистрация: 11.5.2005
Где: Porto Franco Odes sa

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



Тутанхамец, не всегда расширение занимает 3 символа smile
Guedda,
Цитата(Guedda @ 27.2.2006, 19:24 Найти цитируемый пост)
ExtractFileName

Логично smile


--------------------
Владение русской орфографией это как владение кунг-фу — истинные мастера не применяют его без надобности. 
smile

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

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

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

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

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


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

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


 




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


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

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