Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 23.01.2010, 11:05   #1
SoftKoc
Форумчанин
 
Аватар для SoftKoc
 
Регистрация: 07.11.2009
Сообщений: 218
Восклицание Одна процедура для всех Edit(ов)

!Здравствуйте!
Код:
procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char);
begin
if key = #13 Then
 Begin
  Edit2.SetFocus;
 End;
end;

procedure TForm1.Edit2KeyPress(Sender: TObject; var Key: Char);
begin
if key = #13 Then
 Begin
  Edit3.SetFocus;
 End;
end;

procedure TForm1.Edit3KeyPress(Sender: TObject; var Key: Char);
begin
if key = #13 Then
 Begin
  Edit4.SetFocus;
 End;
end;

procedure TForm1.Edit4KeyPress(Sender: TObject; var Key: Char);
begin
if key = #13 Then
 Begin
  Edit5.SetFocus;
 End;
end;
Подскажите пожалуйста, как это все сделать одной процедурой
Заранее очень благодарен
Я бы изменил мир, но Бог не дает исходников...
Если помог, нажми на весы и поставь плюс - в знак благодарности
SoftKoc вне форума Ответить с цитированием
Старый 23.01.2010, 11:17   #2
TwiX
Участник клуба
 
Аватар для TwiX
 
Регистрация: 28.07.2009
Сообщений: 1,510
По умолчанию

Все едиты пихаем массив, i-му элементу ставим i-ый tag и всем даём, например, такую процедуру
Код:
procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char);
begin
  if key=#13 then
  begin
    if TEdit(Sender).Tag<>10 then
      edts[TEdit(Sender).Tag+1].SetFocus;
  end;
end;
Вот и небольшой примерчик)
Вложения
Тип файла: zip asd.zip (4.8 Кб, 16 просмотров)

Последний раз редактировалось TwiX; 23.01.2010 в 11:19.
TwiX вне форума Ответить с цитированием
Старый 23.01.2010, 11:33   #3
Alex Cones
Trust no one.
Старожил
 
Аватар для Alex Cones
 
Регистрация: 07.04.2009
Сообщений: 6,526
По умолчанию

Цитата:
Sender: TObject;
Обратите внимание на это. Sender - тот, кто исполняет процедуру.
Есть еще FindComponent
SQUARY PROJECT - НАБОР БЕСПЛАТНЫХ ПРОГРАММ ДЛЯ РАБОЧЕГО СТОЛА.
МОЙ БЛОГ
GRAY FUR FRAMEWORK - УДОБНАЯ И БЫСТРАЯ РАЗРАБОТКА WINAPI ПРИЛОЖЕНИЙ
Alex Cones вне форума Ответить с цитированием
Старый 23.01.2010, 11:38   #4
SoftKoc
Форумчанин
 
Аватар для SoftKoc
 
Регистрация: 07.11.2009
Сообщений: 218
Восклицание

Цитата:
Сообщение от Alex Cones Посмотреть сообщение
Обратите внимание на это. Sender - тот, кто исполняет процедуру.
На это я и обращал свое внимание!
Просто не хочется забивать проект мелкими процедурами
Может можно написать процедуру которая будет при нажатии на
Enter проверят на каком Edit(е) фокус и делать инкремент
для того чтобы передать фокус следующему.
Я бы изменил мир, но Бог не дает исходников...
Если помог, нажми на весы и поставь плюс - в знак благодарности
SoftKoc вне форума Ответить с цитированием
Старый 23.01.2010, 11:41   #5
Alex Cones
Trust no one.
Старожил
 
Аватар для Alex Cones
 
Регистрация: 07.04.2009
Сообщений: 6,526
По умолчанию

Вот пример для шейпов:
Код:
procedure TForm1.ShapeContextPopup(Sender: TObject; MousePos: TPoint;
  var Handled: Boolean);
begin
  TShape(Sender).Brush.Color:=clred;
end;
В Вашем случае берете имя эдита, затем переводите в строку, хапаете последний символ, переводите в цифру, инкрементируете, делаете FindComponent по новому критерию и делаете с ним действия.
SQUARY PROJECT - НАБОР БЕСПЛАТНЫХ ПРОГРАММ ДЛЯ РАБОЧЕГО СТОЛА.
МОЙ БЛОГ
GRAY FUR FRAMEWORK - УДОБНАЯ И БЫСТРАЯ РАЗРАБОТКА WINAPI ПРИЛОЖЕНИЙ
Alex Cones вне форума Ответить с цитированием
Старый 23.01.2010, 11:50   #6
SoftKoc
Форумчанин
 
Аватар для SoftKoc
 
Регистрация: 07.11.2009
Сообщений: 218
По умолчанию

Цитата:
Сообщение от Alex Cones Посмотреть сообщение
Вот пример для шейпов:
Код:
procedure TForm1.ShapeContextPopup(Sender: TObject; MousePos: TPoint;
  var Handled: Boolean);
begin
  TShape(Sender).Brush.Color:=clred;
end;
В Вашем случае берете имя эдита, затем переводите в строку, хапаете последний символ, переводите в цифру, инкрементируете, делаете FindComponent по новому критерию и делаете с ним действия.
Но эту процедуру придется вызывать для каждого Edit(а) отдельно по KeyPress! И та же проблема, много мелких процедур!
Я бы изменил мир, но Бог не дает исходников...
Если помог, нажми на весы и поставь плюс - в знак благодарности
SoftKoc вне форума Ответить с цитированием
Старый 23.01.2010, 13:10   #7
TwiX
Участник клуба
 
Аватар для TwiX
 
Регистрация: 28.07.2009
Сообщений: 1,510
По умолчанию

Чем не устраивает мой пример?
Не нравиться массив?
Можно и без массива - каждому едиту присваиваем таги по возрастанию, всем присваиваем одну процедуру по нажатию. В которой вытаскиваем tag посылающего едита и, парся компоненты формы на едиты и, параллельно, проверяя таг текущего компонента, находим нужный едит и посылаем на него фокус. Но мне кажется с массиваами болле рационльно
TwiX вне форума Ответить с цитированием
Старый 23.01.2010, 13:44   #8
maxionans
Форумчанин
 
Аватар для maxionans
 
Регистрация: 02.01.2010
Сообщений: 254
По умолчанию

Все гораздо проще. Используешь такой код для всех Edit-ов:

Код:
procedure TForm7.Edit1KeyPress(Sender: TObject; var Key: Char);
begin
  if Key = #13 then
    Self.SelectNext( Sender as TWinControl, True, False );
end;
И устанавливаешь подходящий TabOrder для каждого Edit-а. Теперь, по нажатию Enter фокус будет перемещаться между компонентами.
maxionans вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
процедура на VBA для анализа Tan'ka Microsoft Office Access 10 23.12.2009 11:33
Одна запятая в поле Edit KoBRaAndrey Общие вопросы Delphi 8 18.10.2009 12:09
Одна функция для нескольких объектов Salomon Помощь студентам 2 25.11.2008 16:32
PopupMenu для формы свое, а для Edit - стандартное Виндоус yaver Общие вопросы Delphi 4 10.11.2008 15:03
Одна "шапка" на всех листах Noor Microsoft Office Excel 2 30.07.2007 15:39