ScrollBox mit Mausrad scrollen



  • So langsam verzweifle ich an meinem verstand......

    Ich habe eine ScrollBox dynamisch erzeugt und in dieser werden eine liste mit labels geladen.
    Auf jedenfall genug zum scrollen. 😉

    Die ScrollBox hat ja Events dafür: onmousewheeldown und up

    Also Scrollleiste wird angezeigt und geht auch manuell.

    Ich habe so einiges Probiert im moment das hier:

    void __fastcall TForm3::SBMouseWheelDown(TObject *Sender, TShiftState Shift,
    	  TPoint &MousePos, bool &Handled)
    {
    Form3->Caption = "Down";
    Form3->SB->VertScrollBar->Position+=50;
    Handled=true;
    }
    

    Die Caption ist nur zur Kontrolle für mich. Denn ich habe festgestellt das dieses Event garnicht ausgelöst wird wenn ich an meinem Mausrad drehe.
    Irgendwas scheine ich vergessen zu haben. Focus oder was weis ich was.

    ich brauch nur nen Tip

    Edit: Ich habe da so ne Vorahnung ... ich erstelle die SB ja dynamisch zur Laufzeit -- dann müsste ich ja die Events ja da auch mit reinpacken irgendwie. also auch mit dynamisch erstellen. oder ?

    Robert



  • siehe FAQ -> Komponenten: "zur Laufzeit erstellen, anzeigen und Events zuweisen"
    und "Sendernamen bei einer OnClick-Prozedur identifizieren"



  • Danke für den Hinweis - aber ich bin ja ein braver Forumsuser und die FAQ kenn ich schon auswendig 😉

    Ich bekomm da immer nen Fehler:

    Also nochmal:

    Das Event selbst.

    void __fastcall TForm3::SBMouseWheelDown(TObject *Sender, TShiftState Shift,
    	  TPoint &MousePos, bool &Handled)
    {
    Form3->Caption = "Down";
    Form3->SB->VertScrollBar->Position+=50;
    Handled=true;
    }
    

    Dynamisch erstellte SB

    TLMDScrollBox * SB = new TLMDScrollBox(Form3);
    SB->Parent = Form3;
    SB->Name = "SB";
    SB->Top = 152;
    SB->Left = 299;
    SB->Width = 542;
    SB->Height = 377;
    SB->VertScrollBar->Tracking = true;
    SB->HorzScrollBar->Tracking = true;
    SB->ThemeMode = ttmNative;
    SB->BevelKind = bkNone;
    SB->OnMouseWheelDown = SBMouseWheelDown;
    

    Bei SB->OnMouseWheelDown = SBMouseWheelDown; meckert mein Compiler und sagt.

    [BCC32 Fehler] Error_List.cpp(650): E2034 Konvertierung von 'void (_fastcall * (_closure )(TObject *,TShiftState,TPoint &,bool &))(TObject *,TShiftState,TPoint &,bool &)' nach 'TMouseWheelUpDownEvent' nicht möglich

    Ich check nicht warum ?

    Zur Info: Der Name der ScrollBox ist SB und diese ist auch nur 1 mal vorhanden. Dynamisch deshalb weil dort ne lange liste drinn ist und um dann ne andere liste darzustellen lösche ich die ganze SB und sie wird neu erstellt. aus geschwindigkeitsgründen. denn mit destroycomponents dauerts zu lange. Deshalb dynamisch auch wenn ich nur immer die eine habe. 😉



  • mach das OnMouseWheel des TForm an!!!!
    Darin kannste die Scrollbox steuern.

    Rufe aber NICHT das MouseWheel der Scrollbox! Auch nicht den MouseWheelHandler der Scrollbox.

    Gruss
    frank



  • Werd ich mal aussprobieren im Moment gehts erstmal.

    Habe in einem anderen Beitrag eine Lösung gefunden und zwar musste ich vor TPoint noch nen const setzen.

    also statt

    void __fastcall SBMouseWheelDown(TObject *Sender, TShiftState Shift,
    		  TPoint &MousePos, bool &Handled);
    

    hab ich jetzt

    void __fastcall SBMouseWheelDown(TObject *Sender, TShiftState Shift,
    		  const TPoint &MousePos, bool &Handled);
    

    und auf einmal gehts. 😕


Anmelden zum Antworten