Dragan_v Dragan Vasic \Telekom\It\ batocina
Član broj: 9084 Poruke: 131 *.telekom.yu
Jabber: Vaske@elitesecurity.org ICQ: 48390397 Sajt: www.bestcentar.com
|
OnPaint | 12.06.2003. u 10:27 - pre 265 meseci |
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
Član broj: 651 Poruke: 218 *.batalpha.de
Sajt: www.benchmark.co.yu
|
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 Bgd
Član broj: 4105 Poruke: 810 80.93.225.*
|
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 Dragan Vasic \Telekom\It\ batocina
Član broj: 9084 Poruke: 131 *.telekom.yu
Jabber: Vaske@elitesecurity.org ICQ: 48390397 Sajt: www.bestcentar.com
|
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.....
|
|
| |
|