Dynamiczne komponnety i metody - problem

dział ogólny

Dynamiczne komponnety i metody - problem

Nowy postprzez gregory » piÄ…tek, 4 czerwca 2010, 23:34

Witam.
Mam pewien problem z programem i dynamicznymi komponentami. Napisałem aplikację, w której tworzę dynamicznie 25 komponentów BitBtn i jedną wspólną metodę BitBtnClick, którą przypisuje do zdarzenia OnClick. Problem polega na tym, że w ta moja metoda po kliknięciu na dany przycisk musi pokazywać komunikat z tekstem w pozycji Caption dynamicznego przycisku. Nie wiem za bardzo jak się do klikniętego przycisku odnieść. Oto co mam:
Kod: Zaznacz cały
void __fastcall TForm1::FormCreate(TObject *Sender)
{
    przyciski = new TBitBtn*[25];
    int x = 380;
    int y = 16;
    int licznik = 0;
    for(int i = 0; i < 25; i++)
    {
        przyciski[i] = new TBitBtn(this);
        przyciski[i]->Parent = this;
        przyciski[i]->OnClick = BitBtnClick;
        przyciski[i]->Height = 43;
        przyciski[i]->Width = 43;
        przyciski[i]->Left = x;
        przyciski[i]->Top = y;
        x += 48;
        licznik++;
        if(licznik == 5)
        {
            y += 48;
            x = 380;
            licznik = 0;
        }
    }

void __fastcall TForm1::BitBtnClick(TObject *Sender)
{

    ShowMessage();     //funkcja ma pokazywać Caption danego dynamicznego komponentu typu BitBtn, który zostaÅ‚ klikniÄ™ty.
}
}

ProszÄ™ o pomoc.
Avatar użytkownika
gregory
Bladawiec
Bladawiec
 
Posty: 26
Dołączył(a): środa, 17 lutego 2010, 17:36
PodziÄ™kowaÅ‚ : 8
OtrzymaÅ‚ podziÄ™kowaÅ„: 0
System operacyjny: Windows 7
Kompilator: C++ Builder
Gadu Gadu: 0
    Windows 7Firefox

Re: Dynamiczne komponnety i metody - problem

Nowy postprzez Cyfrowy Baron » sobota, 5 czerwca 2010, 07:29

OdpowiedziÄ… jest polimorfizm: ► patrz serwis: Cyfrowy Baron dziaÅ‚: teoria -> Rzutowanie typów, przypisanie polimorficzne

Kod: Zaznacz cały

void __fastcall TForm1
::BitBtnClick(TObject *Sender)
{
  String btnCaption = dynamic_cast<TBitBtn *>(Sender)->Caption;

  ShowMessage(btnCaption);
}
 




Teraz kwestia deklaracji tablicy obiektów, jak rozumiem ma ich być 25, więc w pliku nagłówkowym (np. Unit1.h) w sekcji private lub public deklarujesz tablicę z 25 elementami:

plik nagłówkowy np. Unit1.h
Kod: Zaznacz cały
private:
        TBitBtn *przyciski[25];
 


a potem w pliku źródłowym (np. Unit1.cpp) w konstruktorze klasy lub w zdarzeniu OnCreate definiujesz te obiekty, prawie tak jak to zrobiłeś:

plik źródłowy np. Unit1.cpp
Kod: Zaznacz cały

void __fastcall TForm1
::FormCreate(TObject *Sender)
{
    int x = 380;
    int y = 16;
    int licznik = 0;
    for(int i = 0; i < 25; i++)
    {
       String bitName = "przycisk" + (String)i;
        przyciski[i] = new TBitBtn(this);
        przyciski[i]->Parent = this;
        przycisk[1]->Name = bitName;
        przyciski[i]->OnClick = BitBtnClick;
        przyciski[i]->Height = 43;
        przyciski[i]->Width = 43;
        przyciski[i]->Left = x;
        przyciski[i]->Top = y;
        x += 48;
        licznik++;
        if(licznik == 5)
        {
            y += 48;
            x = 380;
            licznik = 0;
        }
   }
}
 // tego nawiasu zabrakło w Twoim kodzie
 


Jeżeli obiekt ma mieć wypełnioną właściwość Caption to należy nadać mu nazwę (Name), w przeciwnym razie Caption pozostanie pusty. Po nadaniu nazwy możesz odwoływać się do obiektu po jego nazwie właściwości Name, czyli na dwa sposoby:

1.) przycisk[1]->Caption = "nagłówek";
lub:
2.) przycisk1->Caption = "nagłówek";

Jeżeli nie nadasz mu nazwy to możesz odwoływać się do niego tylko pierwszym sposobem.
Avatar użytkownika
Cyfrowy Baron
Administrator
Administrator
 
Posty: 4716
Dołączył(a): niedziela, 13 lipca 2008, 15:17
PodziÄ™kowaÅ‚ : 12
OtrzymaÅ‚ podziÄ™kowaÅ„: 442
System operacyjny: Windows 7 x64 SP1
Kompilator: Embarcadero RAD Studio XE2
C++ Builder XE2 Update 4
SKYPE: cyfbar
Gadu Gadu: 0
    Windows XPFirefox


  • Podobne tematy
    Odpowiedzi
    Wyświetlone
    Ostatni post

Powrót do Ogólne problemy z programowaniem

Kto przeglÄ…da forum

Użytkownicy przeglądający ten dział: Brak zalogowanych użytkowników i 8 gości

cron