GTK2 Scrollbars beim TCustomControl ->Problem

Für Fehler in Lazarus, um diese von anderen verifizieren zu lassen.
Antworten
pluto
Lazarusforum e. V.
Beiträge: 7178
Registriert: So 19. Nov 2006, 12:06
OS, Lazarus, FPC: Linux Mint 19.3
CPU-Target: AMD
Wohnort: Oldenburg(Oldenburg)

GTK2 Scrollbars beim TCustomControl ->Problem

Beitrag von pluto »

Hallo,
bei meinem PLEDITOR bin ich jetzt beim Scrollen angelangt. Die Komponente wurde von TCustomControl abgeleitet.
Unter GTK1 Funktioniert das Scrollen. Aber ich möchte es gerne das es unter GTK2 auch Funktioniert und genau das Tut es nicht. Der Scrollbalken bewegt sich nicht einmal :( :( Ich schließe daraus das es möglicherweise ein GTK2 Fehler ist, aber es kann natürlich auch sein das ich was vergessen habe, aber was ? Hier ein Code-Ausschnitt:

Code: Alles auswählen

procedure TPLEditor.ScrollV(const aScrollCode: Integer);
begin
 inherited;
  with EditorTextBuffer do begin
    Case aScrollCode of
    {  SB_TOP: FirstLine:=0;
      SB_BOTTOM: FirstLine:= LastLine;
      SB_LINEUP: if FirstLine > 0 then FirstLine:=FirstLine-1;
      SB_LINEDOWN: if FirstLine < LastLine then FirstLine:=FirstLine+1;
      SB_PAGEUP: if Firstline > LinesPerPage-1 then FirstLine:=FirstLine-LinesPerPage;
      SB_PAGEDOWN: if Firstline < LastLine then FirstLine:=FirstLine+LinesPerPage;
     }

      SB_THUMBTRACK,SB_THUMBPOSITION: begin
        SV.cbSize := SizeOf(SV);
        SV.fMask := SIF_TRACKPOS;
        GetScrollInfo(Handle, SB_Vert, SV);
        SV.nPos:=sv.nTrackPos;
        FirstLine:=sv.nTrackPos;
      end;
    end; // Of Case
    Paint;
  end;
end; // TPLEditor.ScrollV   
 
procedure TPLEditor.Paint;
begin
  inherited Paint;
  EditorTextBuffer.NoNewPaint:=True;
  EditorTextBuffer.ClearBuffer;
  EditorTextBuffer.NewPaint:=True;
  EditorTextBuffer.NoNewPaint:=False;
 
  EditorTextBuffer.Paint;
  SetupScrollBars;
end; // TPLEditor.Paint 
 
procedure TPLEditor.SetupScrollBars;
begin
  if (HandleAllocated) then begin
    if (EditorTextBuffer.Count >0) {and (fTextBuffer.count-1 >= fTextBuffer.LinesPerPage-6) }then begin
      SV.cbSize := SizeOf(SV);
      SV.fMask := SIF_POS or SIF_RANGE or SIF_PAGE or SIF_DISABLENOSCROLL ;
      SV.nPos := EditorTextBuffer.FirstLine;
      SV.nMin := 0;
      SV.nMax := EditorTextBuffer.CountPX;
      SV.nPage:= EditorTextBuffer.Buffer.Height;
      SetScrollInfo(Handle, SB_Vert, SV,True);
    end;
....
end;


Vielen Dank.....
MFG
Michael Springwald

pluto
Lazarusforum e. V.
Beiträge: 7178
Registriert: So 19. Nov 2006, 12:06
OS, Lazarus, FPC: Linux Mint 19.3
CPU-Target: AMD
Wohnort: Oldenburg(Oldenburg)

Re: GTK2 Scrollbars beim TCustomControl ->Problem

Beitrag von pluto »

Ich werde versuchen ein entsprechendes Test Projekt zuverfügung zu stellen. Ich weiß das ihr warscheinlich mit meinem Code nicht viel anfangen könnt, aber könnt ihr evlt. sehen was ich vergessen habe ? Weil bei GTK1 läuft ja alles Problemlos. Nur halt unter GKT2 nicht. Wenn ich das Problem nicht lösen kann muss ich zu GTK1 zurückkehren, da geht es ja wenigents.
MFG
Michael Springwald

pluto
Lazarusforum e. V.
Beiträge: 7178
Registriert: So 19. Nov 2006, 12:06
OS, Lazarus, FPC: Linux Mint 19.3
CPU-Target: AMD
Wohnort: Oldenburg(Oldenburg)

Re: GTK2 Scrollbars beim TCustomControl ->Problem

Beitrag von pluto »

Wie versprochen hier die Test Anwendung. Wie oben beschrieben: Einfach mal mit GTK2 und mit GTK1 kompilieren. Dann werden ihr das Fehl Verhalten bemerken. Es müsste auch unter Windows laufen. Es sind einige Text Dateien als Beispiel Texte dabei.

EDIT01:
Problem gelöst. Archiv ist geupdatet.
SynEdit war eine große Hilfe... es lag am:
Message.pos ich habe es über GetScrollInfo versucht das geht anscheid unter GTK2 nicht.
plScrollTestA.zip
(125.3 KiB) 69-mal heruntergeladen
MFG
Michael Springwald

Antworten