Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

проблема с переходом между DBEdit.... [D5, Win95/98]


BillyJeans ©   (2002-04-19 14:38:00) 

подскажите, как сделать, чтобы по клавише Enter фокус передавался в следующий DBEdit.
DBEdit"ы расположены на DBCtrlGrid...


BillyJeans   (2002-04-23 12:15:00) [1]

Благодарю за внимание!!

Родилось у меня следующее:

procedure TForm1.DBCtrlGrid1KeyDown(Sender: TObject; var Key: Word; Shift: TShiftState);
begin
if (sender as tControl).Name <> "DBCtrlGrid1" then
Case key of
VK_RETURN : key := VK_TAB;
VK_UP : DBCtrlGrid1.DoKey(gkUp);
VK_DOWN : DBCtrlGrid1.DoKey(gkDown);
end;
end;


gek   (2002-04-23 10:59:00) [2]

Не надо ерунды говорить
приведенный мной код нормально работает только сей проверил

procedure TForm1.DBCtrlGrid_exKeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
begin
if key = VK_RETURN then key:=VK_TAB
end;

Только еще свяжи DBEdit1_exKeyDown с этим событием
Ну и конечно KeyPreview=true


BillyJeans   (2002-04-23 10:52:00) [3]

Вся проблема в том, что OnKeyPress у DBEdit ни когда не вернет Key = #13 или VK_RETURN! Нажатие на Enter у него обрабатывается как-то по своему!


ValVas   (2002-04-23 10:48:00) [4]

Можно выставить у формы KeyPreview=True и в ее обработчике искать все компоненты типа TDBEdit c TabOrder > текущего.
А вообще всех перечисленных способов обычно вполне достаточно, но загвоздка похоже в том, что используются DB контролы. Я могу предположить, что у каких-то полей набора данных уже реализованы обработчики, например, OnExit...
Проверь все.


gek   (2002-04-23 10:46:00) [5]

if key = VK_RETURN then
key:=VK_TAB


BillyJeans   (2002-04-23 10:38:00) [6]

Процедура Perform передает фокус от DBEdit1 к DBCtrlGrid и обратно :(


BillyJeans   (2002-04-23 10:30:00) [7]

а что за процедура такая CMChildKey? Что-то я не нашел такую...


Reals   (2002-04-23 10:25:00) [8]

Здравствуйте!

Вот еще одна идея, у меня работает:
В событие onKeyPress для всех Едитов написать следующее

if Key=#13 then Perform(WM_NEXTDLGCTL,0,0);

Но при этом нужно чтобы на формах стояли Properties - KeyPreview=False.

С Уважением!


Игорь Шевченко   (2002-04-23 10:07:00) [9]

День добрый,

Вы поглядите
procedure TDBCtrlGrid.CMChildKey(var Message: TCMChildKey);
Там обрабатывается VK_TAB

По образу и подобию...

С уважением,


BillyJeans   (2002-04-23 10:01:00) [10]

... ну и чего? фокус стоит как вкопаный на DBEdit1!!!
Повторяю, у меня DBEdit"ы расположены на DBCtrlGridа не на DBGrid

Помогите pls...


gek   (2002-04-23 09:01:00) [11]

Ничего там особенно не обрабатывается

procedure TForm_people.RxDBGrid_countryKeyDown(Sender: TObject;
var Key: Word; Shift: TShiftState);
begin
if key = VK_RETURN then SelectNext(Sender as TWinControl,true,true);
end;

И все работает


BillyJeans   (2002-04-23 08:44:00) [12]

... еще идеи будут?


Игорь Шевченко   (2002-04-22 17:22:00) [13]

Вдогонку:

Похоже, я притормозил насчет dgTabs :-(

Обработка события KeyDown на DBGrid не помогает ? Там ENTER несколько иначе отрабатывается...

С уважением,


Игорь Шевченко   (2002-04-22 17:17:00) [14]

День добрый,

А убрать у DBGrid из Options dgTabs не пробовали ?

С уважением,


BillyJeans   (2002-04-22 17:04:00) [15]

с TabOrder"ами все впорядке! Перепробовал оба примера и ничего!
После нажатия на Enter фокус передается DBCtrlGrid и все тут!!!

Подскажите еще что-нибудь...


Дмитрий Д.   (2002-04-19 14:59:00) [16]

в свойство онкейпрес:

if Key = #13 then
begin
SelectNext(Sender as TWinControl, True, True);
Key := #0;
end;


SB.John   (2002-04-19 14:58:00) [17]

Надо эти Edit"ы раположить по возрастанию TabOrder"ов . Точнее TabOrder"ы им поменять так, чтобы они шли по возрастанию. Ну и пишешь общий для всех Edit"ов обработчик OnKeyDown:

if Key = VK_RETURN then
FindNextControl(ActiveControl,True,True,True).SetFocus();


Наверх

Титульная страница Поиск, карта сайта Написать письмо