AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Mausrad, ScrollBox und PageControl

Ein Thema von Dalai · begonnen am 7. Nov 2012 · letzter Beitrag vom 8. Nov 2012
 
Benutzerbild von Dalai
Dalai
Online

Registriert seit: 9. Apr 2006
1.684 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
 


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 20:28 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz