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.