Announcement

Collapse
No announcement yet.

dynamische erzeugte Buttons ansprechen

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • dynamische erzeugte Buttons ansprechen

    Wie kann ich mit nButton = new TButton(this); dynamisch erzeugte Buttons (abgesehen von Ereignisprozeduren) ansprechen?
    <br>Ich brauche das zum Beispiel um bestimmte Buttons mit ...->Hide(); zu verstecken.

    Thx in advance!

  • #2
    Hy,<bR>
    also wenn du die Button's mit<br>
    TButton *MyButton;<br>
    MyButton = new TButton(this);<br>
    MyButton->Parten = this;<br>
    MyButton->SHow();
    erstellst dann kannst du sie ganz normal <bR>
    ansprechen. Einfach MyButton->Befehl;<br>
    <bR>
    <b>mfg.:</b> Andre

    Comment


    • #3
      hmm so einfach geht das leider nicht. Mein Problem ist folgendes.
      Ich habe zu Programmstart einige Buttons dynamisch erzeugt.
      <br>
      <br>Der Code hierzu ist:
      <br>
      <PRE>TButton *nButton
      for (i=0; i<ia; i++)
      {
      nButton = new TButton(this);
      nButton->OnClick = ClkArtist;
      nButton->Tag=i;
      nButton->SetBounds(240*Screen->Width/800, i*32+30, 313, 25);
      nButton->Caption=verz[i];
      nButton->Parent = ScrollBox1;
      }
      </PRE>
      Klickt man einen von diesen wird ein OnClick-event abgearbeitet. Danach hat der User die Möglichkeit wieder zum "Hauptbildschirm" zurück zu kehren. Jetzt kann es vorkommen, dass einige der Buttons ausgeblendet werden müssen. Nur wie sprech ich den jeweiligen (im Programm erzeugten) Button an?

      Davor hatte ich die Buttons in der Entwicklungsumgebung auf meine Form gepackt und das Problem so gelöst:
      <br>
      <PRE>
      TButton *pTmpBtn = NULL;
      for (i=0; i<ia; i++)
      {
      pTmpBtn = dynamic_cast <TButton*> (FindComponent("Button" + IntToStr(i+1)));
      if (pTmpBtn) pTmpBtn->Hide();
      }
      </PRE>
      <br>Aus Optimierungsgründen sollen sie aber nun dynamisch erzeugt werden

      Comment


      • #4
        Vielleicht ist es die Lösung, die Zeiger TButton *nButton die offenbar in mehreren Formularen angesprochen werden sollen ("Hauptbildschirm"...) als externe Variable zu deklarieren.

        Beispiel

        Formular 1

        int x=300;

        TButton *nButton;

        In Formular 2 wird x ebenfalls benötigt:

        extern int x;

        extern TButton *nButton;

        Nun kann x in Formular 2 ganz normal weiterbenutzt werden. Compiler "weiß", dass es eine Variable x gibt, deren Speicher jedoch woanders festgelegt wurde
        Christian

        Comment


        • #5
          Wenn ich dein Problem richtig verstanden habe, bräuchtest du
          die Buttons doch nur in der Formklasse deklarieren statt lokal
          in der Prozedur -- vielleicht sogar als Array, damit du nachher
          leicht per Schleife auf alle zugreifen kannst.
          <p>Ciao, Uli

          Comment


          • #6
            hallo dave,<BR>
            in der Ereignisbehandlungsroutine OnClick den Zeiger *Sender<BR>
            casten. >>TButton *Button((TButton *) Sender);<< Jetzt kannst du<BR>
            mit *Button auf den zugreifen, der das Ereignis aussgeloesst hat.<BR>
            Fran

            Comment

            Working...
            X