![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Как доработать или использовать функцию Поиска? [D2005, XP]
Алексей Зотов © (2009-10-07 18:51:00)
function SearchForText_AndSelect(RichEdit: TRichEdit; SearchText: string): Boolean;
var
StartPos, Position, Endpos: Integer;
begin
StartPos := 0;
with RichEdit do
begin
Endpos := Length(RichEdit.Text);
Lines.BeginUpdate;
while FindText(SearchText, StartPos, Endpos, [stMatchCase])<>-1 do
begin
Endpos := Length(RichEdit.Text) - startpos;
Position := FindText(SearchText, StartPos, Endpos, [stMatchCase]);
Inc(StartPos, Length(SearchText));
SetFocus;
SelStart := Position;
SelLength := Length(SearchText);
end;
Lines.EndUpdate;
end;
end;
Чтото типа этого
var
astr : boolean;
begin
//SearchForText_AndSelect(SearchRichEdit, SearchEdit.Text);
if SearchForText_AndSelect = astr then
SearchEdit.Text := 'Поиск успешно завершен!'
else SearchEdit.Text := 'Ни чего не найдено!';
end;
Denis__ (2009-10-09 21:03:00) [1]
> Ваш вариант, весь красный становится в среде!!!
Ему там по ходу стыдно и неудобно!? о_О Ахтунг!
KilkennyCat (2009-10-08 15:37:00) [2]
> Ваш вариант, весь красный становится в среде!!!
Ужасно!!!
А в Вашем варианте тема With не раскрыта все равно. :-Р
brother (2009-10-08 11:56:00) [3]оформление
function SearchForText_AndSelect(RichEdit: TRichEdit; SearchText: string): boolean;
var
Position: Integer;
begin
with RichEdit do
begin
RichEdit.Lines.BeginUpdate;
Position := FindText(SearchText, 0, Length(RichEdit.Text), [stMatchCase]);
if Position <> -1 then
begin
SetFocus;
SelStart := Position;
SelLength := Length(SearchText);
Result := true;
end else
Result := false;
RichEdit.Lines.EndUpdate;
end;
end;
Алексей Зотов (2009-10-08 11:44:00) [4]Доработанный и работающий вариант!
function SearchForText_AndSelect(RichEdit: TRichEdit; SearchText: string): boolean;
var
Position: Integer;
begin
with RichEdit do
begin
RichEdit.Lines.BeginUpdate;
Position := FindText(SearchText, 0, Length(RichEdit.Text), [stMatchCase]);
if Position <> -1 then begin
SetFocus;
SelStart := Position;
SelLength := Length(SearchText);
Result := true;
end else
Result := false;
RichEdit.Lines.EndUpdate;
end;
end;
Ну и ну?
Алексей Зотов (2009-10-08 11:28:00) [5]
> А не компилируется почему?
вот так Скомпилировалось
function SearchForText_AndSelect(RichEdit: TRichEdit; SearchText: string): boolean;
var
Position: Integer;
begin
with RichEdit do
begin
RichEdit.Lines.BeginUpdate;
Position := FindText(SearchText, 0, Length(RichEdit.Text), [stMatchCase]);
if Position <> -1 then begin
SelStart := Position;
SelLength := Length(SearchText);
Result := true;
end else begin
Result := false;
RichEdit.Lines.EndUpdate;
end;
end;
end;
Но функцию свою, а именно выделения найденного вхождения, не выполняет!
Ваш вариант, весь красный становится в среде!!!
KilkennyCat (2009-10-08 10:57:00) [6]Да нифига ты не разобрался.
Лишний поиск, захламленный код и лишний ввод переменной....
> Верхний тоже, даже не компилируется!
> with RichEdit do
>
> - пропущено вообще!
Зато у тебя оно не пропущено и работает мощно. А не компилируется почему?
> В нижнем ошибка преобразования
> aaa := SearchForText_AndSelect(SearchRichEdit, SearchEdit.
> Text);
Я жне говорил, нижнее - мусор... случайно скопировал.
Алексей Зотов (2009-10-08 08:54:00) [7]А вот так все в порядке, разобрался сам! Спс за ПРАВИЛЬНОЕ НАПРАВЛЕНИЕ!
function SearchForText_AndSelect(RichEdit: TRichEdit; SearchText: string): Boolean;
var
StartPos, Position, Endpos: Integer;
begin
StartPos := 0;
with RichEdit do
begin
Endpos := Length(RichEdit.Text);
Lines.BeginUpdate;
while FindText(SearchText, StartPos, Endpos, [stMatchCase])<>-1 do
begin
Endpos := Length(RichEdit.Text) - startpos;
Position := FindText(SearchText, StartPos, Endpos, [stMatchCase]);
if Position <> -1 then begin
Inc(StartPos, Length(SearchText));
SetFocus;
SelStart := Position;
SelLength := Length(SearchText);
result := true;
end else
Result := false;
Lines.EndUpdate;
end;
end;
end;
реализация
var
aaa : Boolean;
begin
aaa := SearchForText_AndSelect(SearchRichEdit, (SearchEdit.Text));
if aaa = true then
SearchEdit.Text := 'Поиск успешно завершен!'
else SearchEdit.Text := 'Ничего не найдено!';
end;
Алексей Зотов (2009-10-08 08:12:00) [8]
var
aaa : Boolean;
begin
aaa := SearchForText_AndSelect(SearchRichEdit, (SearchEdit.Text));
if aaa = true then
SearchEdit.Text := 'Поиск успешно завершен!'
else SearchEdit.Text := 'Ни чего не найдено!';
end;
Вроде пашет, но в RichEdit не выделяет Найденное вхождение!
Алексей Зотов (2009-10-08 07:34:00) [9]
> KilkennyCat © (07.10.09 23:07) [8]
Верхний тоже, даже не компилируется!
with RichEdit do- пропущено вообще!
В нижнем ошибка преобразования
aaa := SearchForText_AndSelect(SearchRichEdit, SearchEdit.Text);
E2010 Incompatible types: 'Integer' and 'Boolean'
KilkennyCat (2009-10-07 23:07:00) [10]нижний кусок - мусор.
KilkennyCat (2009-10-07 23:06:00) [11]странно. ошибку же понял...
function SearchForText_AndSelect(RichEdit: TRichEdit; SearchText: string): boolean;
var
Position: Integer;
begin
RichEdit.Lines.BeginUpdate;
Position := FindText(SearchText, 0, Length(RichEdit.Text), [stMatchCase]);
if Position <> -1 then begin
SelStart := Position;
SelLength := Length(SearchText);
Result := true;
end else
Result := false;
RichEdit.Lines.EndUpdate;
end;
var
aaa : longint;
begin
aaa := SearchForText_AndSelect(SearchRichEdit, SearchEdit.Text);
if aaa <> -1 then
SearchEdit.Text := 'Поиск успешно завершен!'
else SearchEdit.Text := 'Ни чего не найдено!';
Алексей Зотов (2009-10-07 22:55:00) [12]
> KilkennyCat © (07.10.09 22:36) [5]
нет!
KilkennyCat (2009-10-07 22:36:00) [13]теперь работает?
Алексей Зотов (2009-10-07 22:35:00) [14]
> KilkennyCat © (07.10.09 21:56) [3]
Так я и просил о доработке функции.
Ошибку Реализации я понял!
KilkennyCat (2009-10-07 21:56:00) [15]
> Ни чего
слитно пишется, а функциям результат присваивать стоит иногда. либо по имени функции, либо result := ... говорят, это помогает.
Алексей Зотов (2009-10-07 21:34:00) [16]
> KilkennyCat © (07.10.09 21:07) [1]
При любом раскладе: Ни чего не найдено!
if SearchForText_AndSelect(SearchRichEdit, SearchEdit.Text) then
SearchEdit.Text := 'Поиск успешно завершен!'
else SearchEdit.Text := 'Ни чего не найдено!';
KilkennyCat (2009-10-07 21:07:00) [17]дорабатываю:
астр тут нафигненужен
if SearchForText_AndSelect(richedit1, 'перитонит диссоциирует') then
SearchEdit.Text := 'Поиск успешно завершен!'
else SearchEdit.Text := 'Ни чего не найдено!';