Nein ! Es geht einfach nicht, ich habe dein Beispiel ausprobiert, aber es wird keine Vertikal Scrolleiste angezeigt.
Kann das sein das ich nirgends den Scroll Bereich setzte ?
Code: Alles auswählen
procedure TPlutoEditor.BufferChangeSize;
begin
// VertScrollBar.Range:=rows.Height;
// HorzScrollBar.Range:=rows.Width;
FScrollMaxX:=rows.Width;
FScrollMaxY:=rows.Height;
UpdateScrollBars;
end; // TPlutoEditor.BufferChangeSize
Das Event onBufferChangeSize wird beim Zeichnen aufgerufen und bestimmt somit die maximel ScrollHöhe und Scrollbreite. Aber es geht trotzdem nicht.
Code: Alles auswählen
procedure TPlutoEditor.UpdateScrollBars;
var
S: TScrollInfo;
begin
if (HandleAllocated) and (FScrollBars in [ssHorizontal, ssBoth]) then
begin
S.cbSize := SizeOf(S);
S.fMask := SIF_POS or SIF_RANGE or SIF_PAGE {or SIF_DISABLENOSCROLL};
S.nPos := FScrollPosX;
S.nMin := 0;
S.nMax := FScrollMaxX;
if (FScrollPagX > 0) then
inc(S.nMax, FScrollPagX - 1);
S.nPage := FScrollPagX;
SetScrollInfo(Handle, SB_HORZ, S, true);
end;
end;
Kann das da dadran liegen ? Dort wird ja nur Horizontal "behandelt" und nicht Vertikal.
Edit01: Ja daran hat es gelegen:
Code: Alles auswählen
procedure TPlutoEditor.UpdateScrollBars;
var
S: TScrollInfo;
begin
if (HandleAllocated) then begin
if (FScrollBars in [ssHorizontal, ssBoth]) then begin
S.cbSize := SizeOf(S);
S.fMask := SIF_POS or SIF_RANGE or SIF_PAGE or SIF_DISABLENOSCROLL;
S.nPos := FScrollPosX;
S.nMin := 0;
S.nMax := FScrollMaxX;
if (FScrollPagX > 0) then
inc(S.nMax, FScrollPagX - 1);
S.nPage := FScrollPagX;
SetScrollInfo(Handle, SB_HORZ, S, true);
end;
if (FScrollBars in [ssVertical, ssBoth]) then begin
S.cbSize := SizeOf(S);
S.fMask := SIF_POS or SIF_RANGE or SIF_PAGE or SIF_DISABLENOSCROLL;
S.nPos := FScrollPosY;
S.nMin := 0;
S.nMax := FScrollMaxY;
if (FScrollPagY > 0) then
inc(S.nMax, FScrollPagY - 1);
S.nPage := FScrollPagY;
SetScrollInfo(Handle, SB_Vert, S, true);
end;
end;
end;
Allerdings kann ich jetzt nur Horizontal Scrollen beim Vertikalen Scrollen Passiert irgendwie nix.
edit02:
endlich, ich musste nur WMVScroll anpassen.
allerdings wird immer noch nicht gescrollt wenn der Cursor am Rand ist.
Bei mir ist der Cursor in zwei Variablen gespeichert:
CursorX und CursorY und beim Setzten der Eigenschaften wird ein Event ausgelöst um dort
UpdateScrollBars aufzurufen.
Edit03: Beim Cursor Setzten muss ich doch nur UpdateScrollBars aufrufen oder nicht ?
Edit04:
also muss ich beim Setzten
FScrollPosX, FScrollPosY anpassen und da nach UpdateScrollBars aufrufen oder wie ?
Wenn ja genau das ist mein Problem. Ich möchte ja die Scroll Position berechnen. beim setzten des Cursors.