TScrollBox & Mausrad



  • Hallo zusammen,

    kann es sein, daß die TScrollBox irgendwie das Mausrad ignoriert? Jedes Ereignis wird völlig korrekt ausgelöst, nur eben OnMouseWheel... nicht. Auch wenn die ScrollBox einen Scrollbar (vertikel) anzeigt, kann ich nicht mit Hilfe des Mausrades scrollen.

    Gibt's da irgendwas zu beachten oder kann die Komponente das einfach nicht?

    Danke für die Antwort,
    Mipe



  • Das Ereignis wird ausgelöst, wenn ein Control den Focus besitzt. Setze TabStop = true. dann kann die ScrollBox auch den Focus erhalten und dann wird auch OnMouseWeel ausgelöst.



  • Danke!

    Von Haus aus erkennt die Scrollbox das Mausrad aber nicht zufällig? Ich mein so wie jetzt zB. StringGrid, etc. Die reagieren ja schon auf das Rad, ohne ein Ereignis zu verändern.

    Mipe



  • Xqgene schrieb:

    Das Ereignis wird ausgelöst, wenn ein Control den Focus besitzt. Setze TabStop = true. dann kann die ScrollBox auch den Focus erhalten und dann wird auch OnMouseWeel ausgelöst.

    Zum Scrollen würde ich OnMouseWheelUp bzw OnMouseWheelDown benutzen.
    Die Ereignise werden auch bei TabStop=false ausgelöst!
    Du schreibst einfach in das OnMouse... Ereignis:

    void __fastcall TMainFrame1::ScrollBox1MouseWheelDown(TObject *Sender,
          TShiftState Shift, TPoint &MousePos, bool &Handled)
    {
            ScrollBox1->VertScrollBar->Position+=50;
            Handled=true;
    }
    

    Schreibst du einfach nur nen Kommentar (damit der Builder das event nich löscht) oder setzt Handled auf false, wird automatisch gescrollt. Was bedeutet, um den Wert der in den Mauseigenschaften unter Win eingestellt ist (meist so um +/-3).



  • @jansen: ja ich hab ihn gelesen. und hab es hier auch genauso nachgemacht. hab sogar den code von -=]xXx[=- direkt reinkopiert, damit ich jeden fehler meinerseits ausschliessen kann. funktioniert aber trotzdem nicht. die beiden ereignisse werden nie aufgerufen(OnMouseWheelUp,OnMouseWheelDown).

    ausserdem wusste ich nicht, das man threads des gleichen themas wieder zum leben erwecken muss, wenn sie schon mal da waren.

    Meep Meep



  • Falls sich jemand über die scheinbar zusammenhanglosen Aussagen von Meep Meep wundert:
    http://www.c-plusplus.net/forum/viewtopic.php?t=67660



  • Also ich habe das selbe Problem und google macht einen auch nicht schlau.

    ( http://www.swissdelphicenter.ch/de/forum/viewtopic.php?t=9410&sid= )

    Ich habe eine TScrollBar und darin ein grosses TImage.
    Wie bekommt man es nun hin das wenn ich mit der Maus drüber bin und das Mausrad benutze es scrollt .

    Weiss das echt keiner oder kann das der CBuilder einfach nur nicht x.X


  • Mod

    Hallo

    werte doch die Nachricht (WM_MOUSEWHEEL)aus
    und mach dann was du willst (verschieben usw.)

    MfG
    Klaus



  • Also kann es der CBuilder alleine nicht. Sehr schade, da ich noch nicht weiss wie genau das mit den Windows Botschaften funktioniert und ich so machen muss das er eben die ScrollBar scrollt wenn ich über dem TImage bin und mit Mausrad scrolle. 😞



  • Hi zusammen,

    ich denke, das ist eher ein 'Problem' von Windows, respektive des Maustreibers.

    In DB-Grids z.B. kann man mit einem aktuellen Logitech-Treiber nur vom ersten bis zum letzten sichtbaren DS per Mausrad navigieren. Wird jedoch ein alter Treiber eingesetzt, werden die DS wie erwartet aus dem sichtbaren Bereich verschoben. Der Nachteil ist, dass bei allen Komponenten die das native Scrolling untestützen, das mit Windows 2000 eingeführt wurde, dann 2 Scrollevents ausgelöst werden... Ein Teufelskreis.

    P.S. Äh, ich hab' mir die Beiträge unter den Links nicht durchgelesen, aber die in der ScrollBox befindliche Komponente muss natürlich größer sein, als die ScrollBox, damit das überhaupt funktioniert...


Log in to reply