in meinem PLEDIT habe ich das Problem das die Scroll Balken immer sichtbar sind. Ich möchte aber das sie nur sichtbar sind, wenn es nötig ist.
Hier der Relevante Code zum Scrollen:
Code: Alles auswählen
procedure TPLEdit.WMVScroll(var Message: TWMVScroll);
begin
inherited;
ScrollV(Message.ScrollCode);
end; // TPLEdit.WMVScroll
procedure TPLEdit.WMHScroll(var Message: TWMHScroll);
begin
inherited;
ScrollH(message.scrollcode);
end; // TPLEdit.WMHScroll
procedure TPLEdit.SetupScrollBars;
begin
if (HandleAllocated) then begin
if (TextBuffer.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 := TextBuffer.FirstLine;
SV.nMin := 0;
SV.nMax := TextBuffer.Count;
SV.nPage:= TextBuffer.LinesPerPage;
SetScrollInfo(Handle, SB_Vert, SV, true);
end;
if (TextBuffer.LastColum > 0) then begin
SH.cbSize := SizeOf(SH);
SH.fMask := SIF_POS or SIF_RANGE or SIF_PAGE or SIF_DISABLENOSCROLL;
if TextBuffer.FirstColum = 1 then
SH.nPos := 0
else
SH.nPos := TextBuffer.FirstColum;
SH.nMin := 0;
SH.nMax := TextBuffer.LongstColumn;
SH.nPage:= TextBuffer.ColumPerPage;
SetScrollInfo(Handle, SB_Horz, SH, true);
if SH.nTrackPos = 1 then
SH.nPos := 1;
end;
end
end; // TPLEdit.SetupScrollBars
procedure TPLEdit.ScrollV(const aScrollCode: Integer);
begin
with TextBuffer 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);
FirstLine:=sv.nTrackPos;
// matchFirstLastLine(sv.nTrackPos);
end;
// else
// exit;
end; // Of Case
NewPaint:=True; SetupScrollBars; Refresh;
end;
end; // TPLEdit.ScrollV
procedure TPLEdit.ScrollH(const aScrollCode: Integer);
begin
inherited;
with TextBuffer do begin
case aScrollCode of
SB_TOP: FirstColum:=1;
SB_BOTTOM: FirstColum:=LastColum;
SB_LINELEFT: If FirstColum > 0 then FirstColum:=FirstColum-1;
SB_LINERIGHT: If FirstColum < LastColum then FirstColum:=FirstColum+1;
SB_PAGELEFT: If FirstColum > ColumPerPage-1 then FirstColum:=FirstColum-ColumPerPage;
SB_PAGERIGHT: If FirstColum < LastColum then FirstColum:=FirstColum+ColumPerPage;
SB_THUMBTRACK,SB_THUMBPOSITION: begin
SH.cbSize := SizeOf(SH);
SH.fMask := SIF_TRACKPOS;
GetScrollInfo(Handle, SB_Horz, SH);
if SH.nTrackPos = 0 then
FirstColum:=1
else
FirstColum:= SH.nTrackPos;
end
// else
// exit;
end; // Of Case
NewPaint:=True; SetupScrollBars; paint;
end; // with
end; // TPLEdit.ScrollH
Ich arbeite unter Linux(Debian, Lenny, KDE 3.....) mit GTK1