Einzelnen Beitrag anzeigen

Benutzerbild von stahli
stahli

Registriert seit: 26. Nov 2003
Ort: Halle/Saale
4.343 Beiträge
 
Delphi 11 Alexandria
 
#5

AW: RichEdit scrollen auf FirstVisibleLine = X

  Alt 2. Apr 2020, 18:34
Vielen Dank für die Hilfe!

Das Ergebnis ist hier zu sehen: https://youtu.be/qH-kT2I5q6g

Hier mal ein Quelltextauszug, falls es mal jemand brauchen kann:
Delphi-Quellcode:
procedure TFormUnitOptimizer.SyncRichEdits;
var
  TLC: Integer;
  TLO, ALO: Integer;
  TLR, ALR: Integer;
  I: Integer;
  D: Integer;
  D_: Integer;
...
begin
  if (RichEdit1O.Focused) then
  begin
    TLO := RichEdit1O.Perform(EM_GETFIRSTVISIBLELINE, 0, 0);
    ALO := RichEdit1O.ActiveLineNo;

    PanelLeftFrame.Top := (((ALO - TLO) * 14) + 4);

    if Assigned(L) then
    begin
      D := MaxInt;
      for I := 0 to L.Count - 1 do
      begin
        D_ := Abs(ALO - (L[I]));
        if (D_ < D) then
        begin
          ALR := I;
          D := D_;
          if (D = 0) then
          begin
            TLR := RichEdit1R.Perform(EM_GETFIRSTVISIBLELINE, 0, 0);
            TLC := (I - (ALO - TLO));
            if (TLC < 0) then
            begin
              ALR := Succ(ALR + TLC);
              TLC := 0;
            end;
            RichEdit1R.Perform(EM_LINESCROLL, 0, TLC - TLR);

            PanelRightFrame.Top := (((ALR - TLC) * 14) + 4); // ausgestanztes Panel als Text-Rahmen
            PanelRightFrame.Visible := True;

            {
              OutputDebugString_(PWideChar(IntToStr(TLO) + '-' + IntToStr(ALO) + ' / ' + IntToStr(TLR) + '-' +
              IntToStr(ALR)));
            }


            Break;
          end
          else
          begin
            PanelRightFrame.Visible := False;
          end;
        end;
      end;
    end;
  end;
  ...
end;

Das Zeilenweise scrollen habe ich hier beschrieben: https://www.delphipraxis.net/158141-...ml#post1461089
Stahli
http://www.StahliSoft.de
---
"Jetzt muss ich seh´n, dass ich kein Denkfehler mach...!?" Dittsche (2004)
  Mit Zitat antworten Zitat