Главная страница
    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.032 c
3-1093854995
Maxim____
2004-08-30 12:36
2004.10.03
Что такое ISAM и как оно работает?


4-1093280647
v3l0m
2004-08-23 21:04
2004.10.03
Help me please! Перевидите чайнику на C++.


14-1095146264
Guest
2004-09-14 11:17
2004.10.03
Почему Ф-ция GetKeyNameText Возвращает символы


1-1095654761
TTTT
2004-09-20 08:32
2004.10.03
coping in progress


14-1095136210
Tiam
2004-09-14 08:30
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
Английский Французский Немецкий Итальянский Португальский Русский Испанский