![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Enter вместо Tab / Delphi 2007 [WinXP]
HandBrake © (2009-04-09 15:35:00)Уважаемые Коллеги!
Горю от стыда и злости:(
На форме четыре 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-11 02:09:00) [1]Удалено модератором
(2009-04-10 14:41:00) [2]Удалено модератором
(2009-04-10 13:33:00) [3]Удалено модератором
HandBrake (2009-04-10 10:45:00) [4]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???????????
Прокомментируете? А то я щас (прям с утра и на работе) напьюсь!!!
DVM (2009-04-09 21:39:00) [5]
> HandBrake (09.04.09 15:35)
Иван?
Игорь Шевченко (2009-04-09 20:26:00) [6]Где-то так получается:
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.
Игорь Шевченко (2009-04-09 20:22:00) [7]
> Я кардинально неправ
да. посмотри в реализацию TCustomForm.CMDialogKey
HandBrake (2009-04-09 18:39:00) [8]2 Игорь Шевченко ©
Спасибо, завтра попробую. Только нет понимания, почему так [0] не получается:(
Я кардинально неправ или Баг?
Игорь Шевченко (2009-04-09 17:07:00) [9]Обрабатывай CM_DIALOGKEY у формы