Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2002.03.28;
Скачать: CL | DM;

Вниз

Смена активного поля.   Найти похожие ветки 

 
kronos ©   (2002-03-14 13:29) [0]

У меня в форме есть несколько полей типа TEdit. Подскажите, как сделать, чтобы по нажатию клавиши "Enter" курсор переходил из одного поля в другое? Заранее спасибо всем откликнувшимся.


 
Johnmen ©   (2002-03-14 13:34) [1]

Обрабатывай нажатие OnKeyDown .


 
mrcat ©   (2002-03-14 13:37) [2]

Для каждого события ONKEYUP можно написать код: if Key = 0013 then //здесь делаешь активным один из edit"ов
ActiveControl := Имя_следующего_едита


 
kronos ©   (2002-03-14 13:38) [3]

Уточняю вопрос: как заставить курсор перейти в нужное мне поле (программно)?


 
Johnmen ©   (2002-03-14 13:50) [4]

SetFocus


 
Song ©   (2002-03-14 13:51) [5]

Вот смотри, самый изящный пример, фокус скачет по edit"ам последовательно:

procedure TForm1.Edit1KeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
Var C:TWinControl;
begin
C:=FindNextControl(TEdit(Sender),True,True,True);
IF C is TEdit then C.SetFocus;
end;


Не забудь поставить эту процедуру для всех TEdit в качестве onKeyDown


А по поводу твоего уточнения, дык это просто:

Edit1.SetFocus;
Edit2.SetFocus;

...
Edit n.SetFocus;


 
kronos ©   (2002-03-14 14:21) [6]

При переходе в следующий Едит предыдущий очищается. Почему?


 
Song ©   (2002-03-14 14:25) [7]

А как ты переходишь? Приведи процедуру обработки нажатия.


 
Alx2 ©   (2002-03-14 14:30) [8]

Вот пример, когда на стрелку вниз переходим на следующий control, а на стрелку вверх - на предыдущий.


Procedure TMainForm.Edit1KeyDown(Sender: TObject; Var KEY: Word;
Shift: TShiftState);
Begin
Case KEY Of
VK_DOWN:
CreateDate.SetFocus Else
If GetKeyState(VK_CONTROL) >= 0 Then
SelectNext(ActiveControl, True, True);
VK_UP:
If GetKeyState(VK_CONTROL) >= 0 Then
SelectNext(ActiveControl, False, True);
End;
End;



 
Alx2 ©   (2002-03-14 14:31) [9]

Сорри, не все вычистил. Вот так надо:

Procedure TMainForm.Edit1KeyDown(Sender: TObject; Var KEY: Word;
Shift: TShiftState);
Begin
Case KEY Of
VK_DOWN:
If GetKeyState(VK_CONTROL) >= 0 Then
SelectNext(ActiveControl, True, True);
VK_UP:
If GetKeyState(VK_CONTROL) >= 0 Then
SelectNext(ActiveControl, False, True);
End;
End;



 
kronos ©   (2002-03-14 14:54) [10]

to Song
>Для каждого события ONKEYUP можно написать код: if Key = 0013 >then //здесь делаешь активным один из edit"ов
>ActiveControl := Имя_следующего_едита
вот так и перехожу



 
kronos ©   (2002-03-14 14:57) [11]

Ой, глюк получился.

to Song
>Для каждого события ONKEYUP можно написать код: if Key = 0013
>then //здесь делаешь активным один из edit"ов
>ActiveControl := Имя_следующего_едита

вот так и перехожу


 
Song ©   (2002-03-14 15:04) [12]

Возможно у тебя очистка стоит на onEnter...


 
kronos ©   (2002-03-14 15:52) [13]

У меня глюк такой только в одном поле и на onEnter у меня ничего нет


 
kronos ©   (2002-03-14 15:54) [14]

также глючит и при Edit1.SetFocus


 
Malder ©   (2002-03-14 15:58) [15]

