Button Release



  • Die Signatur kann ich aber nicht dynamisch erstellen und einem dynamischen erstellten Button zuweisen.
    Ich brauche ja je Button die gleiche Action (oder als Klasse-gibt den gleichen Fehler) um den Sender zu ermitteln und den individuellen Code auszuführen



  • Die Funktion kannst du doch auch nicht dynamisch erstellen. Die muß doch schon zur Compilierzeit feststehen. Die Funktion die du zuweisen willst muss die korrekte Signatur haben.
    Wenn du unbedingt deine Action4Execute haben willst, rufe die doch innerhalb der OnKeyUp auf.



  • Ich habe bisher in der Action das:

    void __fastcall TForm1::Action4Execute(TObject *Sender)
    {
        AnsiString data1;
        AnsiString str_button1;
        String datenpaket1;
        for(int i=0; i < Form1->ComponentCount; i++)
        {
            if (Form1->Components[i]->ClassNameIs("TButton"))
            {
                for(int n=0;n<40;n++)
                {
                str_button1= "FlashButton"+IntToStr(n+101);
                if (dynamic_cast<TButton*>(Sender)->Name == str_button1)
                {
                data1=IntToStr(n+1);
                datenpaket1="kanal001"+data1+"App";
                Edit2->Text=data1;
                Edit3->Text=datenpaket1;
                }
                else;
                }
            }
            else;
        }
    }
    

    Und jetzt verstehe ich die Deine Tipps nicht (habe wohl noch zu wenig Ahnung)
    Innerhalb von onKeyUp bekomme ich halt nicht hin, weil wie gesagt die Button dyn. erstellt werden und in der Designtime erstellen will ich nicht, weil es bis zu 240 werden können.



  • Wenn du mit Hilfe des Objektinspektors ein Funktion für OnKeyUp erstellst sieht die etwa so aus. Darin kannst du dann deine Action4Execute aufrufen.

    void __fastcall TForm1::KeyUp(TObject *Sender,
          WORD &Key, TShiftState Shift)
    {
      Action4Execute(Sender);
    }
    
    //Zuweisen
    button[i]->OnKeyUp = KeyUp;
    


  • Das wird aber nur gehen, wenn Du auch einen Key gedrückt hattest! Mit der Maus geht das so nicht.

    Gruß myerscola



  • habe ich bemerkt, und das gleiche mit MouseUp geht auch nicht:
    [C++ Fehler] Unit1.cpp(76): E2034 Konvertierung von 'void (_fastcall * (_closure )(TObject *,TMouseButton,TShiftState,int,int))(TObject *,TMouseButton,TShiftState,int,int)' nach 'void (_fastcall * (_closure )(TObject *,unsigned short &,TShiftState))(TObject *,unsigned short &,TShiftState)' nicht möglich

    und KeyUp bringt diese Warnung, geht aber:
    [C++ Warnung] Unit1.h(70): W8022 '_fastcall TForm1::KeyUp(TObject *,unsigned short &,TShiftState)' verbirgt virtuelle Funktion '_fastcall TWinControl::KeyUp(unsigned short &,TShiftState)'



  • heutmalhier schrieb:

    habe ich bemerkt, und das gleiche mit MouseUp geht auch nicht:

    Was genau heisst "geht nicht"? Bei welchem Code kommt die Fehlermeldung?



  • die Fehlermeldung habe ich vorhin schon gepostet:

    heutmalhier schrieb:

    habe ich bemerkt, und das gleiche mit MouseUp geht auch nicht:
    [C++ Fehler] Unit1.cpp(76): E2034 Konvertierung von 'void (_fastcall * (_closure )(TObject *,TMouseButton,TShiftState,int,int))(TObject *,TMouseButton,TShiftState,int,int)' nach 'void (_fastcall * (_closure )(TObject *,unsigned short &,TShiftState))(TObject *,unsigned short &,TShiftState)' nicht möglich



  • den hatte ich nicht gepostet:

    [Linker Fehler] Unresolved external '__fastcall TForm1::MouseUp(System::TObject *, Controls::TMouseButton, System::Set<Classes::Classes__1, 0, 6>, int, int)' referenced from D:\AKTUELLE PROJEKTE\MINIS\UDP LIGH@TNIGHT\UNIT1.OBJ



  • Wie gesagt, es wäre hilfreich, wenn du auch mal den Code postest, der die Fehlermeldung verursacht.



  • Die erste Fehlermeldung wird einfach dadurch verursacht, dass du dem OnMouseUp-Event eine Funktion mit der Signatur von OnKeyUp versuchst zuzuweisen. Für OnMouseUp musst du auch erstmal eine Eventfunktion mit dem Objektinspektor erstellen und die dann verwenden. Du kannst nicht einfach die OnKeyUp-Funktion dafür verwenden.
    Der zweite Fehler wird sicher dadurch verursacht, dass du eine Funktion mit dem Namen MouseUp zwar deklariert aber nicht definiert hast. Evtl. stimmt auch einfach nur die Parameterliste bei der Definition nicht.



  • erst mal vielen Dank an die Helfer, so funktioniert es jetzt.
    Ich habe nochmal den ganzen Müll der Versuche löschen müssen und dannging es auf Anhieb.
    im Header:

    void __fastcall MouseUp(TObject *Sender,TMouseButton Button, TShiftState Shift, int X, int Y);
            void __fastcall MouseDown(TObject *Sender,TMouseButton Button, TShiftState Shift, int X, int Y);
    

    Die Zuweisung:

    button[i]->OnMouseDown=MouseDown;
        button[i]->OnMouseUp=MouseUp;
    

    Und die Methoden:

    void __fastcall TForm1::MouseUp(TObject *Sender,
          TMouseButton Button, TShiftState Shift, int X, int Y)
    {
      Action4Execute(Sender);
    }
    //---------------------------------------------------------------------------
    
    void __fastcall TForm1::MouseDown(TObject *Sender,
          TMouseButton Button, TShiftState Shift, int X, int Y)
    {
    Action2Execute(Sender);
    }
    

    Die Warnung die ich gepostet hatte bleibt allerdings.

    Gruß Mark



  • Die Warnung wirst du los, wenn du deine Funktion KeyUp umbenennst.


Anmelden zum Antworten