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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 12.10.2012, 09:43   #1
brick08
Пользователь
 
Аватар для brick08
 
Регистрация: 29.11.2011
Сообщений: 12
По умолчанию Переход между Edit стрелками

что то не могу побороть.
Суть: на Panel или GroupBOX накидано много Edit в правельном порядке, т.е. друг под другом и горизонтально. Нужно при помощи стрелок перемещаться между ними.
Сделал что то типа:
Код:
procedure TForm1.Edit36KeyDown(Sender: TObject; var Key: Word;
  Shift: TShiftState);
var x,y,i,min:integer;
PrtComp: TComponent;
ed:TEdit;
begin
min:=2000;
i:=0;
x:=(Sender as TEdit).Left;
y:=(Sender as TEdit).Top;
if Key in [VK_RIGHT, VK_LEFT, VK_UP, VK_DOWN] then begin
PrtComp:=(Sender as TEdit).GetParentComponent;
if PrtComp is TGroupBox then
for i:=0 to (PrtComp as TGroupBox).ControlCount-1 do begin
if (PrtComp as TGroupBox).Controls[i] is TEdit then

case Key of

VK_RIGHT:
if (min > (((PrtComp as TGroupBox).Controls[i] as TEdit).Left-x)) and
(x < ((PrtComp as TGroupBox).Controls[i] as TEdit).Left) and
(((PrtComp as TGroupBox).Controls[i] as TEdit).Top+10 > y) and
(((PrtComp as TGroupBox).Controls[i] as TEdit).Top-10 < y) then begin
ed:=((PrtComp as TGroupBox).Controls[i] as TEdit);
min:=((PrtComp as TGroupBox).Controls[i] as TEdit).Left-x;
end;
.....
end;  //case
end;  //for
if assigned(ed) and (ed.Enabled) and (not ed.ReadOnly) then ed.SetFocus;
Но работает если только предок один, а если разные то нет..
Как можно решить данную проблему?
brick08 вне форума Ответить с цитированием
Старый 12.10.2012, 14:16   #2
atihiy2010
Пользователь
 
Аватар для atihiy2010
 
Регистрация: 22.04.2010
Сообщений: 60
По умолчанию

Как то ты слишком сложно написал. По моему проще так: пишу на словах, бо делфи рядом нету. Допустим есть 4 едита. По умолчанию при запуске фокус стоит на 1-м едите. Пишем.

If key=VK_RIGHT then Edit2.SetFocus;
If key=VK_DOWN then Edit3.SetFocus;

также для остальных, только надо еще проверку, на котором эдите сейчас стоит фокус. Если не получится - потом отпрактикую точнее уже по коду.

Это если использовать оператор If, можна и Case но я его не люблю)
atihiy2010 вне форума Ответить с цитированием
Старый 12.10.2012, 14:33   #3
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Мало того, что куча эдитов. Если под предком имеется ввиду Parent, то еще разные родители. Зачем спрашивается? StringGrid для таких целей и придуман
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Задача, угол между стрелками циферблата часов. studentAn Помощь студентам 1 21.11.2011 03:32
Переход между Input Des JavaScript, Ajax 3 22.11.2010 06:58
Переход между листами Fezdipekla Microsoft Office Excel 2 14.06.2010 20:27
Переход между компонентами stepchild Общие вопросы Delphi 5 29.05.2008 20:07
Edit. Последовательный переход... MoonLit Общие вопросы Delphi 22 13.02.2008 20:57