|
[ johnnie @ 31.05.2005. 00:42 ] @
| Mozda nisam bio dovoljno jasan, ali nemam bas neku dobru ideju, malo sam se zakucao...
Elem, imam recimo oko 80 maskedita i edita na jednoj formi, imaju redosled, tab order itd. Sad je stvar sledeca: treba mi da se kroz njih krecem i sa enterom (kao da je DOS aplikacija) a ne samo sa tabom. Znam da je lako napisati za svaku posebno OnKeyPress event (npr. if key=#13 then ...) ali ima mnogo, mnogo da se pise. Zna li neko neki laksi nacin?
Ukljucio sam na formi Keypreview i to radi, tj. reaguje na enter. Samo mi treba prelazak sa TMaskedit ili TEdit-a na sledeci koji je po tab orderu (Tmaskedit ili tedit, nema pravila, bitno je znaci da sledeci preuzme fokus ) i da to bude ponasanje na toj formi, nezavisno od broja komponenti (jer neke mogu biti visible :=false, a tad nemaju ni tab order).
Mozda ja ne vidim dovoljno elegentno resenje, a bas sam u guzvi, zato pls. help!
|
[ Chawa @ 31.05.2005. 07:15 ] @
[ slavica2000 @ 31.05.2005. 07:42 ] @
Sva sam polja selektovala i poslala na jedan dogadjaj a TabOrder ga sam salje na sledeci. Ja sam kasnije imala problem kad sam htela da uvedem i strelice za gore dole ...ali to je druga prica.
procedure TForm1.MaskEdit1KeyPress(Sender: TObject; var Key: Char);
begin
If Key = #13 then
begin
Key := #0;
perform (Cm_DialogKey, VK_TAB, 0);
end;
end;
[ sasas @ 31.05.2005. 08:08 ] @
ili recimo da sa uključenim KeyPreviewm u KeyDown forme postaviš:
Code:
procedure TForm1.FormKeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
begin
if key in [VK_RETURN , VK_DOWN, VK_UP] then
self.SelectNext(self.ActiveControl, key <> VK_UP, true);
end;
Ovo radi kretanje napred sa enterom, i kretanje napred-nazad strelicama (gore-dole). Radi i za sve kontrole što može biti problem kod listboxa ili richedita, kod kojih strelice imaju funkciju, ali to se naravno da popraviti po potrebi.
ss.
[ dogriz @ 31.05.2005. 08:14 ] @
Citat: slavica2000: Sva sam polja selektovala i poslala na jedan dogadjaj a TabOrder ga sam salje na sledeci. Ja sam kasnije imala problem kad sam htela da uvedem i strelice za gore dole ...ali to je druga prica.
procedure TForm1.MaskEdit1KeyPress(Sender: TObject; var Key: Char);
begin
If Key = #13 then
begin
Key := #0;
perform (Cm_DialogKey, VK_TAB, 0);
end;
end;
Lepo rešenje, jedino mislim da je Key:=#0; višak. Sve radi i bez toga.
[ obucina @ 31.05.2005. 12:35 ] @
Ne treba koristiti Enter kao TAB. To je ostatak nekih starih vremena.
Enter, po novoj filozofiji UI, ima funkciju pritiskanja Default dugmeta.
[ sasas @ 31.05.2005. 12:49 ] @
Definitivno se slažem s tim.
ss.
[ johnnie @ 31.05.2005. 12:52 ] @
Hvala, videcu pa cu da javim...
Inace potpuno se slazem sa filozofijom za tab, ali musterija je uvek u pravu...
Hvala svima, puno...
[ obucina @ 03.06.2005. 20:58 ] @
To nije pobednicki stav :)
Musterija je u pravu samo ako je procitao/la dokumente tipa "Application Specification for Microsoft Windows 2000 for Desktop Applications", "The Microsoft Windows Keyboard Guide". ""Designed for Windows" Logo Testing", knjigu "Designing User Interface" i slicno...
[ morlic @ 03.06.2005. 22:32 ] @
A firma koja bude terala inat sa musterijama ce pisati knjigu "Empty pockets - how to" :)
[ johnnie @ 04.06.2005. 16:48 ] @
Ako musterije budu citale sve te knjige, sta cemo mi da radimo? Neka, bolje ovako, nek je musterija u pravu, za svoje pare ima pravo...Meni moze da se svidi to ili ne, ako dodje do toga da nije u pravu a nece da poslusa, nek trazi drugog ko ce da radi...Ovo je samo trivijalna zelja, zbog navika stecenih na starom softveru. Tab i dalje radi normalno, pa kad shvate TAB nece dirati ENTER, zar ne?
[ milance_kg @ 05.06.2005. 18:14 ] @
Kod mene ovo sasvim dobro funkcionise
SASAS:
Code:
procedure TForm1.FormKeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
begin
if key in [VK_RETURN , VK_DOWN, VK_UP] then
self.SelectNext(self.ActiveControl, key <> VK_UP, true);
end;
a polja koja ne zelim da fokusiram
( DBGrid npr.)
jednostavno u Object Inspector-u
podesim
TabStop := false;
[ milance_kg @ 06.06.2005. 14:06 ] @
Ako zelimo da fokusirano polje promeni boju
Code:
procedure TForm1.FormKeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
begin
if key in [VK_RETURN, VK_DOWN, VK_UP] then
self.SelectNext(self.ActiveControl, key <> VK_UP, true);
begin
if Edit1.Focused = true then
Edit1.Color := clAqua
else Edit1.Color := clWindow;
end;
end;
[ ivanho @ 17.06.2005. 18:10 ] @
Citat: slavica2000: Sva sam polja selektovala i poslala na jedan dogadjaj a TabOrder ga sam salje na sledeci. Ja sam kasnije imala problem kad sam htela da uvedem i strelice za gore dole ...ali to je druga prica.
i ja imam problem sa strelicama.... zna li neko kako je to moguce resiti...
(problem je sto strelice ne reaguje na KeyPreview)
[ obucina @ 18.06.2005. 15:00 ] @
Strelice ne sluze za to za sto bi ti i slavica2000 da ih koristite.
Inace, strelice mozes da citas u OnKeyDown i OnKeyUp.
[ ivanho @ 18.06.2005. 17:00 ] @
Citat: obucina: Strelice ne sluze za to za sto bi ti i slavica2000 da ih koristite.
Inace, strelice mozes da citas u OnKeyDown i OnKeyUp.
Strelice reaguju OnKeyDown i OnKeyUp, ali ne reaguju na keyPreview. Drugim recima ukoliko je fokus, na primer, na Tbutton komponenti (kojih na formi ima vise), i ukoliko stavim u OnKeyDown da mi donja strelica reaguje kao tab.... fokus se nece nikad postaviti na komp koja tedit komponentu, vec ce se "vrteti" kroz tbutton komponete.
Citat: Delphi help:
Navigation keys (Tab, BackTab, the arrow keys, and so on) are unaffected by KeyPreview because they do not generate keyboard events.
Druga stvar.... ko kaze cemu strelice sluze? ( i da li njemu treba verovati?)
[ obucina @ 19.06.2005. 12:41 ] @
Citat: ivanho: Druga stvar.... ko kaze cemu strelice sluze? ( i da li njemu treba verovati?)
Kaze onaj ko je napravio operativni sistem i mislim da mu treba verovati, posto je razvio filozofiju upotrebe svog sistema i napisao tomove o tome, kao i standarde kojih programeri treba da se pridrzavaju. Sve to ima na njihovoj stranici i u MSDN-u.
[ ivanho @ 19.06.2005. 13:52 ] @
Citat: obucina: Kaze onaj ko je napravio operativni sistem i mislim da mu treba verovati, posto je razvio filozofiju upotrebe svog sistema i napisao tomove o tome, kao i standarde kojih programeri treba da se pridrzavaju. Sve to ima na njihovoj stranici i u MSDN-u.
Taj koji je napravio operativni sistem mi uzima pare, musterija mi daje....
hmmmm kome da verujem i cije zahteve da ispunjavam?
uz sve to ni njihovi programeri se ne pridrzavaju tih standarda, pa sto bi ja nameto svojim musterijama iste, ukoliko ih oni ne zele
Resenje:
Code:
Application.OnMessage:=AppMessage;
procedure TForm1.AppMessage(var Msg: tagMSG; var Handled: Boolean);
var
conActCont: TWinControl;
frmActForm : TCustomForm;
KeyState : TKeyboardState;
begin
if (Msg.message=WM_KEYDOWN) and ((Msg.wParam=VK_DOWN) or (Msg.wParam=VK_UP)) then
begin
GetKeyboardState(KeyState);
if (Screen.ActiveControl <> nil) and (not (KeyboardStateToShiftState(KeyState) = [])) then
begin
conActCont:=Screen.ActiveControl
case Msg.wParam of
VK_DOWN:
Msg.wParam := VK_TAB;
VK_UP:
begin
Msg.wParam := 0;
frmActForm := GetParentForm(conActCont);
if frmActForm <> nil then
frmActForm.Perform(WM_NEXTDLGCTL, 1, 0);
Handled := true;
end;
end;
end;
end;
end;
[ milex @ 19.06.2005. 19:50 ] @
Postoji vrlo jednostvno rešenje. Instaliraj JEDI i samo postaviš komponentu JvsEnterAsTab i rešio si problem za ceo život.
Copyright (C) 2001-2025 by www.elitesecurity.org. All rights reserved.
|