Buttons zur Laufzeit - Sender und Handler



  • Hallo

    ich fülle in einer Schleife ein stringGrid. Darin sollen in einer Spalte Buttons erzeugt werden. Wie geht man mit dem Click Event um? Sind ja mehrere Buttons.

    int i = 0;
    
    while (!ADOQueryGrid->Eof) {
    
        i = i + 1;
    
        // Def. Rechteck
        TRect R;
        R = stringGrid->CellRect(11,i);
    
        // Def. Button
        TButton *butDet = new TButton(this);
        butDet->Name = "butDet" + IntToStr(i);
        butDet->Caption = "Details";
        butDet->Left = stringGrid->Left + R.Left + 2;
        butDet->Top = stringGrid->Top + R.Top + 2;
        butDet->Width = R.Width();
        butDet->Height = R.Height();
    
        butDet->OnClick = butDetClick; // Button Event
        butDet->Parent = MainForm;
        ADOQueryGrid->Next();
    
    }
    

    Das funkt auch wunderbar und soll beim Click das hier aufrufen. Je nach Sender
    dann eine andere Aktion.

    void __fastcall TMainForm::butDetClick(TObject *Sender)
    {
        ShowMessage(Sender); // soll Namen des Buttons ausgeben, geht so nicht
        // Fehler: Konvertierung von 'TObject *' nach 'AnsiString' nicht möglich
        // hier die Aktion. z.B Id aus Grid Spalte an andere Funktion weitergeben. 
    }
    

    Wie komme ich an den Sender ran? Muß ich den schon im Funktionsaufruf übergeben?

    Gruß und Danke





  • Hallo

    steht auch in der FAQ unter Komponenten benutzen.

    bis bald
    akari


Log in to reply