Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Форма и сообщения системы [D6, Win95/98, WinXP]


prorok2 ©   (2004-09-20 09:22:00) 

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


GuAV   (2004-09-20 12:02:00) [1]


> Fedia   (20.09.04 10:45) [10]

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


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

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


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

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


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

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


TUser   (2004-09-20 10:34:00) [5]

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


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

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


TUser   (2004-09-20 10:05:00) [7]


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

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

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


Erik1   (2004-09-20 10:03:00) [8]

Ну это лучше запихнуть в переменую 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:00) [9]

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


prorok2   (2004-09-20 09:43:00) [10]

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

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;


TUser   (2004-09-20 09:23:00) [11]

Пиши код


Наверх

Титульная страница Поиск, карта сайта Написать письмо