Novo

Forum kao aplikacija na telefonu

Dodajte forum na početni ekran i koristite ga kao aplikaciju, sa menijem na dnu ekrana.

  • 4 odgovora
  • 2.987 pregleda

Najnovija ↓

Komponente i free 30.11.2010. u 15:29 · pre 193 meseca #1
Imam definiran qrreport i u njemu:
....
public
qi: array of TQRImage;
end;

u formi u kojoj kreiran qrreport keriram i komponente QTRImage je proc. kao ova:

fmMain.btnTempClick(Sender: TObject);
begin
....
qr := tqr.Create(nil);
for i := 0 to Broj do begin
SetLength(qr.qi, i+1);
qr.qi := TQRImage.Create(nil);
qr.qi.Parent := qr;
....
end;

....
qr.free;
end;

Zanima me: da li se nakon qr.free oslobađa i memorija zauzeta s TQRImage greiranum u array-u qi ili moram raditi za svaku free (qr.qi.free) ?
Re: Komponente i free 30.11.2010. u 19:48 · pre 193 meseca #2
Verovatno se ne oslobađa.

Code:

qr.qi := TQRImage.Create(nil);
qr.qi.Parent := qr;


Verovatno si hteo

Code:

qi[i] := TQRImage.Create(nil);
qi[i].Parent := qr;

?

A ako staviš

Code:

qi[i] := TQRImage.Create(qr);
qi[i].Parent := qr;


Onda će qr kad pozoveš qr.Free da "pobije" sve slike jer ih vidi kao svoju "decu".
Re: Komponente i free 03.12.2010. u 09:21 · pre 193 meseca #3
Nisam shvatio razliku.

qi je definiran kao public varijabla u qr-u

Mjenjanje veličine qi se radi u drugoj formi isto kao i creiranje svakog člana.

U čemu je razlika ako varijablu dinamički kreiram u jednoj ili drugoj formi, ako ona pripada qr-u?

Sličan problem:
Code:

procedure fmMain.NekaProc
var a: TQRImage;
begin
   a := TQRImage.Create(nil);
   ....
end;


da li se nakon izlaska iz procedure oslobađa i varijabla a ?
Re: Komponente i free 03.12.2010. u 13:53 · pre 193 meseca #4
> qi je definiran kao public varijabla u qr-u

A qr je neki unit ili klasa, to je nebitno.

> U čemu je razlika ako varijablu dinamički kreiram u jednoj ili drugoj formi, ako ona pripada qr-u?

Nebitno je gde je praviš i gde je definisana, bitno je ko je njen owner, ako staviš Create(nil), nema ownera i sam vodiš računa o oslobađanju memorije. Ako staviš Create(Form1_orSomeOtherComponent) vlasnik je ta komponenta i kada se ona uništava biće uništeni i svi objekti koji joj pripadaju. To je isto kao kada stavljaš kontrole na formu, ne vodiš računa o njihovom kreiranju i oslobađanju, to radi automatski forma.

> a := TQRImage.Create(nil);
> da li se nakon izlaska iz procedure oslobađa i varijabla a ?

Ne, ako hoćeš neki reference counting mehanizam (oslobađanje objekta kada se više ne koristi), možeš koristiti interfejse ali to onda unekoliko menja način upotrebe.
Potpis
Do not be a help vampire (http://slash7.com/pages/vampires), use the google.

How to ask questions the smart way:
http://www.catb.org/~esr/faqs/smart-questions.html
http://solair.eunet.rs/~fangor...stions/smart-questions.sr.html
Re: Komponente i free 07.12.2010. u 09:07 · pre 193 meseca #5
Zahvaljujem na odgovoru, ovo mi je jasno.
Prijavite se da biste odgovorili u ovoj temi.PrijavaRegistracija

Premeštanje teme