Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2004.10.03;
Скачать: [xml.tar.bz2];

Вниз

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

 
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;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.47 MB
Время: 0.036 c
1-1095693529
Aleksandr.
2004-09-20 19:18
2004.10.03
Как PageControl заставить измерить ширину tab a?


1-1095258879
Kovsh
2004-09-15 18:34
2004.10.03
Как зарегестрировать три горячие клавиши?


1-1095231354
Black
2004-09-15 10:55
2004.10.03
Как разбить текст на части?


11-1081084673
hammer
2004-04-04 17:17
2004.10.03
scrollbox


14-1095355650
lipskiy
2004-09-16 21:27
2004.10.03
Можно ли сделать так, чтобы при заходе в локальный сетевой ресурс





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский