[ Dragan_v @ 12.06.2003. 10:27 ] @
Pitanje:
ideja je bila da se posle svakog upisa u jednu tabelu pokrene prozor (formx, recimo) koji na sebi ima samo jedan progressbar i da on nesto ispremesta u bazi (interbase) te da se nakon toga taj prozor zatvori...
Resenje sam nasao tako sto uspesan upis u prvu tabelu pokrene formx.showmodal;
taj formx u svom OnPaint dogadjaju ima samo dve linije:
pokrece proceduru sredi();
i posle toga formx.close;

e sad ide kvaka...
hteo sam da taj formx bude bez captiona (borderstyle:=none)
ali tada se desava da procedura sredi() jednostavno ne krene......
ako stavim breakpoint neposredno pre pokretanja te funkcije (jos na formx.showmodal) sve prodje ok, ali u normalnom radu se formx pojavi, progressbar ostane na 0% i tu sve stane.....vratio sam caption na formx i sve radi ok....

ima li ovde logike ?
postavio sam application.processmessages na kljucna mesta u kodu = bez efekta .

napominjem da je sve moralo da se dogodi na OnPaint jer onShow ne moze da ''ugasi'' prozor na kraju...

gde gresim ?
[ silverglider @ 12.06.2003. 11:13 ] @
Cekaj, a sto mora da se poziva na OnPaint forme? Nije li to malo suvise frekventni event koji okida dzaranje po bazi? Sta fali recimo ovome:

formx.Show;
(formx.BringToFront;)
formx.Sredi();
formx.Hide;

koji stavis u event objekta baze, tipa tabela.OnNewRecord ili tabela.AfterPost. Naravno, ne mora sa show/hide, moze i sa create/close i ostalo - poenta je u tacci iz koje se taj Sredi() poziva, u ovom slucaju stvarno samo kada se izvrsi upis, a ne kada forma dobije WM_PAINT.
Ili ja nisam dobro razumeo sta tebi treba? :)
[ Rapaic Rajko @ 12.06.2003. 11:37 ] @
Ocigledno je problem u redosledu izvrsavanja. Kada je forma sa Caption-om, prvi poziv OnPaint se desi kada je default iscrtavanje vec zavrseno, tako da forma na tom mestu 'ume' da se zatvori. Bez Caption-a, OnPaint se prvi put 'okine' za mrvu prerano, to jest forma jos nije 'kompletirana', i poziv Close() samo zamrzne sve (citaj: nesto uleti u mrtvu petlju, verovatno bas message handler).

Prvo: obavezno da premestis svoj kod u OnActivate, jer se taj event desava samo jednom (obzirom na ShowModal), a OnPaint svaki put kad sistem posalje WM_PAINT poruku. (Ili da uvedes neki svoj boolean flag fDone)
Drugo: skoro sam siguran da ni to nece pomoci, zato probaj i ovo

if not(csLoading in ComponentState) then begin
sredi();
formx.close;
end;

Na ovaj nacin, tvoj kod ce biti izvrsen tek kad forma zavrsi sopstveno ucitavanje.
Poz

Rajko
[ Dragan_v @ 12.06.2003. 13:39 ] @
ma taj form ciji OnPaint sam koristio je samo tu da prikaze progres....takoreci sminka...citavu proceduru sam mogao da pozovem i bez tog forma....
svestan sam da OnPaint nije najsrecnije resenje.....