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

Вниз

Enter вместо Tab / Delphi 2007   Найти похожие ветки 

 
HandBrake   (2009-04-09 15:35) [0]

Уважаемые Коллеги!

Горю от стыда и злости:(

На форме четыре Edita.
У всех TabStop := true;
TabOrder"ы выставлены 0..4

Запускаю прогу. Жму Tab и прекрасно перемещаюсь по всем Edit в порядке их TabOrder.

Теперь хочу сделать перемещение между контролами (Edit"ами) по нажатию Enter.

TMyForm.KeyPreview := true;
и

procedure TMyForm.FormKeyPress(Sender: TObject; var Key: Char);
begin
 if Key =#13 then
 begin
   SelectNext(Sender as TWinControl,true,true);
   Key := #0;
 end;
end;

Запускаю прогу. Жму Enter и получаю следующее:

Если фокус на Edit1, то никакого перемещения ни к какому контролу не происходит.
Если фокус на любом другом Edit (TabOrder > 0), то возвращаюсь на Edit1 (TabOrder > 0).

Смотрю как работает процедура TWinControl.SelectNext: угу, виден вызов FindNextControl.
Вот этот самый FindNextControl и приводит к такому поведению.
Кто с этим сталкивался? Баг или я опять HandBreak?


 
Игорь Шевченко ©   (2009-04-09 17:07) [1]

Обрабатывай CM_DIALOGKEY у формы


 
HandBrake   (2009-04-09 18:39) [2]

2 Игорь Шевченко ©  

 Спасибо, завтра попробую. Только нет понимания, почему так [0] не получается:(
 Я кардинально неправ или Баг?


 
Игорь Шевченко ©   (2009-04-09 20:22) [3]


>  Я кардинально неправ


да. посмотри в реализацию TCustomForm.CMDialogKey


 
Игорь Шевченко ©   (2009-04-09 20:26) [4]

Где-то так получается:

unit main;

interface

uses
 Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
 Dialogs, StdCtrls;

type
 TForm1 = class(TForm)
   Edit1: TEdit;
   Edit2: TEdit;
   Edit3: TEdit;
   Edit4: TEdit;
   Button1: TButton;
 private
   procedure CmDialogKey (var Message: TCMDialogKey); message CM_DIALOGKEY;
 end;

var
 Form1: TForm1;

implementation

{$R *.dfm}

{ TForm1 }

procedure TForm1.CmDialogKey(var Message: TCMDialogKey);
begin
 if (Message.CharCode = VK_RETURN) and not (ActiveControl is TButton) then
   Message.CharCode := VK_TAB;
 inherited;
end;

end.


 
DVM ©   (2009-04-09 21:39) [5]


> HandBrake   (09.04.09 15:35)  

Иван?


 
HandBrake   (2009-04-10 10:45) [6]

2 Игорь Шевченко ©

Спасибо, предложенное Вами работает!
Однако, я в ступоре, код ниже работает:


procedure TMyForm.FormKeyPress(Sender: TObject; var Key: Char);
begin
 if Key =#13 then
 begin
//    SelectNext(Sender as TWinControl,true,true);
   FindNextControl(ActiveControl,true,true,true).SetFocus;
   Key := #0;
 end;
end;


Но ведь SelectNext и вызывает FindNextControl???????????
Прокомментируете? А то я щас (прям с утра и на работе) напьюсь!!!


 
имя   (2009-04-10 13:33) [7]

Удалено модератором


 
имя   (2009-04-10 14:41) [8]

Удалено модератором


 
имя   (2009-04-11 02:09) [9]

Удалено модератором



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

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

Наверх




Память: 0.48 MB
Время: 0.013 c
15-1261522440
Германн
2009-12-23 01:54
2010.03.07
Static IP. Чем он(о) опасен?


2-1262161972
pleasure
2009-12-30 11:32
2010.03.07
формы, права, доступ


11-1212953619
Elec3C
2008-06-08 23:33
2010.03.07
TKOLmdvXLGrid


3-1235022074
Программер
2009-02-19 08:41
2010.03.07
5 миллионов записей


15-1261494235
Piter
2009-12-22 18:03
2010.03.07
Ошибка в книге Тейксейра и Пачеко?