TUpDown mittlere und rechte Maustaste anzeigen



  • Ich möchte auch bei Klick mit der mittleren und rechten Maustaste TUpDown bedienen. Nur wie bekomme ich das visuell angezeigt? Ich dachte ich mach das so:

    void __fastcall TForm1::UpDown1MouseDown(TObject *Sender,
          TMouseButton Button, TShiftState Shift, int X, int Y)
    {
        if (Button==mbMiddle)
        {
            //SendMessage(UpDown1->Handle, WM_LBUTTONDOWN, 0 0);
            UpDown1->Perform(WM_LBUTTONDOWN, true, 0);
        }
        else if (Button==mbRight)
        {
            UpDown1->Perform(WM_LBUTTONDOWN, true, 0);
        }
    }
    //---------------------------------------------------------------------------
    void __fastcall TForm1::UpDown1MouseUp(TObject *Sender,
          TMouseButton Button, TShiftState Shift, int X, int Y)
    {
        if (Button==mbMiddle)
        {
            //SendMessage(UpDown1->Handle, WM_LBUTTONUP, 0 0);
            UpDown1->Perform(WM_LBUTTONUP, true, 0);
        }
        else if (Button==mbRight)
        {
            UpDown1->Perform(WM_LBUTTONUP, true, 0);
        }
    }
    

    Aber bei mittlerer und rechten Maustaste wird immer nur der obere Up-Schalter gedrückt. Was muss ich tun damit das auch mit dem Down-Schalter klappt?



  • Wenn du ArrowKeys auf true setzt, könntest du die Tasten 'KEY_UP' bzw. 'KEY_DOWN' an das UpDown-Control senden.



  • Per Tastatur Cursor hoch und runter funktioniert nur mit Eigenschaft Associate = Edit1

    void __fastcall TForm1::UpDown1MouseDown(TObject *Sender,
          TMouseButton Button, TShiftState Shift, int X, int Y)
    {
        if (Button==mbMiddle)
        {
            UpDown1->Perform(WM_KEYDOWN, 0, 0);
        }
    }
    

    Hierbei passiert leider gar nichts 😞

    Hat noch jemand eine Idee?



  • Hallo,

    das Problem ist, dass erst einmal ermittelt werden muss, welcher ArrowButton gedrückt wurde. Hier mein Vorschlag:

    void __fastcall TForm1::UpDown1MouseDown(TObject *Sender,
          TMouseButton Button, TShiftState Shift, int X, int Y)
    {
        TUDBtnType ArrowButton;
        switch(UpDown1->Orientation) {
            case udVertical :
                if ( Y < UpDown1->Height/2)
                    ArrowButton = btPrev;
                else
                    ArrowButton = btNext;
             break;
             case udHorizontal :
                if ( X < UpDown1->Width/2)
                    ArrowButton = btPrev;
                else
                    ArrowButton = btNext;
             break;
         }
    
        if (Shift.Contains(ssMiddle)) {
            UpDown1->Increment = 2;
            UpDown1Click(UpDown1, ArrowButton);
        }
        if (Shift.Contains(ssRight)) {
            UpDown1->Increment = 10;
            UpDown1Click(UpDown1, ArrowButton);
        }
    }
    //---------------------------------------------------------------------------
    
    void __fastcall TForm1::UpDown1Click(TObject *Sender, TUDBtnType Button)
    {
        switch(Button) {
            case btNext:
                UpDown1->Position += UpDown1->Increment;
                pos = UpDown1->Position;
                break;
            case btPrev:
                UpDown1->Position -= UpDown1->Increment;
                pos = UpDown1->Position;
                break;
        }
        Label1->Caption = IntToStr(pos);
    }
    //---------------------------------------------------------------------------
    

    mfg
    kpeter


Anmelden zum Antworten