Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

pitanja u vezi borlanda (pomagajte)

[es] :: C/C++ programiranje :: pitanja u vezi borlanda (pomagajte)

[ Pregleda: 1812 | Odgovora: 5 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

IDE

Član broj: 53403
Poruke: 586
*.crnagora.net.



Profil

icon pitanja u vezi borlanda (pomagajte)27.04.2005. u 19:53 - pre 231 meseci
kako da uradim u borlandu da kad napravim jedan FORM , da klikom na dugme otvorim neki drugi koji je isprogramiran da cini neke druge stvari...?
da bih bolje objasnio posmatrajmo dobri stari "about". mi znaci kliknemo na neko dugme, i otvori nam se neki novi prozorcic gdje pise sta vec pise i koji mozda moze da jos nesto uradi(kako je vec programiran)
Da li se to rjesava pravljenjem nekoliko "FORM"-ova odjednom pa jednostavno isprogramiramo pomocu klika na koje dugme ce se neki od njih otvoriti? koja bi onda to naredba bila koji dodjeljujemo dugmetu koje to treba da izvrsi?
there's something out there
waiting for us,
and it ain't no man...
 
Odgovor na temu

X Files
Vladimir Stefanovic
Pozarevac

SuperModerator
Član broj: 15100
Poruke: 4902
*.nat-pool.po.sbb.co.yu.

Jabber: xfiles@elitesecurity.org


+638 Profil

icon Re: pitanja u vezi borlanda (pomagajte)27.04.2005. u 20:58 - pre 231 meseci
Dakle, ovo bi moglo biti pitanje za mene...

Kada napravis novu Aplikaciju u Borland C++ Builder-u automatski imas
jednu (glavnu) formu, koja je nazvana Form1, sto naravno mozes promeniti
kako zelis.

Novu formu (prozor) mozes napraviti na dva nacina:

1) za vreme dizajniranja (design-time)
2) za vreme izvrsavanja (run-time)

Pogledaj deo koda u Project1.cpp:

Code:

Application->Initialize();
Application->CreateForm(__classid(TForm1), &Form1);
Application->CreateForm(__classid(TForm2), &Form2);
Application->Run();


Ovo znaci da nam je Form1 glavna forma (prva je u listi), a Form2 je
druga forma koja je napravljena za vreme dizajniranja i *vec je kreirana*
i samo je treba prikazati:

Code:

// ...
#include "Unit2.h"
// ...
void __fastcall TForm1::Button1Click(TObject *Sender)
{
   Form2->ShowModal();        
}


Ovaj nacin licno ne volim jer je podizanje programa predugo kad imas puno
formi za sve i svasta, a i bespotrebno zauzimas resurse racunara. U cemu bi bila
poenta drzanja About dijaloga celo vreme u memoriji - zar nije bolje kreirati
dinamicki tu formu kada ti zatreba i kasnije je unistiti.

da bi kreirai i prikazao tu drugu formu dinamicki moras je prethodno "odjaviti"
iz automatski kreiranis formi. To radis na dva nacina:

1) Jednostavno obrises tu drugu liniju iz Project1.cpp:

Code:

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


...ili u Project/Options:

prebaciti Form2 iz sekcije "Auto-Create Forms" u sekciju "Available Forms". I ovim
nacinom, Project1.cpp ce biti automatski modifikovan (obrisana druga linija).

Dakle, sada kod za pozivanje Form2 treba da izgleda ovako:

Code:

// ...
#include "Unit2.h"
// ...
void __fastcall TForm1::Button1Click(TObject *Sender)
{
   Form2 = new TForm2( this );
   Form2->ShowModal();
   delete Form2;
   // Form2 = NULL; // <--- OVO JE D(R)UGA PRICA, NEBITNO ZA SADA!
}



ili mozes da napravis novu formu bez iakakvog petljanja sa IDE-om:

Code:

void __fastcall TForm1::Button2Click(TObject *Sender)
{
   TForm *F = new TForm( this );
   F->ShowModal();
   delete F;
}
 
Odgovor na temu

IDE

Član broj: 53403
Poruke: 586
*.crnagora.net.



Profil

icon Re: pitanja u vezi borlanda (pomagajte)28.04.2005. u 21:25 - pre 231 meseci
x-files, hvala ti na iscrpnom odgovoru,zaista!
ja sam, nakon sto sam postavio ovu temu malo "zapeo" po HELP-u, i nasao sam odgovor na svoje pitanje...
evo kako oni uce...
kreiramo Form1, i normalno isprogramiramo ga, a zatim i kreiramo Form2 koji cemo "zvati" sa Form-a 1.
Oznacimo onaj Form sa kojeg zovemo neki drugi(u ovom slucaju oznacimo Form1) idemo File, pa "include Unit Hdr", odaberemo koji Unit "zovemo", i na taj nacin jedan drugog "vide" tj. moze se slobodno na Form1 staviti dugme koje ce imati vrijednost Form2->Show(); i sve ce super raditi...(bar meni na par primjera...)

