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

Dynamiczne tworzenie komponentów na dynamicznie utworzonym..

dział ogólny

Dynamiczne tworzenie komponentów na dynamicznie utworzonym..

Nowy postprzez marekgajewski » czwartek, 18 marca 2010, 15:02

Witam!
Chciałem się dowiedzieć, czy jest możliwe dynamiczne tworzenie komponentów na dynamicznie utworzonym formularzu?
Avatar użytkownika
marekgajewski
Bladawiec
Bladawiec
 
Posty: 11
Dołączył(a): środa, 10 marca 2010, 05:19
Podziękował : 0
Otrzymał podziękowań: 0
System operacyjny: Windows 7 Pro x64
Kompilator: C++ Builder 2010
Gadu Gadu: 0
    Windows 7Firefox

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

Nowy postprzez Cyfrowy Baron » czwartek, 18 marca 2010, 20:09

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.
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

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

Nowy postprzez marekgajewski » piątek, 19 marca 2010, 10:15

A czy mógłbym prosić o jakiś kawałek kodu, który zobrazowałby mi jak tego dokonać?
Avatar użytkownika
marekgajewski
Bladawiec
Bladawiec
 
Posty: 11
Dołączył(a): środa, 10 marca 2010, 05:19
Podziękował : 0
Otrzymał podziękowań: 0
System operacyjny: Windows 7 Pro x64
Kompilator: C++ Builder 2010
Gadu Gadu: 0
    Windows 7Firefox

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

Nowy postprzez Cyfrowy Baron » piątek, 19 marca 2010, 10:22

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;
 
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

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

Nowy postprzez marekgajewski » piątek, 19 marca 2010, 11:11

Dzięki. Jesteś wielki :) Nawet nie spodziewałem się że to będzie takie proste :)
Avatar użytkownika
marekgajewski
Bladawiec
Bladawiec
 
Posty: 11
Dołączył(a): środa, 10 marca 2010, 05:19
Podziękował : 0
Otrzymał podziękowań: 0
System operacyjny: Windows 7 Pro x64
Kompilator: C++ Builder 2010
Gadu Gadu: 0
    Windows 7Firefox

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

Nowy postprzez usermaw » piątek, 26 marca 2010, 21:47

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();
Avatar użytkownika
usermaw
Homos antropiczny
Homos antropiczny
 
Posty: 55
Dołączył(a): piątek, 2 stycznia 2009, 20:43
Podziękował : 2
Otrzymał podziękowań: 0
    Windows XPFirefox

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

Nowy postprzez Cyfrowy Baron » sobota, 27 marca 2010, 10:18

To może wynikać tylko z jakiegoś systemowego błędu z odświeżaniem.
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

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

Nowy postprzez unloco » poniedziałek, 17 marca 2014, 18:04

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;
Ostatnio edytowano poniedziałek, 17 marca 2014, 18:38 przez unloco, łącznie edytowano 1 raz
Avatar użytkownika
unloco
Bladawiec
Bladawiec
 
Posty: 5
Dołączył(a): niedziela, 23 grudnia 2012, 23:34
Podziękował : 0
Otrzymał podziękowań: 0
System operacyjny: Win 7
Kompilator: C++ Builder 2007
Gadu Gadu: 2154588
    Windows 7Firefox

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

Nowy postprzez Mironas » poniedziałek, 17 marca 2014, 18:34

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;
Avatar użytkownika
Mironas
Programista I
Programista I
 
Posty: 427
Dołączył(a): poniedziałek, 2 stycznia 2012, 19:02
Podziękował : 17
Otrzymał podziękowań: 61
System operacyjny: Windows 10
Kompilator: C++Builder 10.3 Rio
TMS Components Pack
Gadu Gadu: 0
    Windows XPChrome

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

Nowy postprzez unloco » poniedziałek, 17 marca 2014, 18:43

Mironas, uprzedziłeś mnie, napisałeś odpowiedź zanim zaktualizowałem swoją poprzednią wypowiedź ;). Ale dzięki również za wysiłek.
Avatar użytkownika
unloco
Bladawiec
Bladawiec
 
Posty: 5
Dołączył(a): niedziela, 23 grudnia 2012, 23:34
Podziękował : 0
Otrzymał podziękowań: 0
System operacyjny: Win 7
Kompilator: C++ Builder 2007
Gadu Gadu: 2154588
    Windows 7Firefox

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

Nowy postprzez Mironas » poniedziałek, 25 stycznia 2021, 15:13

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;
 
Avatar użytkownika
Mironas
Programista I
Programista I
 
Posty: 427
Dołączył(a): poniedziałek, 2 stycznia 2012, 19:02
Podziękował : 17
Otrzymał podziękowań: 61
System operacyjny: Windows 10
Kompilator: C++Builder 10.3 Rio
TMS Components Pack
Gadu Gadu: 0
    WindowsChrome

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

Nowy postprzez Mironas » poniedziałek, 25 stycznia 2021, 16:29

To coś źle powiązałeś. Pokaż kod.
Avatar użytkownika
Mironas
Programista I
Programista I
 
Posty: 427
Dołączył(a): poniedziałek, 2 stycznia 2012, 19:02
Podziękował : 17
Otrzymał podziękowań: 61
System operacyjny: Windows 10
Kompilator: C++Builder 10.3 Rio
TMS Components Pack
Gadu Gadu: 0
    WindowsChrome


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 3 gości

cron