Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2004.10.03;
Скачать: CL | DM;

Вниз

Форма и сообщения системы   Найти похожие ветки 

 
prorok2   (2004-09-20 09:22) [0]

Добрый день!
Вопрос вот в чем - в цикле идет поиск по содержимому текстовых файлов. Но почему-то он идет либо когда форма активна, либо (если сверху открыто другое приложение) если курсор мыши двигается над формой моей программы, в которой идет поиск.
В чем подстава?


 
TUser ©   (2004-09-20 09:23) [1]

Пиши код


 
prorok2   (2004-09-20 09:43) [2]

Цикл идет по некоему запросу. Анализируется поле запроса, в котором содержится имя файла, по содержимому которого и будет идти поиск.

var StrList: TStringList;
be: Boolean;
begin
QuerySearch.First;
while not QuerySearch.Eof do
begin
 StrList := TStringList.Create;
 StrList.Clear;
 StrList.LoadFromFile(QuerySearch.FieldByName("Article").AsString);

 i := 0;
 be := False;
 while i <= StrList.Count - 1 do
 begin
  str := "";
  str := AnsiStrPos(PChar(AnsiUpperCase(StrList.Strings[i])), PChar(AnsiUpperCase(Edit1.Text)));
  if (Length(str) > 0) then
  begin
   be := True;
   break;
  end;
  Inc(i);
 end;

 if be then
 begin
  CheckListBox1.Items.Add(QuerySearch.FieldByName("Name").AsString);
  ListBox1.Items.Add(IntToStr(QuerySearch.FieldByName("Rn").AsInteger));
 end;
 QuerySearch.Next;
end;
end;


 
Erik1 ©   (2004-09-20 10:03) [3]

Ну это лучше запихнуть в переменую PChar(AnsiUpperCase(Edit1.Text)) Кроме того поставь Application.ProcesMessage; в нутрь цикла будет перерисовыватся форма.
Если фаил маленький то такой метод подойдет, но лучше использовать TFileStream. Будет намного быстрее. Кроме того невижу освобождения StrList! Только кучу потеряных указателей! Нахрена в цикле делаеш Create? И затераеш старый указатель, вывеси "StrList := TStringList.Create;" за "while not QuerySearch.Eof do begin". Вобщем учти все замечания, перепиши код личше с использованием TFileStream и если будет проблемя задаш вопрос снова.


 
TUser ©   (2004-09-20 10:03) [4]

Тут я виже сразу несколько ошибок, хотя они и не омеют отношения к топику.
А как ты установил, что когда форма неактивна, поиск не осуществляется? Это я к тому, что если подобное заключение основано на том, что CheckListBox1 и ListBox1 не меняются, то может помочь Application.ProcessMessages.


 
TUser ©   (2004-09-20 10:05) [5]


> Нахрена в цикле делаеш Create? И затераеш старый указатель,
> вывеси "StrList := TStringList.Create;"

И еще free неплохо бы, + try ... finally

Еще бяка - цикл крутится даже когда уже be. Напиши
while (not be) and (...) do


 
Fedia   (2004-09-20 10:32) [6]

>Еще бяка - цикл крутится даже когда уже be. Напиши
>while (not be) and (...) do
Да нет, прекращает выполняться, т.к. стоит break;


 
TUser ©   (2004-09-20 10:34) [7]

Да. Слона-то я и не приметил


 
prorok2   (2004-09-20 10:39) [8]

Внял я вашим замечаниям и внес изменения (разве что не стал пока использовать TFileStream). Сейчас поиск идет нормально. Но вот какую фишку заметил. Если мышкой во время поиска не двигать, то он идет медленно, а если двигать, то гораздо быстрее. Это я отслеживаю (это относится и к вопросу про то, как я узнал, что поиск не идет) по ползунку в CheckListBox1. При быстром поиске он и ведет себя быстрее :)


 
prorok2   (2004-09-20 10:42) [9]

Всё. Решил проблемы. Спасибо всем! Очень помогли!


 
Fedia   (2004-09-20 10:45) [10]

Если хочешь быстрее, то на время заполнения  CheckListBox1 делай его невидимым. Это заметно ускоряет заполнение, а чтобы при этом программа смотрелась нормально, помести второй CheckListBox на форму и подменяй CheckListBox1 на CheckListBox2 на время заполнения.


 
GuAV ©   (2004-09-20 12:02) [11]


> Fedia   (20.09.04 10:45) [10]

Такое лучше делать с пом BeginUpdate/EndUpdate а не второго окна.



Страницы: 1 вся ветка

Текущий архив: 2004.10.03;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.029 c
1-1095162604
Sem
2004-09-14 15:50
2004.10.03
Определение кодировки


3-1094203637
Ира
2004-09-03 13:27
2004.10.03
Вставка данных в таблицу


11-1081013421
Delphi5.01
2004-04-03 21:30
2004.10.03
TKOLPaintBox


14-1095402387
1008
2004-09-17 10:26
2004.10.03
Вопросик о QuickReport


3-1094428996
O l e g
2004-09-06 04:03
2004.10.03
База растет как на дрожах!