Форум: "Начинающим";
Текущий архив: 2006.05.28;
Скачать: [xml.tar.bz2];
ВнизПроблема с поиском. Найти похожие ветки
← →
AlexanderMS © (2006-05-08 16:22) [0]Помогите, пожалуйста, найти ошибку в коде, реализующего последовательный поиск по 2-м RichEdit"ам.
На главной форме - ListBox и справа - 2 RichEdit, соответственно Name и Value.
Мой FindDialog - нечто похожее на окно поиска в Word"е: 3 страницы: Найти, Заменить, Перейти.
procedure TFindDialog.BFindClick(Sender: TObject);
const
tofind = 0;
torep = 1;
togoto = 2;
var
choice : byte;
tobreak : boolean;
searchtype : TSearchTypes;
begin
tobreak := false;
choice := tabcontrol.TabIndex;
case choice of
tofind, torep : {Найти или заменить}
begin
if Rall.Checked then placetofind := 6
else if RNameOnly.Checked then placetofind := 2
else if RValueOnly.Checked then placetofind := 3;
findline := Window.List.ItemIndex;
SearchType := [];
if RCaseSens.Checked then include(searchtype, stmatchcase);
if RWholeWord.Checked then include(searchtype, stwholeword);
repeat
if placetofind mod 2 = 0 then with Window.Name do
begin
if SelLength <> 0
then
StartPos := SelStart + SelLength
else
StartPos := 0;
ToEnd := Length(Text) - StartPos;
FoundAt := FindText(FindDialog.CBFind.Text, StartPos, ToEnd, searchtype);
if FoundAt <> -1
then
begin
SetFocus;
SelStart := FoundAt;
SelLength := Length(FindDialog.CBFind.Text);
FindDialog.SetFocus;
exit
end
else
if placetofind = 2
then
repeat
inc(findline);
if findline = Window.List.Items.Count
then
begin
showmessage("Искомый элемент не найден");
tobreak := true;
break
end;
if pos(FindDialog.CBFind.Text, Window.CSF[SendMessage(Window.List.Handle, LB_GetItemData, findline, 0)].name) <> 0
then
begin
Window.List.ClearSelection;
Window.List.Selected[findline] := true;
Window.ListClick(Window);
break
end;
until false;
if tobreak then break;
with window.Value do
begin
if SelLength <> 0
then
StartPos := SelStart + SelLength
else
StartPos := 0;
ToEnd := Length(Text) - StartPos;
FoundAt := FindText(FindDialog.CBFind.Text, StartPos, ToEnd, searchtype);
if FoundAt <> -1
then
begin
SetFocus;
SelStart := FoundAt;
SelLength := Length(FindDialog.CBFind.Text);
exit
end
else
repeat
inc(findline);
if findline = Window.List.Items.Count
then
begin
showmessage("Искомый элемент не найден");
tobreak := true;
break
end;
if placetofind <> 3
then
if pos(FindDialog.CBFind.Text, Window.CSF[SendMessage(Window.List.Handle, LB_GetItemData, findline, 0)].name) <> 0
then
begin
Window.List.ClearSelection;
Window.List.Selected[findline] := true;
Window.ListClick(Window);
break
end;
if pos(FindDialog.CBFind.Text, Window.CSF[SendMessage(Window.List.Handle, LB_GetItemData, findline, 0)].value) <> 0
then
begin
Window.List.ClearSelection;
Window.List.Selected[findline] := true;
Window.ListClick(Window);
break
end;
until false
end
end
until findline = Window.List.Items.Count
end;
togoto :
----------------------------
и т.д. - не важно.
← →
AlexanderMS © (2006-05-08 16:27) [1]Добавлю, что CSF - массив элементов (record: Name и Value, которые отображаются в соответствующих RichEdit"ах). Findline - индекс ListBox и массива, содержащего элементы (где искать).
← →
Virgo_Style © (2006-05-08 17:08) [2]
> Помогите, пожалуйста, найти ошибку в коде
Это "пятничная задачка" на сообразительность, или же реальный вопрос? Если второе, то где, что и как?
← →
AlexanderMS © (2006-05-08 19:05) [3]
> Это "пятничная задачка" на сообразительность, или же реальный
> вопрос? Если второе, то где, что и как?
Да, вопросом это не назвать.
> Помогите, пожалуйста, найти ошибку в коде, реализующего
> последовательный поиск по 2-м RichEdit"ам.
Скорее, задачка. Что делать? Сколько ни бьюсь, в первый раз ищет нормально, но затем начинает искать и не находит, выдаёт, что элемент не найден.
← →
AlexanderMS © (2006-05-08 19:33) [4]Вот чудо! Теперь всё OK! Что глючило, не ясно. Ничего не менял.
← →
AlexanderMS © (2006-05-08 19:52) [5]О нет! Это уже слишком! Ничего не изменял, и снова глючит! (Даже из Delphi не выходил). :( Искал один и тот же фрагмент!
TRichEdit.FindText
Чтоб этот метод упразднили! То возвращает -1, то нужное число. :-o
← →
AlexanderMS © (2006-05-08 19:54) [6]
> Это "пятничная задачка" на сообразительность, или же реальный
> > вопрос?
Теперь - вопрос. Откуда такой глюк?
← →
AlexanderMS © (2006-05-08 19:56) [7]После очередного тестирования я хотел бы переписать сообщение [4].
← →
AlexanderMS © (2006-05-08 20:10) [8]И снова провал... [5]. У кого-нибудь было такое?
Страницы: 1 вся ветка
Форум: "Начинающим";
Текущий архив: 2006.05.28;
Скачать: [xml.tar.bz2];
Память: 0.49 MB
Время: 0.01 c