Reci mi ako imas sto u vezi ovoga nacina...
koliko je "pouzdan", da li je dobar sto se tice memorijskih resursa pri ucitavanju samog programa...
druga stvar...napravio sam prije jedan fin programcic u Visual C++-u koji je imao poduzi algoritam, i koji ne bih htio da moram ponovo praviti u borland-u...
rijec je o obicnoj konzolnoj aplikaciji...da li mogu nekako (kako) povezati da mi aplikacija u borlandu pozove tu aplikaciju, a da joj ona vrati neku vrijednost (npr neki string koji je dobijen na njoj svojstven nacin)kako bi to izgledalo?
i jois jedna stvar...napravio sma mali editor teksta u borlandu koristeci Memo.
Sta treba da uradim da mi se kad dodjelim u windowsu da mi se .txt fajlovi otvaraju pomocu tog editora, i uradim dvoklik na neki txt, taj fajl ucita u moj editor, tj Memo komponentu??
sada kad uradim dvoklik, samo mi se otvori moj editor, ali mi se tekst iz tog txt-a ne ucita u Memo komponentu...
znam da mnogo trazim,ali ako iko ima vremena da mi odgovori, bio bih jako zahvalan.

there's something out there
waiting for us,
and it ain't no man...
 
Odgovor na temu

X Files
Vladimir Stefanovic
Pozarevac

SuperModerator
Član broj: 15100
Poruke: 4902
*.nat-pool.po.sbb.co.yu.

Jabber: xfiles@elitesecurity.org


+638 Profil

icon Re: pitanja u vezi borlanda (pomagajte)30.04.2005. u 18:25 - pre 231 meseci
Citat:

[...] idemo File, pa "include Unit Hdr",
odaberemo koji Unit "zovemo", i na taj nacin jedan drugog
"vide" tj. moze se slobodno na Form1 staviti dugme koje
ce imati vrijednost Form2->Show(); i sve ce super raditi...
(bar meni na par primjera...)


Dakle, potpuno je isto dali si išao preko glavnog menija
"File/include Unit Hdr", ili si ručno upisao:

#include "tajfajl.h"

Razlika je u tome što kada koristiš prvi slučaj, 'include'
direktivu će ti u kod ubaciti IDE, a u drugom slučaju to si
uradio ručno. Ja više volim da stvar oko "include" fajlova
kontrolišem sam, tim pre što s obzirom na količinu "include"
direktiva koje imam u svojim programima, čak i njih organizujem
u neke grupe radi preglednosti...

Inače (verovatno ovo i znaš), kada uključiš (include) neki
'header' fajl, time si zapravo time rekao da će se 'unit' u kome
ga uključuješ, pozivati na interfejs tog uključenog 'unit'-a.

To u tvom slučaju znači da će 'videti' Form2, i da će znati da
Form2 (preko tipa) ima Show() metodu. Takođe, kada praviš neke
svoje metode u Form2, koje ćeš pozivati iz Form1, one treba da
budu javne (public), inače će biti 'inaccessible'. Prava pristupa
se mogu ublaziti i 'friend' mehanizmom. Sve ovo je osnova OOP
i bilo bi dobro da to obnoviš.

Čuvaj se BCB Help-a! U njemu često koriste FormCreate() event.
Tu metodu nikako nemoj koristiti. Ona ima smisla samo u Delphiju,
a u BCB se može izvršiti i pre konstruktora što je nedozvoljeno
sa stanovišta C++-a. Umesto FormCreate() koristi klasičan
konstruktor! Ovo je problem koji je u BCB odavno identifikovan.

Citat:

Reci mi ako imas sto u vezi ovoga nacina...
koliko je "pouzdan", da li je dobar sto se tice memorijskih
resursa pri ucitavanju samog programa...


Tvoj program *nije* dobar sa stanovišta iskorišćenje resursa.
On je dobar samo kao primer uz BCB, a u OOP praksi se nikako
ne preporučuje niti koristi.

U tvom slučaju Form2 je za celo vreme rada programa učitan
u memoriju! Znači celo vreme je aktivan, a ti ga možda nikada
i nećeš pozvati ako je na primer u pitanju "About Dialog".
Zamisli još 100 takvih formi koje su celo vreme učitane!

Šta onda uraditi? Pretpostavimo da je Form2 zapravo "About
Dialog".

1) Dizajniraj svoj "About Dialog" po želji (dodaj slike, tekst,
odjavni OK taster, ...)
2) Idi u Project/Options/Forms/ i prebaci Form2 (About Dialog)
iz sekcije Auto-create u Available Forms.
3) Kod za pozivanje te "About Dialog"-a se menja, jer moraš
da kreiraš taj form radi prikaza, na primer ovako:

Code:

void __fastcall TForm1::Button1Click(TObject *Sender)
{
   try
   {
      try
      {
         Form2 = new TForm2( this );
         Form2->ShowModal();
      }
      catch ( const Exception &e )
      {
         ShowMessage( "Došlo je do neke greške!" );
      }
   }
   __finally
   {
      if ( Form2 )
      {
         delete Form2;
         Form2 = NULL;
      }
   }
}


Ovo može i kraće:

Code:

