Numerowanie linii

0

Mam kodzik z gotowców do numerowania linii w Memo (ja sobie znieniłem na RichEdit):

procedure TForm1.btnNumberClick(Sender: TObject);

procedure SetCursor(Row, Column: Integer);
begin
{
Pierwsze polecenie ustawia kursor w linii okreslonej parametrem Row.
Drugie polecenie dodaje do tego wartosc parametru Column, ktore oznacza
numer znaku w linii.
}
Memo1.SelStart := Memo1.Perform(EM_LINEINDEX, Row, 0);
Memo1.SelStart := Memo1.Perform(EM_LINEINDEX, Row, 0) + Column;
end;

var I, Y, Count: Integer;

begin
Count := 0; // wyzeruj licznik
{
Najpierw pobierz pierwsza linie zaznaczonego tekstu. Zwiekszajac
te liczbe o jeden ( w komponencie Memo pierwsza linia oznaczona
jest przez cyfre 0 ) dostajemy numer linii, w ktorej znajduje sie kursor.
}
Y := Memo1.Perform(EM_LINEFROMCHAR, $FFFF, 0);
Inc(Y);

{
Petla wykonuje sie od zmiennej Y ( pierwsza linia zaznaczonego tekstu ) do
zmiennej CaretPos - koniec zaznaczonego testku.
}
for I := Y to Memo1.CaretPos.y + 1 do
begin
Inc(count); // zwieksz licznik
SetCursor(i -1, 0); // ustaw na poczatek linii
Memo1.SelText := Format('%d. ', [Count]); // wstaw numerowany tekst
Memo1.SetFocus; // ustaw komponent jako aktywny
end;
end;

I jeśli zaznacze jakiś tekst to wstawia mi tylko liczbę 1.
Jak pisze i wciśne przycisk odpowiedzialny za numerowanie to pierw jest 1 po naciśnięciu enter.... znowy 1.

Przed chwilą przyszedł mi pomysł do głowy, żeby może w OnKeyDown RichEdit naciśnięciu Enter zwiększyła się zmienna Count.

Nie wien czy zadziała, bo jestem w kafejce, ale proszę o inne propozycje pomocy.

0

Ściągnij sobie SynEdit, tam masz automatyczne numerowanie linii, możesz to wyłączyć jak nie chcesz :-)

0

No ale SynEdit nie zastąpi RichEdit'a...

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