kako da napravim delphi aplikaciju koja koristi forme i proc

1

kako da napravim delphi aplikaciju koja koristi forme i proc

offline
  • Pridružio: 12 Nov 2006
  • Poruke: 52

Interesuje me kako mogu da u delphiju odradim da aplikacija koristi unite (forme, procedure, funkcije), a da one nisu definisane u uses klauzuli ?
Naime, trenutno mi je svaka forma deo aplikacije, pa aplikacija raste dodavanjem svake nove forme. I javlja se problem, da kada ispravim makar jedan red u jednoj formi, moram da izbildujem projekat i prosledim ceo .exe fajl, umesto jednog dela.



Registruj se da bi učestvovao u diskusiji. Registrovanim korisnicima se NE prikazuju reklame unutar poruka.
offline
  • Srđan Tot
  • Am I evil? I am man, yes I am.
  • Pridružio: 12 Jul 2005
  • Poruke: 2483
  • Gde živiš: Ljubljana

Da ne bi morao da svaki put saljes ceo exe fajl, forme bi mogao da drzis u dll ili bpl fajlovima. Verovatno si do sad vec upoznat bar sa dll fajlovima. Dinamicke biblioteke dozvoljavaju da kod i podatke koje sadrze koristis u svom programu. Kasnije, promenom dinamicke biblioteke, tvoj program moze dobiti nove mogucnosti ili moze drugacije izgledati.
BPL fajlovi (Borland Package Library) je specijalna vrsta dinamicke biblioteke koja dozvoljava vecu integraziju biblioteke sa programom. Jedina mana im je sto ne mogu da se koriste u drugim programskim jezicima, a i sam program i bpl moraju biti iskompajlirani istom verzijom kompajlera.

S obzirom da verovatno sam razvijas aplikacije i razvojno okruzenje ti je iskljucivo Delphi IDE, preporucio bih ti da malo bolje upoznas bpl fajlove i njihove mogucnosti.



offline
  • Pridružio: 12 Nov 2006
  • Poruke: 52

Problem sa dinamičkim učitavanjem bpl paketa u Delphi 6.0.

