Форум: "Основная";
Текущий архив: 2010.03.07;
Скачать: [xml.tar.bz2];
Вниз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;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.008 c