In ButtonClick was reinschreiben



  • Ich erstelle so einen Button:

    void __fastcall TForm1::Button1Click(TObject *Sender)
    {
     TButton *b = new TButton(Owner);
     b->Parent = Form1;
    }
    

    Weiß jemand, wie ich nun etwas ich die Click Methode dieses Button schreibe, sodass eine Aktion ausgeführt wird, wenn ich darauf klicke?

    Vielen Dank im Voraus.



  • Indem Du eine OnClick-Methode schreibst und diese zur Laufzeit dem Button zuweist.

    Dazu gibt es auch was in den FAQ.



  • Danke für den Link. Doch eine Sache verstehe ich nicht. So stehts in der FAQ:

    Button1->OnClick = OnButton1Click; 
    
    //wobei irgendwo da steht: 
    
    void __fastcall TForm1::OnButton1Click(TObject *Sender) 
    { 
    ... //das funktioniert doch nur, wenn ich einen Button1 habe, doch der wird doch erst zur Laufzeit erstellt ???
    }
    

    Ich muss also vorher irgendwoe eine Click Methode erstellen und diese dann dem Event OnClick meines zur Laufzeit erstellten Button zuweisen. Doch wie kann ich bitte solch eine Click Methode erstellen, obwohl der Button noch gar nicht existiert? Das verstehe ich nicht.



  • versuche es mal so:
    Button erzeugen:

    void __fastcall TForm1::Button1Click(TObject *Sender)
    {
        TButton *b = new TButton(Owner);
        b=new TButton(this);
        b->Parent=Form1;
        b->Caption="Knopf";
        b->Width=100;
        b->Height=40;
        b->Name="Buttonneu";
        b->OnMouseDown =FunktionMausDruck; // die Funktion ist eine eigene Klasse
    }
    

    und die Klasse:

    void __fastcall TForm1::FunktionMausDruck(TObject *Sender,
          TMouseButton Button, TShiftState Shift, int X, int Y)
    {
    Label1->Caption="Knopf gedrückt an Pos x= "+ IntToStr(X) + " und y= "+IntToStr(Y);
    }
    

    im Header:

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

    oder statt auf MouseDown zu reagieren kannst Du OnClick mit einer Action (ActionList) verwenden:

    b->OnClick=Action1Execute;
    

    und in der Action reinschreiben was Du machen willst.

    Gruß myerscola


Anmelden zum Antworten