procedure TForm1.ScrollBar1Change(Sender: TObject); function LineCount: integer; var X, Y: integer; begin Result := 0; Y := length(Memo1.Text); if Y > 0 then for X := 1 to Y do if Memo1.Text[X] = #13 then inc(Result); end;
function GoToLine(LineNo: integer): string; var P1, P2, Y: integer; begin Y := 1; P1 := 0; P2 := pos(#13, copy(Memo1.Text, P1, Length(Memo1.Text))) - 1; while Y < LineNo do begin P1 := P1 + P2 + 2; {2 to include #13#10} P2 := pos(#13, copy(Memo1.Text, P1 + 1, Length(Memo1.Text))) - 1; inc(Y); end; Memo1.SetFocus; Memo1.SelStart := P1; Memo1.SelLength := P2; Result := Memo1.SelText; end;
begin ScrollBar1.Min := 1; ScrollBar1.Max := LineCount; GoToLine(ScrollBar1.Position); end;
procedure TForm1.ScrollBar1Enter(Sender: TObject); begin ScrollBar1Change(Self); end;
Undskyld... jeg kan godt se, at det virker for en memo, men jeg skal bruge det i en richedit (det burde jeg have skrevet), og her virker det mærkeligt nok ikke...
Jeg troede bare man kunne skrive noget i stil med:
memo1/richedit1.???.scrollbarposition??:=??
I øvrigt kunne du (tror jeg nok) bare have skrevet ScrollBar1.Max := memo1.lines.count; i stedet for hele den funktion der tæller linjer...
Ved du hvilke ændringer, der skal laves i dit forslag for at få det til at virke for en richedit?
ok det her skulle virke, det er måske ikke den bedste måde, men hvad kan du forlange :)
procedure TForm1.GoToLine(Nr: integer); var Text: string; i: integer; begin Text := ''; for I := 0 to Nr do Text := Text +#13#10+ RichEdit1.Lines.Strings[I];
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.