Przeszukiwnie memo

Odpowiedz Nowy wątek
2006-08-04 18:38
Fletsky
0
var
  i: integer;
    SearchOptions: TStringSearchOptions;
    Buffer, P: PChar;
    Size: Word;
 
begin
    SearchOptions := SearchOptions + [soDown];
  SearchOptions := SearchOptions - [soMatchCase];
  SearchOptions := SearchOptions - [soWholeWord];
  Size := Memo1.GetTextLen;
  Buffer := StrAlloc(Size + 1);
  try
   Memo1.GetTextBuf(Buffer, Size+1);
   P := SearchBuf(Buffer,Size,0,0,SearchEdit.Text,SearchOptions);
   If (P<>nil) then
    begin
     ListBox1.Items.Add('SearchBuf(Pointer) found match.');
     Memo1.SelStart := P - Buffer;
     Memo1.SelLength := Length(SearchEdit.Text);
    end;
   finally
    StrDispose(Buffer);

Wedle tego kodu, jak mi się wydaje w memo powinien byc zaznaczany tekst, z searchedita, natomiast, u mnie koncy się na notce, w listbox'ie że znaleziono, ten wyraz,i to wszystko, co tu jest nie tak?? :/

Pozostało 580 znaków

2006-08-05 07:39
0

Zamiast bawić się w takie obszene kody lepiej będzie po prostu użyć funkcji pos :-P
pos(s1, s2); - określa miejsce od którego w zmiennej s2 znajduje się ciąg znaków zmiennej s1 typu String.

i := pos(Edit1.text, Memo1.text);
ShowMessage('Znaleziono ciąw w TMemo na pozycji '+IntToStr(i));

Gdy ciąg nie występuje to pos zwraca wartość (chyba) -1, ale musisz to jeszcze sprawdzic

Pozostało 580 znaków

2006-08-05 09:32
0

Zwraca 0 przy breaku elementu.

na szybko:

var
  P:Integer;
begin
  P := Pos(Znajdz.Text, Memo.Lines.Text);
  if P > 0 then
  begin
    Memo1.SelStart := P;
    Memo1.SelLength := Length(Znajdz.Text);
  end;

Program to zbiór zer i jedynek ułożonych tak, żeby denerwować użytkownika.

Pozostało 580 znaków

Odpowiedz
Liczba odpowiedzi na stronę

1 użytkowników online, w tym zalogowanych: 0, gości: 1, botów: 0