Klassen Prozedur Hinweise erzeugen Bug..

Für Fragen rund um die Ide und zum Debugger
Antworten
Benutzeravatar
corpsman
Lazarusforum e. V.
Beiträge: 1630
Registriert: Sa 28. Feb 2009, 08:54
OS, Lazarus, FPC: Linux Mint Mate, Lazarus GIT Head, FPC 3.0
CPU-Target: 64Bit
Wohnort: Stuttgart
Kontaktdaten:

Klassen Prozedur Hinweise erzeugen Bug..

Beitrag von corpsman »

Guten Morgen allerseits,

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;
--
Just try it

Antworten