[ bancika @ 02.02.2007. 14:08 ] @
Zdravo,
imam problem sa OnExit eventom kod ComboBox-a. Na formi imam jednu PageControl i combo box. Treba da uhvatim OnExit ali kad korisnik iz comboBox-a direktno pokusa do promeni stranicu na PageControl prvo se desi promena stranice pa onda OnExit. Jel moguce nekako da se preduhitri event?
Tnx
[ savkic @ 02.02.2007. 15:45 ] @
> imam problem sa OnExit eventom kod ComboBox-a. Na formi imam jednu PageControl i combo box. Treba da uhvatim OnExit ali kad
> korisnik iz comboBox-a direktno pokusa do promeni stranicu na PageControl prvo se desi promena stranice pa onda OnExit.

OnChange događaj TPageControl? Ja sam probao i prvo se poziva Combo.OnExit a potom Page.OnChange.
[ bancika @ 02.02.2007. 22:36 ] @
hmm, mozda nisam dobro objasnio.
probaj da stavis neki message box na OnExit kod combo boxa. Kad kliknes na neki page u PageControl dok combo ima fokus prikazuje se poruka ali pre toga stranica pocne da se menja. Ne prikaze se nova stranica ali tab na koji si kliknuo se oznaci. Kad zatvorise messagebox predje se na novu stranicu. Problem je sto radim neku verifikaciju sadrzaja combo boxa. Ne mogu da radim na onChange jer korisnik moze i strelicama na tastaturi da browsuje kroz combo box pa mora na onExit. Kad je korisnik izabrao pogresan podatak i pokusa da otvori drugu stranicu na PageControl prikazace mu se greska i otvorice mu se druga strana, a to ne sme tako.
Ili proba da klikne na OK dugme. Kad klikne prikazace se poruka o gresci ali cim se dialog zatvori dugme ce da primi OnClick.
Ako neko ima ideju bio bih zahvalan.
I da, bilo bi lepo da se to resi unutar samog checkbox-a bez mesanja PageControl jer slicnu situaciju imam na nekim drugim formama i bilo bi lepo da postoji neko resenje koje to radi na licu mesta bez obzira na druge komponente na formi.
Pozdravi
[ badam @ 03.02.2007. 03:36 ] @
Citat:
bancika: Ne mogu da radim na onChange jer korisnik moze i strelicama na tastaturi da browsuje kroz combo box pa mora na onExit.

Ne mora na OnExit. OnChange se trigeruje i pri promeni comboboxa sa strelicama na tastaturi.
Dakle, na OnChange postavi neku globalnu boolean promenljivu, a na PageControl.PageControlChanging, postavi var parametar AllowChange u zavisnosti od globalne promenljive.
Pozdrav
[ _deran_ @ 03.02.2007. 09:07 ] @
Citat:
...Kad je korisnik izabrao pogresan podatak ...

Stavi samo podatke koji ti odgovaraju, tj filtriraj nekako podatke u combo boxu. (ako nije neki kviz )
[ bancika @ 03.02.2007. 09:34 ] @
ne mogu da filtriram opcije jer imam vise combo box-ova i validacija proverava da nije selektovatna ista stvar vise od jednom.
badam, moze tako, ali ne bi mesao page control jer ce to da resi problem samo sa page control-om, a sta sa dugmetom koje sam pomenuo? to bi morao da radim za svaku komponentu na formi.
combo je mnogo glupo napravljen, ne mozes da dobijes event kad korisnik zavrsi odabir. idealno bi bilo da se uhvati tenutak kad komponenta gubi fokus i ako je validacija losa da se nekako prekinu sve tekuce radnje (recimo ako je korisnik kliknuo negde, OnMouseDown ce da preuzme fokus ali ce u baferu ostati onaj OnMouseUp i posle validacije ce se izvrsiti kao da je korisnik tad kliknuo).
Znam da je sugav problem :)
[ savkic @ 03.02.2007. 15:38 ] @
> combo je mnogo glupo napravljen, ne mozes da dobijes event kad korisnik zavrsi odabir. idealno bi bilo da se uhvati tenutak kad
> komponenta gubi fokus i ako je validacija losa da se nekako prekinu sve tekuce radnje (recimo ako je korisnik kliknuo negde, OnMouseDown
> ce da preuzme fokus ali ce u baferu ostati onaj OnMouseUp i posle validacije ce se izvrsiti kao da je korisnik tad kliknuo).

OnExit se i poziva kada combo gubi fokus, a on će izgubiti fokus kada ga neki drugi prozor dobije. Ako nećeš da koristiš OnChange event i želiš da se rešenje ograniči na Combo, možeš capturovati miš tako da detektuješ klik koji će promeniti fokus i po potrebi ga zabraniti, dalje treba da detektuješ promene koje mogu nastati preko tastature. Treća varijanta je da dozvoliš prmenu fokusa ali da ako nije prošla validacija combo unosa da opet vratiš unos na combo. Ovo možeš uraditi postovanjem custom poruke bilo combo boxu (koju ćeš presresti) ili main findowu i u čijem handleru ćeš postaviti fokus na combo.