Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

promjena fokusa kontrole

[es] :: C/C++ programiranje :: promjena fokusa kontrole

[ Pregleda: 2408 | Odgovora: 5 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

mladenvasic
Mladen Vasic
Doboj

Član broj: 50512
Poruke: 124
81.93.74.*



Profil

icon promjena fokusa kontrole18.03.2005. u 09:03

imam 3 editbox-a i jedno dugme. kako na pritisak dugmeta da se kursor fokusira ne sledeci editbox. npr. ako je fokusiran prvi editbox, na pritisak dugmeta da fokusira drugi, pa opet na pritisak dugmeta da fokusira treci i tako u krug. nadam se da ste razumjeli. ako moze malo detaljniji kod.
hvala unapred....
18.03.2005. u 09:03 

X Files
Vladimir Stefanovic
Pozarevac

SuperModerator
Član broj: 15100
Poruke: 4356
*.nat-pool.po.sbb.co.yu.

Jabber: xfiles@elitesecurity.org
Sajt: www.antivari.com


Profil

icon Re: promjena fokusa kontrole18.03.2005. u 14:44
Imas vise nacina na raspolaganju, na primer za C++ Builder
moze da koristis nesto kao:

Code:

// !!! NETESTIRANO !!!

TEdit *Edits[3];

__fastcall TForm1::TForm1(TComponent* Owner)
        : TForm(Owner)
{
   Edits[0] = Edit1;
   Edits[1] = Edit2;
   Edits[2] = Edit3;
}

void __fastcall TForm1::Button1Click(TObject *Sender)
{
   static int i=0;
   Edits[ (++i) % 3 ]->SetFocus();
}



Takodje, prouci WM_NEXTDLGCTL, i u skladu sa time:

Code:

// "Call Perform to bypass the Windows message queue
// and send a message directly to the control’s window
// procedure."
Perform (WM_NEXTDLGCTL, 0, 0);


E sad, posto klik na Button1, automatski fokusira Button1,
morao bi da pratis sta je zadnje bilo fokusurano od Edit
polja, pa da vratis njemu fokus, pa onda Perform, itd...

Takodje za fokusiranje umesto metode ->SetFocus(), mozes
da koristis funkciju FocusControl().




FREEWARE
Di rečnik, v1.0.058 (srp-eng/eng-srp priručni rečnik)
http://www.antivari.com
18.03.2005. u 14:44 

MilošV
Podgorica

Član broj: 7996
Poruke: 485
195.66.163.*



Profil

icon Re: promjena fokusa kontrole18.03.2005. u 18:06
Laptopovi

Ima jos elegantnije rjesenje (govorim o c++ builderu): funkcija "FindNextControl" koja nalazi sljedecu kontrolu po TabOrderu na formi. Uz "ActiveControl" property, mozes da napravis ovakvu kombinaciju (slicnu ja koristim na formama za sa dosta polja za unos da bi taster "Enter" imao isti efekat kao "Tab"):
Code:

..bla bla... Button1Click(TObject *Sender)
{
FocusControl(FindNextControl(ActiveControl, true, true, false));
}
18.03.2005. u 18:06 

X Files
Vladimir Stefanovic
Pozarevac

SuperModerator
Član broj: 15100
Poruke: 4356
*.nat-pool.po.sbb.co.yu.

Jabber: xfiles@elitesecurity.org
Sajt: www.antivari.com


Profil

icon Re: promjena fokusa kontrole18.03.2005. u 18:29
Da, ali...
Code:

..bla bla... Button1Click(TObject *Sender)
{
   FocusControl(FindNextControl(ActiveControl, true, true, false));
}

...kada pritisnes 'Button' ti si automatski fokusirao taj 'Button'
i poremetio TabOrder, tj. kod ce ti fokusirati onu kontrolu koja
dolazi posle 'Button', a to znaci uvek jednu te istu.

Koliko vidim tvoj kod je identican sa:
Code:

Perform (WM_NEXTDLGCTL, 0, 0);


Sve u svemu, mislim da ovi gore navedeni primeri imaju smisla samo
ako se dogadjaj izvrsava u samoj Edit kontroli, tj. kao sto si rekao
za OnKeyPress() ili OnKeyDown() za ispitivanje TAB/ENTER ponasanja
i sl.

FREEWARE
Di rečnik, v1.0.058 (srp-eng/eng-srp priručni rečnik)
http://www.antivari.com
18.03.2005. u 18:29 

MilošV
Podgorica

Član broj: 7996
Poruke: 485
195.66.163.*



Profil

icon Re: promjena fokusa kontrole18.03.2005. u 18:55
Da, u pravu si :)
Mozda bi rjesenje bilo da se za Button1 stavi TabStop=false?

Ipak ne, to bi vracalo na Edit1... Da ga zakomplikujemo sad, hehehe, da svaki TEdit ima OnEnter event? Ili da zaboravimo da sam ista rekao i ikad pomenuo FindNextControl? :)
18.03.2005. u 18:55 

MilošV
Podgorica

Član broj: 7996
Poruke: 485
195.66.163.*



Profil

icon Re: promjena fokusa kontrole18.03.2005. u 19:06
Citat:
X Files:
Code:

// "Call Perform to bypass the Windows message queue
// and send a message directly to the control’s window
// procedure."
Perform (WM_NEXTDLGCTL, 0, 0);


E sad, posto klik na Button1, automatski fokusira Button1,
morao bi da pratis sta je zadnje bilo fokusurano od Edit
polja, pa da vratis njemu fokus, pa onda Perform, itd...

Ufff... Izvini, Mr X, tek sad sam detaljno procitao tvoju prvu poruku. Vec si sve rekao... Hrkljus, hrkljus... do mene :)
18.03.2005. u 19:06 

[es] :: C/C++ programiranje :: promjena fokusa kontrole

[ Pregleda: 2408 | Odgovora: 5 ] > FB > Twit

Postavi temu Odgovori

Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.