Imam paket "pkgPrva.bpl" i u njemu formu "frmPrva" ( sa inicijalizacijom gde stoji sledeće

initialization     RegisterClass(TfrmPrva);     showmessage('Registracija klase "TfrmPrva" koja je u paketu');

U glavnom programu učitam paket "pkgPrva.bpl" i tu je ok, jer se učita paket i prikaže mi se poruka iz forme da je klasa forme registrovana.
Medjutim, nadalje ne uspevam da nadjem klasu forme. Šta može da bude problem.

Evo koda u glavnom programu:

procedure TForm1.btnPokreniFormuClick(Sender: TObject); var Forma : TForm;     KlasaForme : TFormClass;     Odgovor : Hmodule; begin   Odgovor := LoadPackage('pkgPrva.bpl');   if Odgovor > 0 then   begin     ShowMessage('Paket "pkgPrva.bpl" uèitan');     KlasaForme := TFormClass(GetClass('TfrmPrva'));     if Assigned(KlasaForme) then     begin        Forma := KlasaForme.Create(Application);        try         Forma.ShowModal;       finally         Forma.Free;       end;     end     else       ShowMessage('Klasa forme nije nadjena');     UnloadPackage(Odgovor);     end     else       ShowMessage('Paket nije pronadjen'); end;

Prilažem i celokupan kod.

mycity.rs/must-login.png

offline
  • Srđan Tot
  • Am I evil? I am man, yes I am.
  • Pridružio: 12 Jul 2005
  • Poruke: 2483
  • Gde živiš: Ljubljana

Koliko vidim, nisi ukljucio opciju Build with runtime packages za projekat koji treba da ucita bpl. Samo to ukljuci i radice bez problema.

BTW nemoj zaboraviti da distribuiras i standardne bpl fajlove koje tvoj program koristi (vcl, rtl, ado,...).

offline
  • Pridružio: 12 Nov 2006
  • Poruke: 52

Hvala na informaciji. I sam sam pronašao da treba da je uključena ova opcija, ali sam mislio da ima način da prosledjujem samo svoje bpl fajlove.

U svakom slučaju hvala.

offline
  • Srđan Tot
  • Am I evil? I am man, yes I am.
  • Pridružio: 12 Jul 2005
  • Poruke: 2483
  • Gde živiš: Ljubljana

Ako ti se ne svidja da prosledjujes i standardne bpl fajlove, a zelis da dinamicki dodajes delove programa, moraces da koristis dll-ove, a sa njima je malo teze raditi.

Ako budes imao problema, mogu da ti napisem jedan jednostavan program koji ce kreirati formu iz dll-a.

offline
  • Emil Beli
  • Pridružio: 03 Jan 2005
  • Poruke: 2990
  • Gde živiš: Beograd

Ne vidim zasto je iz DLL-a teze raditi? U cemu je razlika sem sto nije preporucljivo prebacivati string i koristiti BorlandMM, vec samo PChar ali sve ostalo radi apsolutno isto.

offline
  • Srđan Tot
  • Am I evil? I am man, yes I am.
  • Pridružio: 12 Jul 2005
  • Poruke: 2483
  • Gde živiš: Ljubljana

Koliko znam (ispravi me ako nisam upravu) nije moguce prosledjivati instance klasa izmedju DLL i aplikacije, a izmedju BPL i aplikacije je moguce. Ako se koristi Forms unit u DLL Application objekat nije isti kao Application objekat u aplikaciji, a kod BPL je isti kao i u aplikaciji. Da li RegisterClass moze da se koristi u DLL, pa da se kreira instanca klase u aplikaciji koristeci FindClass?

offline
  • Emil Beli
  • Pridružio: 03 Jan 2005
  • Poruke: 2990
  • Gde živiš: Beograd

- Ne, application objekat nije isti, naravno.
- Ne nije moguce prebaciti instancu klase onako kako se to inace radi ali je moguce prebaciti pointer i to TypeCast-ovati
- RegisterClass, ne, i ne treba ti, neces komponente gurati u DLL pa da ih registrujes unutar delfija.
- Findclass radi

Inace, DLL je zamisljen da bude kao jedna celina, ne zavisna od host aplikacije pa je tako i treba koristiti. Inace, mozes celu aplikaciju da napravis u DLL-u, ne znam u cemu je problem? Very Happy

offline
  • Srđan Tot
  • Am I evil? I am man, yes I am.
  • Pridružio: 12 Jul 2005
  • Poruke: 2483
  • Gde živiš: Ljubljana

Citat:Ne vidim zasto je iz DLL-a teze raditi? U cemu je razlika sem sto nije preporucljivo prebacivati string i koristiti BorlandMM, vec samo PChar ali sve ostalo radi apsolutno isto.

Citat:- Ne, application objekat nije isti, naravno.
- Ne nije moguce prebaciti instancu klase onako kako se to inace radi ali je moguce prebaciti pointer i to TypeCast-ovati
- RegisterClass, ne, i ne treba ti, neces komponente gurati u DLL pa da ih registrujes unutar delfija.
- Findclass radi


Toliko o apsolutnoj slicnosti Smile

Nigde nisam rekao da sa dll ne mozes da napravis cak i celu aplikaciju, a rekao sam da je lakse raditi sa bpl jer moguce koristiti objekte kao sto je Application bez ikakvih problema, prebacivanje instanci iz bpl u aplikaciju i obrnuto se radi isto kao i kad se prebacuju izjedne u drugu funkciju u samoj aplikaciji, klasa koja se registruje u bilo kom bpl se vidi i u svim ostalim i u glavnoj aplikaciji. Niko ne kaze da uz pomoc dll to ne moze da se uradi (bpl je i sam dll), ali za to treba vise znanja. Lakse je pocetniku da u bpl samo pozove ShowMessage kao sto je oduvek i radio, nego da prosledjuje dll handle prozora koji treba da bude parent pa da poruku kreira funkcijom MessageBox da se u task baru ne bi pojavio jos jedan prozorcic.

BTW probao sam da prosledim TBitmap objekat na nacin koji si opisao (kreirao sam objekat u dll i vratio kao pointer aplikaciji koja je zatim taj pointer castovala ponovo u TBitmap), ali kad pokusam da koristim taj objekat dobijem access violation. Moze li jedan mali primer kako bi to trebalo da se uradi jer ja vec ne znam sta radim pogresno.

Ko je trenutno na forumu
 

Ukupno su 757 korisnika na forumu :: 7 registrovanih, 3 sakrivenih i 747 gosta   ::   [ Administrator ] [ Supermoderator ] [ Moderator ] :: Detaljnije

Najviše korisnika na forumu ikad bilo je 3466 - dana 01 Jun 2021 17:07

Korisnici koji su trenutno na forumu:
Korisnici trenutno na forumu: esx66, Milos82, nick79, Srle993, vlad the impaler, wolverined4, Žoržo