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

promjena fokusa kontrole

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

[ Pregleda: 4805 | 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 - pre 232 meseci
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....
 
Odgovor na temu

X Files
Vladimir Stefanovic
Pozarevac

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

Jabber: xfiles@elitesecurity.org


+638 Profil

icon Re: promjena fokusa kontrole18.03.2005. u 14:44 - pre 232 meseci
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().



 
Odgovor na temu

MilošV
Podgorica

Član broj: 7996
Poruke: 484
195.66.163.*



+1 Profil

icon Re: promjena fokusa kontrole18.03.2005. u 18:06 - pre 232 meseci
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));
}
 
Odgovor na temu

X Files
Vladimir Stefanovic
Pozarevac

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

Jabber: xfiles@elitesecurity.org


+638 Profil

icon Re: promjena fokusa kontrole18.03.2005. u 18:29 - pre 232 meseci
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.
 
Odgovor na temu

MilošV
Podgorica

Član broj: 7996
Poruke: 484
195.66.163.*



+1 Profil

icon Re: promjena fokusa kontrole18.03.2005. u 18:55 - pre 232 meseci
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? :)
 
Odgovor na temu

MilošV
Podgorica

Član broj: 7996
Poruke: 484
195.66.163.*



+1 Profil

icon Re: promjena fokusa kontrole18.03.2005. u 19:06 - pre 232 meseci
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 :)
 
Odgovor na temu

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

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

Postavi temu Odgovori

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