![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
проблема с переходом между 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();