Announcement

Collapse
No announcement yet.

Event bei dynamisch erzeugten Objekten definieren.

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

  • Event bei dynamisch erzeugten Objekten definieren.

    Hallo,
    ich habe in einer Schleife dynamisch mehrere TShape objekte auf einer
    Maske erstellt. Jetzt möchte ich, dass bei klick auf eines dieser Elemente
    eine Aktion ausgeführt wird (Farbe des Shapes hin und her schalten usw..).

    Wie definiere ich den MouseDown-Event und die aufzurufende Funktion bei dymisch erzeugten Objekten?
    ---------------------------------------------------------------------------------------------
    for (int i=0;i<8 ;i++ ) {
    TShape *Shp = new TShape(this);
    Shp->Parent=Form4;
    Shp->Top=i*20+topPos;
    Shp->Left=15+leftPos;
    Shp->Width=8;
    Shp->Height=15;
    Shp->Shape=stRoundRect;
    Shp->Brush->Color=clGrayText;
    Shp->Name = "LED_"+Name+IntToStr(i);
    //Shp->OnMouseDown=ChgStat;
    Shp->Visible=true;
    }

  • #2
    http://www.marquardtnet.info/cecke/q...quicky_21.html
    Zuletzt editiert von Christian Marquardt; 18.03.2008, 16:09.
    Christian

    Comment


    • #3
      Na dann mach mal:

      TShape *my=new TShape(this);
      my->Top=300;
      my->Left=300;
      //my->Caption="Test";
      my->Parent=this;
      my->OnMouseDown=MyButtonClick;
      ...
      aus deinem Beispiel mit dem TButton und schon gehts nicht mehr!
      E2034 Konvertierung von 'vlid (_fastcall *(_closure )(TObject *))(TObject *)' nach 'TMouseEvent' nicht möglich

      Comment


      • #4
        Na dann mach mal:
        ????

        Dachte natürlich, du bist in der Lage, dass dortige Beispiel, welches sich auf einen Button bezieht, für dich und dein Shape umzusetzen.

        Ich entschuldige mich ausdrücklich, dass ich nicht für jede Komponente und jedes mögliches Ereignis ein Beispiel vorhalte
        Christian

        Comment


        • #5
          Des Weiteren dürfte wohl das

          for (int i=0;i<8 ;i++ ) {
          TShape *Shp = new TShape(this);

          in die Hose gehen. Du weisst hier 8x dem gleichen Objekt jeweils andere Daten zu?
          Üblicherweise nutzt man dazu ein Array von Objekten und jeder bekommt sein eigenes.

          Und zu deinem Problem mit dem Ereignis:

          "Geht nicht" ist keine Fehlermeldung. Ich kann nicht erkennen
          - wo du das Ereignis deklarierst
          - wo und wie definierst
          Christian

          Comment


          • #6
            Na dann mach mal:
            gemacht

            Die Headerdatei
            Code:
            //---------------------------------------------------------------------------
            #ifndef Unit1H
            #define Unit1H
            //---------------------------------------------------------------------------
            #include <Classes.hpp>
            #include <Controls.hpp>
            #include <StdCtrls.hpp>
            #include <Forms.hpp>
            #include <ExtCtrls.hpp>
            //---------------------------------------------------------------------------
            class TForm1 : public TForm
            {
            __published: // Von der IDE verwaltete Komponenten
             void __fastcall ShapeMouseDown(TObject *Sender, TMouseButton Button, TShiftState Shift, int X, int Y);
            private: // Benutzer-Deklarationen
            TShape *shapes[8];
            public:  // Benutzer-Deklarationen
             __fastcall TForm1(TComponent* Owner);
             __fastcall ~TForm1();
            };
            //---------------------------------------------------------------------------
            extern PACKAGE TForm1 *Form1;
            //---------------------------------------------------------------------------
            #endif
            Die CPP Datei

            Code:
            //---------------------------------------------------------------------------
            #include <vcl.h>
            #pragma hdrstop
            #include "Unit1.h"
            //---------------------------------------------------------------------------
            #pragma package(smart_init)
            #pragma resource "*.dfm"
            TForm1 *Form1;
            //---------------------------------------------------------------------------
            __fastcall TForm1::TForm1(TComponent* Owner)
             : TForm(Owner)
            {
            int x;
            for(x=0;x<8;x++)
             {
             shapes[x]= new TShape(this);
             shapes[x]->Parent=this;
             shapes[x]->Top=x*20+50;
             shapes[x]->Left=15+50;
             shapes[x]->Width=8;
             shapes[x]->Height=15;
             shapes[x]->Tag=x;
             shapes[x]->OnMouseDown=ShapeMouseDown;
             }
            }
            //---------------------------------------------------------------------------
            __fastcall TForm1::~TForm1()
            {
             delete shapes[];
            }
            //---------------------------------------------------------------------------
             
            void __fastcall TForm1::ShapeMouseDown(TObject *Sender, TMouseButton Button, TShiftState Shift, int X, int Y)
            {
            TShape *tmpshape=dynamic_cast<TShape*> (Sender);
            Application->MessageBox(IntToStr(tmpshape->Tag).c_str(),"Nummer des Shapes",MB_OK|MB_ICONEXCLAMATION|MB_APPLMODAL);
            }
            //---------------------------------------------------------------------------
            Zuletzt editiert von Christian Marquardt; 18.03.2008, 19:22.
            Christian

            Comment

            Working...
            X