tutorials.de Buch-Aktion 05/2012
ERLEDIGT
JA
ANTWORTEN
4
ZUGRIFFE
4164
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    o&oler o&oler ist offline Rookie
    Registriert seit
    Dec 2007
    Beiträge
    8
    Hi!
    Habe gerade erst angefangen mich mit der VCL der Boland Builders zu beschäftigen und hänge gerade an einer wichtigen Stelle. Nun die Frage ist, dass ich einfach nur einen Button dynamisch erzeugen und dann das OnClick-Event deklarieren möchte.
    Jedoch ist das nicht so einfach wie ich es mir vorgestellt habe.

    Ich habe auch schon mal in diesem Forum danach gesucht und folgende Antwort gefunden:
    <BR><PRE>
    void __fastcall TForm1::Button1Click(TObject Sender)
    {
    TButton *MyButton = new TButton(this);
    MyButton->Parent = this;
    MyButton->Name = "MyButton";
    MyButton->OnClick = ClickMyButton;

    }
    //---------------------------------------------------------------------------
    void __fastcall TForm1::ClickMyButton(TObject *Sender)
    {
    ShowMessage("Knöppelchen gedrückt");
    }</PRE><BR>

    Nun das ist genau das was ich brauche, dachte ich mir und habe mal schnell einen Button in die Form gezogen und den Quelltext geschrieben. Jedoch zeigt mit nun der Builder folgende Fehlermeldung an:
    [BCC32 Fehler] Unit1.cpp(18): E2316 '_fastcall TForm1::ClickMyButton(TObject *)' ist kein Element von 'TForm1'
    [BCC32 Fehler] Unit1.cpp(19): E2206 Ungültiges char-Zeichen 'ö' (0xf6)
    [BCC32 Fehler] Unit1.cpp(27): E2451 Undefiniertes Symbol 'ClickMyButton'

    Der 2. Fehler ist sicher eine Folgeerscheingung des ersten, aber was habe ich falsch gemacht?

    Und könntet Ihr mir vielleicht den this-Zeiger noch einmal erklären:
    Also hier in diesem konkreten Fall zeigt er auf Form1 richtig? D.h., dass ich anstatt this (hier) auch überall Form1 einsetzen könnte und das den gleichen Effekt hätte, oder?

    Ich hoffe diese Frage habt ihr nicht schon zu oft gestellt bekommen und hoffe, dass mir jemand von Euch helfen kann!!
    P.S. Benutze zurzeit c++Builder 2007 und 6
    mfg. Helli
    Frohe Weihnachten!
     

  2. #2
    Avatar von PixelShader
    PixelShader PixelShader ist offline Mitglied Gold
    Registriert seit
    May 2004
    Ort
    Koeln
    Beiträge
    148
    Habe schon seit einigem nichts mehr mit Borland zu tuhn gehabt , aber:

    Deine Methode ClickMyButton, du hast mal eben so TForm1:: davor geschrieben oder hast du auch den entsprechenden Header-Eintrag gemacht?
    Der waere soetwas, in die TForm1 Klassendeklaration:
    Code :
    1
    2
    
    public:
        void __fastcall ClickMyButton(TObject *);

    this zeigt immer auf die Instanz von der die Methode ausgefuehrt wird. Und ja, in deinem Fall bei Button1Click() ist this==Form1.

    PS.: ich glaube das hier passt eher in den Borland Forum
     

  3. #3
    o&oler o&oler ist offline Rookie
    Registriert seit
    Dec 2007
    Beiträge
    8
    Tausend Dank für deine schnelle Hilfe, natürlich war es das!

    Aber da man ja sauber programmieren möchte, könntest du mir vielleicht auch noch sagen wo denn dann der Button wieder deletet wird, denn wenn ich das gleich darunter schreibe, dann ist es logisch, dass gar nichts passiert! Oder deletet der Builder das vielleicht automatisch? Und sorry, wusste nicht, dass ihr eine eigene Borland-Section habt

    Fröhliche Weihnachten und danke noch mal!
     

  4. #4
    Avatar von PixelShader
    PixelShader PixelShader ist offline Mitglied Gold
    Registriert seit
    May 2004
    Ort
    Koeln
    Beiträge
    148
    da du das Button-repraesentierende-Objekt explizit per "new()" erstellst, muss das auch irgentwo per "delete" geloescht werden. Optimal sind stellen wie der Destructor "~TForm1()" oder sowas wie eine "Form1Close()" Methode. Da du die Pointer-variable aber in der Funktion deklarierst, gibt es sie nicht nach Ablauf dieser. Loesung: in der TForm1 Klassendefinition muss "TButton *MyButton;" rein.
    Musst natuerlich auch aufpassen, und nicht loeschen wenn es nicht erstellt wurde. Also im Endeffekt:

    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    
    // im Konstruktor
      MyButton = NULL;
    // im Button1Click
      if(!MyButton)
        MyButton = new TButton(this);
    // im destruktor
      if(MyButton)
        delete MyButton;

    bin froh falls ich helfen konnte frohe Weihnachten auch
     

  5. #5
    o&oler o&oler ist offline Rookie
    Registriert seit
    Dec 2007
    Beiträge
    8
    Nochmals danke, werde es gleich mal versuchen (-;
     

Ähnliche Themen

  1. Antworten: 1
    Letzter Beitrag: 26.07.09, 18:53
  2. Buttons dynamisch erstellen
    Von ucons im Forum Javascript & Ajax
    Antworten: 0
    Letzter Beitrag: 04.01.07, 10:44
  3. onClick event in DOm
    Von notebook20000 im Forum Javascript & Ajax
    Antworten: 2
    Letzter Beitrag: 05.10.06, 22:14
  4. dynamisch Buttons in Excel vba erstellen?
    Von sra im Forum Visual Basic 6.0
    Antworten: 1
    Letzter Beitrag: 25.02.04, 15:29
  5. Dynamisch Buttons erstellen
    Von darkarrow im Forum Flash Plattform
    Antworten: 1
    Letzter Beitrag: 22.01.02, 19:15