ничего глючить не должно... что-то у тебя написано видно...
посмотри обработчики событий на edit"е


 
Johnmen ©   (2002-03-14 15:59) [16]

1. Для начала переходи по OnKeyDown
2. >>>также глючит и при Edit1.SetFocus<<< а в чем же глюк ?


 
kronos ©   (2002-03-14 16:07) [17]

А, кстати, чем отличается ActiveControl от SetFocus?


 
kronos ©   (2002-03-14 16:28) [18]

Пропадает введенная инфо из поля


 
Johnmen ©   (2002-03-14 16:36) [19]

После чего пропадает то ?


 
kronos ©   (2002-03-14 16:48) [20]

procedure TForm4.Edit1KeyUp(Sender: TObject; var Key: Word;
Shift: TShiftState);
begin
if key=0013 then Edit2.SetFocus;
end;

procedure TForm4.Edit1Change(Sender: TObject);
begin
form4.Edit2.Enabled:=true;
end;

Больше у меня на Едите ничего не висит


 
kronos ©   (2002-03-14 16:51) [21]

после нажатия Ентер для перехода в следующее поле


 
Johnmen ©   (2002-03-14 16:55) [22]

Как же трудно с тобой общаться !
Ты даже не хочешь перечитать, что тебе отвечали...
И зачем это form4.Edit2.Enabled:=true; ?



 
kronos ©   (2002-03-14 17:59) [23]

>И зачем это form4.Edit2.Enabled:=true; ?
А поле Edit2 должно быть недоступно,пока не заполнится Edit1


 
Johnmen ©   (2002-03-14 18:04) [24]

Ну так обрабатывай OnEnter на Edit2 и если поле 1 не заполнено, то SetFocus на него !


 
kronos ©   (2002-03-14 18:53) [25]

Какой павлин, какой мавлин ...

Я ввожу в поле Edit1 данные, нажимаю Ентер, данные из поля Edit1 пропадают, курсор перемещается в поле Edit2.

И еще. Может ли чистится поле из-за какой-то установки в Properties (не прятаться)?

В поле Edit1 у меня осталось

procedure TForm4.Edit1KeyUp(Sender: TObject; var Key: Word;
Shift: TShiftState);
begin
if key=0013 then Edit2.SetFocus;
end;

В поле Edit2

procedure TForm4.Edit2Change(Sender: TObject);
begin
form4.Button1.Enabled:=true;
end;

procedure TForm4.Edit2KeyUp(Sender: TObject; var Key: Word;
Shift: TShiftState);
begin
if key=0013 then Button1.SetFocus;
end;


 
Andreyka   (2002-03-14 22:09) [26]

Ставишь у формы KeyPreview = true и создаешь событие KeyPress следующего вида:


procedure TForm1.FormKeyPress(Sender: TObject; var Key: Char);
begin
if (Key = #13) then begin
Key:=#0;
Perform(WM_NEXTDLGCTL,0,0);
end;
end;


 
kronos ©   (2002-03-15 00:09) [27]

Попробую это уже завтра - все на работе.


 
kronos ©   (2002-03-15 13:00) [28]

>Perform(WM_NEXTDLGCTL,0,0)

что значит эта строка?



Страницы: 1 вся ветка

Текущий архив: 2002.03.28;
Скачать: CL | DM;

Наверх




Память: 0.53 MB
Время: 0.01 c
6-91028
SemFLY
2002-01-10 04:08
2002.03.28
Компоненты Indy -> TIdTCPServer и TIdTCPClient


1-90999
fag2000@ok.ru
2002-03-15 13:12
2002.03.28
Как узнать HANDLE окна OLE объекта


1-90947
voland0
2002-03-14 16:21
2002.03.28
Рег. N и ключ для Delphi 5 Enterp Update Pack 1


7-91096
Flakon
2001-10-29 13:55
2002.03.28
Com-port


1-90945
Yulik
2002-03-14 13:05
2002.03.28
Excel