CYFROWY BARON • PROGRAMOWANIE • Zobacz wątek - Dynamiczne tworzenie komponentów na dynamicznie utworzonym..
Strona 1 z 1

Dynamiczne tworzenie komponentów na dynamicznie utworzonym..

Nowy postNapisane: czwartek, 18 marca 2010, 15:02
przez marekgajewski
Witam!
Chciałem się dowiedzieć, czy jest możliwe dynamiczne tworzenie komponentów na dynamicznie utworzonym formularzu?

Re: Dynamiczne tworzenie komponentów na dynamicznie utworzonym..

Nowy postNapisane: czwartek, 18 marca 2010, 20:09
przez Cyfrowy Baron
Jest możliwe. Uprzedzając ewentualne pytanie - nic się nie zmienia w kwestii dynamicznego tworzenia komponentów dla dynamicznego formularza, ale trzeba zawsze mieć na uwadze, że dynamiczny obiekt można umieścić na dynamicznym formularzy dopiero gdy ten zostanie utworzony.

Re: Dynamiczne tworzenie komponentów na dynamicznie utworzonym..

Nowy postNapisane: piątek, 19 marca 2010, 10:15
przez marekgajewski
A czy mógłbym prosić o jakiś kawałek kodu, który zobrazowałby mi jak tego dokonać?

Re: Dynamiczne tworzenie komponentów na dynamicznie utworzonym..

Nowy postNapisane: piątek, 19 marca 2010, 10:22
przez Cyfrowy Baron
Teraz to już Ciebie nie rozumiem. Chcesz tworzyć obiekty dynamicznie, a nie wiesz jak to robić?!

Kod: Zaznacz cały

TForm2 
*MyForm = new TForm2(NULL);
MyForm->Name = "MyForm"; // dla bezpieczeństwa
MyButton->Show();

TButton *MyButton = new TButton(MyForm);
MyButton->Name = "MyButton"; // dla bezpieczeństwa
MyButton->Parent = MyForm;
MyButton->Visible = true;
MyButtton->Left = 8;
MyButton->Top = 8;

/* należy zachować kolejność usuwania obiektów, albo usuwasz formularz i nie martwisz się o obiekty
- system sobie poradzi, albo najpierw usuwasz obiekty a dopiero potem formularz na którym się one znajdują */

delete MyButton;
delete MyForm;
 

Re: Dynamiczne tworzenie komponentów na dynamicznie utworzonym..

Nowy postNapisane: piątek, 19 marca 2010, 11:11
przez marekgajewski
Dzięki. Jesteś wielki :) Nawet nie spodziewałem się że to będzie takie proste :)

Re: Dynamiczne tworzenie komponentów na dynamicznie utworzonym..

Nowy postNapisane: piątek, 26 marca 2010, 21:47
przez usermaw
I jeszcze moja sugestia. Niektóre kontrolki nie są widoczne po dynamicznym utworzeniu na dynamicznej formie.
Jeśli tak się stanie, trzeba odświeżać formę po "postawieniu na nogi" dynamicznego komponentu;

FormaDynamiczna->Refresh();

Re: Dynamiczne tworzenie komponentów na dynamicznie utworzonym..

Nowy postNapisane: sobota, 27 marca 2010, 10:18
przez Cyfrowy Baron
To może wynikać tylko z jakiegoś systemowego błędu z odświeżaniem.

Re: Dynamiczne tworzenie komponentów na dynamicznie utworzonym..

Nowy postNapisane: poniedziałek, 17 marca 2014, 18:04
przez unloco
Jak do tej pory temat ten bardzo mi pomógł. Czy mogę prosić o informację, jak na nowo utworzonym TImage [nazwanym jak u twórcy tematu] zmusić, aby po naciśnięciu go LKM wykonany został kod:

Kod: Zaznacz cały
zmienna = 50;
Form2->ShowModal();


Umiem to zrobić 'ręcznie' tzn podczas tworzenia aplikacji wklepać ten kod (umiem też wyświetlać kolejne formularze/formatki/jakkolwiek się to nazywa ale podczas tworzenia). Ale jak to zrobić gdy obiekt jest stworzony dynamicznie?

EDIT już po napisaniu tego posta:

Warto jednak poszperać samemu. Udało mi się napisać rozwiązanie:

W Unit1.cpp stworzyłem:

Kod: Zaznacz cały
void __fastcall TForm1::ButonKlik(TObject *Sender)
{
// tutaj co się ma dziać
}


A w Unit1.h:

Kod: Zaznacz cały
void __fastcall TForm1::ButonKlik(TObject *Sender);


I zdarzenie wykonuje się poleceniem:

Kod: Zaznacz cały
DynamicznieUtworzonyObiekt->OnClick = &ButonKlik;

Re: Dynamiczne tworzenie komponentów na dynamicznie utworzonym..

Nowy postNapisane: poniedziałek, 17 marca 2014, 18:34
przez Mironas
1. Robisz taką samą funkcję obsługi zdarzenia jak na statycznie tworzonym formularzu - czyli:
w pliku *.hpp w sekcji __published:
KOD cpp:     UKRYJ  
__published:    // IDE-managed Components
  void __fastcall Image1Click(TObject *Sender);
 

a w pliku *.cpp:
KOD cpp:     UKRYJ  
void __fastcall TForm15::Image1Click(TObject *Sender)
{
  zmienna = 50;
  Form2->ShowModal();
}
//---------------------------------------------------------------------------


2. Tam gdzie tworzysz dynamicznie Image dodajesz wiersz:
KOD cpp:     UKRYJ  
  Image1->OnClick = Image1Click;

Re: Dynamiczne tworzenie komponentów na dynamicznie utworzonym..

Nowy postNapisane: poniedziałek, 17 marca 2014, 18:43
przez unloco
Mironas, uprzedziłeś mnie, napisałeś odpowiedź zanim zaktualizowałem swoją poprzednią wypowiedź ;). Ale dzięki również za wysiłek.

Re: Dynamiczne tworzenie komponentów na dynamicznie utworzonym..

Nowy postNapisane: poniedziałek, 25 stycznia 2021, 15:13
przez Mironas
Nic prostszego. Robisz kilka różnych zdarzeń, np MyImageClick1, MyImageClick2, MyImageClick3 i dla każdego tworzonego Image przypinasz inne zdarzenie - np tak:
KOD cpp:     UKRYJ  
if ( i == 1)
  MyImage->OnClick = MyImageClick1;
else if ( i == 2)
  MyImage->OnClick = MyImageClick2;
else if ( i == 3)
  MyImage->OnClick = MyImageClick3;
 

Re: Dynamiczne tworzenie komponentów na dynamicznie utworzonym..

Nowy postNapisane: poniedziałek, 25 stycznia 2021, 16:29
przez Mironas
To coś źle powiązałeś. Pokaż kod.