Jak przejść z jednego komponentu TEdit do drugiego(bez używania Tab)
SzYbkI
Należy zmienić obsługę klawisza Enter w każdym z komponentów klasy TEdit
W tym celu należy wygenerować następującą procedurę zdarzeniową, zdarzenia OnKeyPress
:
procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char);
begin
if Key=#13 then// Po naciśnięciu Entera..
begin
Perform(wm_NextDlgCtl,0,0); //Przenieś do nastepnego Edita
Key:=#0;
end;
end;
Zamiast powyższego możemy dodać do formy obsługę OnKeyUp
:
procedure TForm1.FormKeyUp(Sender: TObject; var Key: Word;
Shift: TShiftState);
begin
if (Key=VK_RETURN) and ([ssCtrl,ssShift]*Shift=[]) then
Perform(WM_NEXTDLGCTL,0,0); //Przenieś do nastepnego Edita
end;
Dodatkowo ustawiamy właściwość formy KeyPreview na True
. Wtedy Enter działa jak klawisz Tab na całej formie a nie tylko wybranych kontrolkach.
Jeżeli chcemy, aby po wpisaniu w kontrolce, dajmy na to - 4 znaków - nastąpiło przeniesienie kursora do kolejnej kontrolki TEdit
, należy wygenerować zdarzenie OnChange
:
procedure TForm1.Edit1Change(Sender: TObject);
begin
if Length(Edit1.Text) >= 4 then //Jesli w Edicie sa 4 znaki to..
begin
Perform(wm_NextDlgCtl,0,0); //Przenieś do nastepnego Edita
end;
end;
Zobacz także:
nie lepiej:
procedure Edit1.OnKeyPress(Sender: TObject; var Key: Char);
begin
ik key=#13 then begin Edit2.SelectAll; //alboOnClick?
end;
end;
Czasami zdarza sie tak, ze nastepne pole Edit (czy tez inny obiekt) do ktorego chcemy przejsc za pomoca Taba, Entera itd. nie pojawia sie w tej kolejnosci w ktroej bysmy chcieli. Wystarczy wtedy ustawic "TabOrder" co rozwiaze ten problem.
Dryo: Perform powinno być szybsze.
Strasznie dużo kombinujesz. Nie wystarczy:
procedure TForm1.Edit1KeyUp(Sender: TObject; var Key: Word;
Shift: TShiftState);
begin
if Key = VK_RETURN then
Form1.FindNextControl(Form1.ActiveControl, True, True, True).SetFocus;
end;