void __fastcall TForm1::Button1Click(TObject *Sender)
{
   Form2 = new TForm2( this );
   Form2->ShowModal();
   delete Form2;
}


... ali to je već druga priča. Savetujem ti moju tehniku
ili da koristiš pametne pointere:

Code:

// ...
#include <memory>
// ...
void __fastcall TForm1::Button1Click(TObject *Sender)
{
   std::auto_ptr<TForm2> Form2( new TForm2( this ) );
   try
   {
      Form2->ShowModal();
   }
   catch ( const Exception &e )
   {
      ShowMessage( "Došlo je do neke greške!" );
   }
}



Citat:

druga stvar...napravio sam prije jedan fin programcic u
Visual C++-u koji je imao poduzi algoritam, i koji ne bih
htio da moram ponovo praviti u borland-u...
rijec je o obicnoj konzolnoj aplikaciji...da li mogu nekako
(kako) povezati da mi aplikacija u borlandu pozove tu aplikaciju,
a da joj ona vrati neku vrijednost (npr neki string koji je
dobijen na njoj svojstven nacin)kako bi to izgledalo?


Najlakse je da izlaz tvog VC++ programa upises u neki fajl,
koji ces odmah zatim otvoriti iz BCB-a, ucitati, isparsovati i
na kraju - upotrebiti.

Ako tvoj VC++ program ima i neki izlaz na ekran - super! tada
mozes izlaz umesto na ekran da automatski redirektujes izlaz u
fajl batch komandom ">". Svojevremeno sam radio neki program koji
je ispisivao u datoteku sistemski sadrzaj ipconfig.exe komande
koja je vracala MAC adrese racunara. Onda sam ja ucitavao tu
datoteku i nesto proveravao.

Na primer: "dir > t.txt" ce sadrzaj direktorijuma upisati u datoteku.


Citat:

i jois jedna stvar...napravio sma mali editor teksta u borlandu
koristeci Memo.
Sta treba da uradim da mi se kad dodjelim u windowsu da mi se
.txt fajlovi otvaraju pomocu tog editora, i uradim dvoklik
na neki txt, taj fajl ucita u moj editor, tj Memo komponentu??
sada kad uradim dvoklik, samo mi se otvori moj editor, ali
mi se tekst iz tog txt-a ne ucita u Memo komponentu...
znam da mnogo trazim,ali ako iko ima vremena da mi odgovori,
bio bih jako zahvalan.


Ovo nije trivijalna stvar, i za nju treba vise rada - na primer
gotova komponenta. Evo ti jedna adresa, sa celim source codom
za to:

http://www.lebeausoftware.org/

pronaji na sajtu TRegExtension.


 
Odgovor na temu

IDE

Član broj: 53403
Poruke: 586
*.crnagora.net.



Profil

icon Re: pitanja u vezi borlanda (pomagajte)01.05.2005. u 12:05 - pre 231 meseci
hvala ti X Files, i pogledacu ovaj sajt...
mislio sam da je dovoljno u memo komponentu upisati kod koji bi upucivao da datoteku koju otvaramo upisujemo tu (u memo komponentu)...

a ono u vezi VC++ aplikacije: u redu , mogu ja ucitati neki fajl, ali kako ja da proslijedim iz Borland Builder aplikacije podatak(npr text) toj VC++ aplikaciji i na taj nacin je aktiviram da mi ona odradi nesto s tim podatkom, sto ce kasnije sve upisati u neki .txt npr.?

[Ovu poruku je menjao fucking voodoo dana 01.05.2005. u 13:27 GMT+1]

[Ovu poruku je menjao fucking voodoo dana 01.05.2005. u 13:28 GMT+1]
there's something out there
waiting for us,
and it ain't no man...
 
Odgovor na temu

IDE

Član broj: 53403
Poruke: 586
*.crnagora.net.



Profil

icon Re: pitanja u vezi borlanda (pomagajte)01.05.2005. u 12:17 - pre 231 meseci
evo sad sam pogledao..
TRegExtension vec imam(doduse nisam ga upotrebljavao).
kako sam ja sebi u glavu usadio, ja sam mislio da to sluzi ako napravimo neki novi tip fajla, npr .žžž, da ga registrujemo za nas program,kako bi kad bi kliknuli na taj fakl bio otvoren sa nasim programom...
ja sam htio obicni txt kad otvorim, da mi se ucita u moju "memo" komponentu (viselinijska editorska komponenta koju sam postavio za editovanje teksta u aplikaciji), znaci kao sto Notepad uradi kad kliknemo dvaput na txt...nista specijalno...
nadam se da sam sada malo bolje objasnio, ako se nismo prije bolje razumjeli...pa, ostajes li pri tome da se to radi pomocu TRegExtension-a ili...ako jeste, malo cu ga prostudirati, a ako ne...da ne gubim vrijeme...
there's something out there
waiting for us,
and it ain't no man...
 
Odgovor na temu

[es] :: C/C++ programiranje :: pitanja u vezi borlanda (pomagajte)

[ Pregleda: 1812 | Odgovora: 5 ] > FB > Twit

Postavi temu Odgovori

Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.