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