Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2009.11.22;
Скачать: CL | DM;

Вниз

Как доработать или использовать функцию Поиска?   Найти похожие ветки 

 
Алексей Зотов   (2009-10-07 18:51) [0]

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;


 
KilkennyCat ©   (2009-10-07 21:07) [1]

дорабатываю:
астр тут нафигненужен

if SearchForText_AndSelect(richedit1, "перитонит диссоциирует") then
 SearchEdit.Text := "Поиск успешно завершен!"
 else SearchEdit.Text := "Ни чего не найдено!";


 
Алексей Зотов   (2009-10-07 21:34) [2]


> KilkennyCat ©   (07.10.09 21:07) [1]


При любом раскладе: Ни чего не найдено!
if SearchForText_AndSelect(SearchRichEdit, SearchEdit.Text) then
  SearchEdit.Text := "Поиск успешно завершен!"
  else SearchEdit.Text := "Ни чего не найдено!";


 
KilkennyCat ©   (2009-10-07 21:56) [3]


> Ни чего

слитно пишется, а функциям результат присваивать стоит иногда. либо по имени функции, либо result := ... говорят, это помогает.


 
Алексей Зотов   (2009-10-07 22:35) [4]


> KilkennyCat ©   (07.10.09 21:56) [3]

Так я и просил о доработке функции.
Ошибку Реализации я понял!


 
KilkennyCat ©   (2009-10-07 22:36) [5]

теперь работает?


 
Алексей Зотов   (2009-10-07 22:55) [6]


> KilkennyCat ©   (07.10.09 22:36) [5]

нет!


 
KilkennyCat ©   (2009-10-07 23:06) [7]

странно. ошибку же понял...

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 := "Ни чего не найдено!";


 
KilkennyCat ©   (2009-10-07 23:07) [8]

нижний кусок - мусор.


 
Алексей Зотов   (2009-10-08 07:34) [9]


> KilkennyCat ©   (07.10.09 23:07) [8]

Верхний тоже, даже не компилируется!
with RichEdit do - пропущено вообще!

В нижнем ошибка преобразования
aaa := SearchForText_AndSelect(SearchRichEdit, SearchEdit.Text);
E2010 Incompatible types: "Integer" and "Boolean"


 
Алексей Зотов   (2009-10-08 08:12) [10]

var
aaa : Boolean;
begin
aaa := SearchForText_AndSelect(SearchRichEdit, (SearchEdit.Text));
if aaa = true then
SearchEdit.Text := "Поиск успешно завершен!"
else SearchEdit.Text := "Ни чего не найдено!";
end;


Вроде пашет, но в RichEdit не выделяет Найденное вхождение!


 
Алексей Зотов   (2009-10-08 08:54) [11]

А вот так все в порядке, разобрался сам! Спс за ПРАВИЛЬНОЕ НАПРАВЛЕНИЕ!
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;


 
KilkennyCat ©   (2009-10-08 10:57) [12]

Да нифига ты не разобрался.

Лишний поиск, захламленный код и лишний ввод переменной....

> Верхний тоже, даже не компилируется!
> with RichEdit do
>
> - пропущено вообще!


Зато у тебя оно не пропущено и работает мощно. А не компилируется почему?


> В нижнем ошибка преобразования
> aaa := SearchForText_AndSelect(SearchRichEdit, SearchEdit.
> Text);


Я жне говорил, нижнее - мусор... случайно скопировал.


 
Алексей Зотов   (2009-10-08 11:28) [13]


> А не компилируется почему?


вот так Скомпилировалось
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;


Но функцию свою, а именно выделения найденного вхождения, не выполняет!

Ваш вариант, весь красный становится в среде!!!


 
Алексей Зотов   (2009-10-08 11:44) [14]

Доработанный и работающий вариант!
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;


Ну и ну?


 
brother ©   (2009-10-08 11:56) [15]

оформление
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;


 
KilkennyCat ©   (2009-10-08 15:37) [16]


> Ваш вариант, весь красный становится в среде!!!

Ужасно!!!
А в Вашем варианте тема With не раскрыта все равно. :-Р


 
Denis__ ©   (2009-10-09 21:03) [17]


> Ваш вариант, весь красный становится в среде!!!

Ему там по ходу стыдно и неудобно!? о_О Ахтунг!



Страницы: 1 вся ветка

Текущий архив: 2009.11.22;
Скачать: CL | DM;

Наверх




Память: 0.51 MB
Время: 0.015 c
15-1252279311
Дмитрий С
2009-09-07 03:21
2009.11.22
Метод защиты от создания экранок.


15-1253880513
Kerk
2009-09-25 16:08
2009.11.22
Рабсила vs труд


2-1254735726
Серый
2009-10-05 13:42
2009.11.22
query, dbgrid размер ячеек


4-1201527066
Вредитель
2008-01-28 16:31
2009.11.22
DLL и прорамма


15-1253824205
Юрий
2009-09-25 00:30
2009.11.22
С днем рождения ! 25 сентября 2009 пятница