[ maximus_1 @ 07.04.2006. 18:06 ] @
Dok sam pregledavao primjere bcpp-a naišaio sam na primjer two forms i zainteresiorao me dio koda:

Code:
    Form2 = new TForm2(Application);
    Form2->ShowModal();
    delete Form2;


i nije mi jasno zašto su na ovaj način pozvali formu 2? Zašto ne samo Form2->ShowModal();
[ X Files @ 07.04.2006. 18:36 ] @
Kada u BCB-u kreiras novu formu, ona moze biti u DVA stanja:

- vec kreirana (AutoCreate)
- nije krairana (Available)

Pogledaj Project / Options / Forms

... pa sam mozes tu drugu formu postaviti da bude ili: AutoCreate ili Available.

Kada je forma AutoCreate, odmah je mozes pozvati sa:

Form2->ShowModal();

... a kada je Available, moras je prvo kreirati, prikazati i na kraju unistiti:

Form2 = new TForm2(Application);
Form2->ShowModal();
delete Form2;

[ X Files @ 08.04.2006. 07:38 ] @
Ne znam da li si shvatio.

Po default-u, Borland C++ Builder, kada dodas novu forumu u projekat, OBJEKAT te formu
AUTOMATSKI KREIRA KREIRA, a sam kod za njeno kreiranje mozes videti u fajlu Project1.cpp:

Code:

Application->Initialize();
Application->CreateForm(__classid(TForm1), &Form1);
Application->CreateForm(__classid(TForm2), &Form2); // <--- KREIRANA JE AUTOMATSKI
Application->Run();


Kad je forma, tj. njena instanca kreirana, to znaci da NE MORAŠ da koristi 'new', da je napravis,
na uobičajen način kao što se to obično radi u C++:
Code:

Form2 = new TForm2(Application);
Form2->ShowModal();
delete Form2;


... već je dovoljno da kažeš samo:
Code:

Form2->ShowModal();


Ovaj metod, kada se forme automatski kreiraju, meni se ne svidja jer kada imas previse formi, one
gutaju resurse, jer se bez potrebe drzi previse unapred kreiranih objekara u memoriji.

Ja uvek koristim DINAMIČKO kreiranje formi. Da bi forma koju si napravio bila samo NACRT a ne
gotov OBJEKAT, to moyes postici na dva nacina:

1) rucno obrisati liniju:
Code:

Application->CreateForm(__classid(TForm2), &Form2); // <--- KREIRANA JE AUTOMATSKI


2) ili otići u: BCB / Project / Options / Forms /
...i prebaciti Form2 iz AutoCreate -> Available. Opet ce nestati ona linija iz Project1.cpp.


Na ovaj nacin, EXE sa puno formi ce se daleko brze podizati.
[ maximus_1 @ 08.04.2006. 08:25 ] @
Da, shvaćam. Zahvaljujem. No, pitanje je što učiniti sa glavnom formom, da li se i ona mora kreirati dinamički?

[Ovu poruku je menjao maximus_1 dana 08.04.2006. u 09:37 GMT+1]
[ X Files @ 08.04.2006. 11:13 ] @
Uobicajeno je da glavna forma BUDE NAPRAVLJENA AUTOMATSKI, mada teoretski ni
to nije neophodno. Predlazem da jedino glavna forma bude kreirana AUTOMATSKI.

Evo ti jedan slucaj kada ti ne treba ni glavna forma, nego samo da se izvrsi neki kod:

Zamisli da kao podrsku nekoj Instalacionoj proceduri hoces da napravis program
koji ce nesto da posalje nekom programu.

Tada samo "Remove from Project..." tu glavnu formu, i kod stavis u Project1.cpp,
na primer:

Code:

#include <vcl.h>
#pragma hdrstop

#define WM_EXTERN_CLOSE  (WM_USER + 1005)

WINAPI WinMain(HINSTANCE, HINSTANCE, LPSTR, int)
{
   HWND DiWnd = NULL;
   DiWnd = FindWindow( "TDiMainForm", 0 );

   if ( DiWnd )
   {
      PostMessage( DiWnd, WM_EXTERN_CLOSE, 0, 0 );
   }
   return 0;
}


Na primer, ovaj kod koristim da posaljem rečniku poruku WM_USER + 1005, koju
sam predvideo da se rečnik zatvori (ako je već otvoren), ako hoćemo noviju
verziju rečnika da instaliramo preko nove (bez prethodnog ručnog zatvaranja).

[ gizmo981 @ 09.10.2008. 17:47 ] @
Kako da ako imam 7 dugmića na formi pritiskom na svaki otvorim novu formu?
[ X Files @ 09.10.2008. 18:02 ] @
Opiši tačno šta želiš da postigneš. Sasvim je svejedno koliko ima dugmića i formi.

Da li su te forme 'auto-created' ili 'available'? Ili su možda želiš da ih od nule kreiraš dinamički? Treba li da budu modalne ili ne? MDI ili SDI ? Itd..
[ gizmo981 @ 12.10.2008. 11:17 ] @
Primjer imam jednu formu i pritiskom na dugmić button da mi se otvori Form2
[ X Files @ 12.10.2008. 12:27 ] @
1. Pokreni BCB IDE, Form1 ce biti kreiran po defaultu
2. Napravi drugu formu, zvace se po defaultu Form2: BCB > File > New > Form
3. Vrati se na Form1 (npr: BCB > Window > Form1)
4. Dodaj header druge forme u formu 1: BCB > File > Include Unit Hdr... > Unit2 > Ok
5. Na Form1 dodaj Button1
6. Dupli klik na Button1, i dodaj kod:
Form2->ShowModal();