Einzelnen Beitrag anzeigen

Benutzerbild von Dalai
Dalai

Registriert seit: 9. Apr 2006
1.680 Beiträge
 
Delphi 5 Professional
 
#4

AW: Mausrad, ScrollBox und PageControl

  Alt 7. Nov 2012, 18:54
Ich hab nun "ein wenig" (eher stundenlang, weil mir mein eigener Code im Weg stand ) rumprobiert und bin zu der Erkenntnis gelangt, dass das harte Setzen der Position keine gute Idee ist, weil es bescheiden aussieht. Daher habe ich mich dazu entschieden, bei meiner Methode zu bleiben, nur mit dem Unterschied, dass ich nun
ScrollBox.Perform(WM_VSCROLL, msg, 0); // msg ist entweder SB_LINEDOWN oder SB_LINEUP verwende statt wie bisher
SendMessage(ScrollBox.Handle, WM_VSCROLL, msg, 0);

Blöd ist, dass das Problem trotz dieser Änderung auf dem Problem-PC bestehen bleibt . Immerhin habe ich rausgefunden, dass das am Property ScrollBox.VertScrollBar.Smooth liegt. Schalte ich das ab, läuft das Programm normal weiter. Verstehen tue ich das nicht, denn das ist im Moment der einzige PC, auf dem das auftritt. Ich hatte das Problem schonmal auf meinem Laptop, allerdings war es nach einem Update der Synaptic-Treiber verschwunden.

Nur der Vollständigkeit halber hier noch die komplette Methode zur Ereignisbehandlung:
Delphi-Quellcode:
procedure TMainForm.FormMouseWheel(Sender: TObject; Shift: TShiftState;
  WheelDelta: Integer; MousePos: TPoint; var Handled: Boolean);
var
  rect: TRect;
  msg: LongInt;
begin
    if MainPageControl.ActivePageIndex < 0 then
        Exit;
    rect.Top:= 0;
    rect.Left:= 0;
    rect.TopLeft:= MainPageControl.ClientToScreen(rect.TopLeft);
    rect.Bottom:= MainPageControl.Height;
    rect.Right:= MainPageControl.Width;
    rect.BottomRight:= MainPageControl.ClientToScreen(rect.BottomRight);
    msg:= SB_LINEDOWN;
    if WheelDelta > 0 then
        msg:= SB_LINEUP;
    if PtInRect(rect, MousePos) then
    begin
        arPages[MainPageControl.ActivePageIndex].scroll.Perform(WM_VSCROLL, msg, 0);
        Handled:= True;
    end;
end;
// arPages ist ein dynamisches Array of record, in dem sich unter anderem eine ScrollBox und ein TabSheet befinden
// ja, ich weiß, dass man die Datenspeicherung noch optimieren kann :)
MfG Dalai
  Mit Zitat antworten Zitat