Button1Click und ButtonDClick zusammen auf einem Formular.



  • Ich benutze beide Button1Click und ButtonDClick zusammen auf einem Formular.
    Mit dem Doppelklick wird leider immer zuerst die Funktion
    void __fastcall TForm7::Button1Click(TObject *Sender) bearbeitet und erst dann
    void __fastcall TForm7::ButtonDClick(TObject *Sender).

    Wie kann ich in der ersten Funktion erkennen, dass der Aufruf vom Doppelklick kommt?



  • Das wird meines Wissens nach nicht gehen. Da einem DblClick immer ein Click vorraus geht.

    Aber du könntest die Funktion aus Click verzögern.

    Also quasi:

    void OnClick(*Sender)
    {
     Timer1->Enabled = true;
    }
    
    void DblClick(*Sender)
    {
     Timer1->Enabled = false;
     DblClickFunktion();
    }
    
    void OnTimer(*Sender)
    {
     Timer1->Enabled = false;
     ClickFunktion();
    
    }
    

    Korrigiert mich wenn ich falsch liege 😉
    }



  • Bevor du (oder sonst jemand) weiter Gehirnschmalz daran verschwendest: warum würde man überhaupt auf einen Doppelklick reagieren wollen?
    Das widerspricht dem etablierten Verhalten eines Buttons, der ist für Singleclicks da. Ansonsten hätte er sicher auch ab Werk ein OnDblClick-Event wie z.B. TForm.

    Davon abgesehen geht aus deinem Beitrag auch nicht klar hervor, was ButtonDClick eigentlich sein soll. Das OnClick eines TButton mit Namen 'ButtonD' oder ein (selbst erstelltes) OnDblClick-Ereignis?



  • Jansen schrieb:

    Bevor du (oder sonst jemand) weiter Gehirnschmalz daran verschwendest: warum würde man überhaupt auf einen Doppelklick reagieren wollen?
    Das widerspricht dem etablierten Verhalten eines Buttons, der ist für Singleclicks da. Ansonsten hätte er sicher auch ab Werk ein OnDblClick-Event wie z.B. TForm.

    Davon abgesehen geht aus deinem Beitrag auch nicht klar hervor, was ButtonDClick eigentlich sein soll. Das OnClick eines TButton mit Namen 'ButtonD' oder ein (selbst erstelltes) OnDblClick-Ereignis?

    Deine Reaktion ist arrogant. Wenn du nicht den Anwendungsfall kennst, darfst

    du nicht meine Frage als sinnlos einzustufen mit einer Berufung an

    „etablierten Verhalten eines Buttons“.Ich bin seit 30 Jahren in

    Softwarebereich beruflich tätig (obwohl Borland C++ Builder nicht mein

    berufliches Feld ist) und deine Reaktion ist für mich nicht zum Verstehen.

    Wenn es um „ButtonDClick“ dann die Antwort in der Borland Hilfe von

    C++Builder zu finden ist.



  • Meiner Ansicht nach ist Jansen nicht arrogant, sondern hat recht.
    Ein Button ist in Windows nicht für einen Doppelklick vorgesehen.
    Es macht auch keinen Sinn, bei einem Doppelklick ein gänzlich anderes Verhalten zu programmieren als bei einem Einzelklick.
    Es wird immer in jedem Fall das OnClick Ereignis zweimal aufgerufen, wenn du einen Button doppelklickst.
    Eine Möglichkeit, auf einen Doppelklick zu reagieren, wäre im OnClick die Zeit seit dem letzten OnClick zu messen und bei sehr kurzen Zeiten anders zu reagieren als bei langen Zeiten.
    Zu ButtonDClick findet noch nicht einmal Google etwas...



  • Ähm, ich habe mich doch explizit nach dem Anwendungsfall erkundigt:
    Warum würde man (du) auf einen Doppelklick auf dem Button reagieren wollen?

    Dass ein Doppelklick tatsächlich nicht die übliche Bedienweise eines Buttons ist, wirst du ja hoffentlich zugestehen. Das macht deine Frage aber nicht an sich sinnlos sondern vor allem ungewöhnlich.

    Zu 'ButtonDClick' liefert die Hilfe des XE2 hier nichts, Google kennt den Begriff nur im Zusammenhang mit wxWidgets und oder als handgeschriebenes Custom-Event in .NET, und aus meiner beim BCB5 beginnenden Erfahrung mit dem C++Builder ist er mir ebenfalls nicht geläufig. Deswegen meine Frage.

    Edit: zu lange getrödelt, W.Posur hat ja schon fast alles gesagt.


Log in to reply