Da ich mir nicht so sicher bin wie ich den gefundenen Bug im Bugtracker reporten soll, suche ich erst mal hier jemanden der ihn nachstellen kann.
Im speziellen geht es um die Option "Werkzeuge->Einstellungen->Editor->Anzeige->Klassen/Prozeduren-Hinweise anzeigen"
Ich habe mir ein Plugin für Lazarus gebastelt, was im Prinzip folgendes macht. Bakup aller Editor Daten ( Topline, Bookmarks, Cursorpos ), dann Verändern des Textes, und am Schluss werden alle Bakup Werte wieder gesetzt.
Das Problem ist nun, dass wenn ich obige Option anschalte, und mein Plugin starte sich die Topline des Aktuellen Fensters ändert. Sprich der Angezeigte Bereich Rutscht meistens um eine Zeile nach oben ( => Topline ist um 1 zu klein ). Nehme ich die Option Raus, dann funktioniert der Source unten 1a und die Topline verutscht nie.
=> Entweder ist es tatsächlich ein Bug, oder es gibt nun eine Variable, die mir das Offset um welches ich Topline verändern muss mit angibt.
Code: Alles auswählen
for i := 0 to High(cursors) do begin
cursors[i].Cursorpos := SourceEditorManagerIntf.SourceEditors[i].CursorTextXY;
cursors[i].TopLine := SourceEditorManagerIntf.SourceEditors[i].TopLine; // <-- Hier wird die Top Line ausgelesen
sy := TSynEdit(SourceEditorManagerIntf.SourceEditors[i].EditorControl);
for j := 0 to 9 do begin
cursors[i].Bookmarks[j].x := 0; // Beruhigt den Compiler
cursors[i].Bookmarks[j].y := 0; // Beruhigt den Compiler
sy.GetBookMark(j, cursors[i].Bookmarks[j].x, cursors[i].Bookmarks[j].y);
end;
end;
..
E := SourceEditorManagerIntf.ActiveEditor;
..
E.ReplaceLines(0, E.LineCount, St.DataString); // <-- Hier wird der Komplette Text des Synedits "ersetzt"
..
for i := 0 to High(cursors) do begin
SourceEditorManagerIntf.SourceEditors[i].CursorTextXY := cursors[i].Cursorpos;
SourceEditorManagerIntf.SourceEditors[i].TopLine := cursors[i].TopLine; // <-- Hier wird die Top Line wieder zurück geschrieben
sy := TSynEdit(SourceEditorManagerIntf.SourceEditors[i].EditorControl);
for j := 0 to 9 do begin
sy.SetBookMark(j, cursors[i].Bookmarks[j].x, cursors[i].Bookmarks[j].y);
end;
end;