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

Вниз

Enter как Tab   Найти похожие ветки 

 
Jack Frost   (2002-11-15 14:47) [0]

Добрый день!

Мне нужно реализовать сабжевый механизм перемещения фокуса по контролам.
Я нашел один, но он реализован для контролов, родителем которых является
форма. Там используется метод FindNextControl. Если контрол расположен на
каком-то другом контейнере, то обработчик его обходит.

Помогите, пожалуйста!

Заранее спасибо!


 
Skier ©   (2002-11-15 14:48) [1]

>Jack Frost
А TForm.KeyPreview := True не поможет ?


 
stone ©   (2002-11-15 14:56) [2]

OnKeyPress

if key = #13 then key := #9;


 
Calm ©   (2002-11-15 15:05) [3]

Способ верный, но мутный.
Итак...
1. Создаем некий список, в котором регистрируем все контролы, фокум между которыми должен перемещаться по Enter, а не по Tab.
Причем контролы в списке регистриуются (ну заносятся просто) в том порядке, в каком должен перемещаться фокус. Это делается в OnShow формы.
2. Всем контролам присваивается новый обработчик события OnKeyPress, в котором снала проверяется нажатие на Enter, а затем если нажат не Enter, то выполнять то событие, которое было подвязано в design-time, если таковое было.

На первый взгляд, заморочено, но на самом деле способ достаточно неплохой.


 
Calm ©   (2002-11-15 15:07) [4]


> Способ верный, но мутный.

Это я о своем способе, а не о предложенном stone.
Когда писал его сообщения не видел.


> if key = #13 then key := #9;

Это же нужно для каждого компонента так прописывать, неудобно :(
Хотя в общем нормальный способ.


 
Игорь Шевченко ©   (2002-11-15 15:09) [5]

Способы:
1) положить на форму компонент TAction с ShortCut = Enter и в ActionExecute вызывать SelectNext.
2) Переписать у формы метод обработки сообщения CM_DIALOGKEY.
3) Поставить Hook WH_GETMESSAGE и для нужных адресатов перекодировать сообщения WM_KEYDOWN и WM_KEYUP (наиболее универсальный способ)

С уважением,


 
Manic Mechanic ©   (2002-11-15 15:11) [6]

По-моему так, причем работают и стрелки, а Esc закрывает форму

procedure TForm1.FormKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState);
var CtlDir: word;
begin
if(Key in [VK_UP, VK_DOWN, VK_RETURN])then begin
if Key=VK_UP then CtlDir := 1 else CtlDir := 0;
SendMessage(Handle, WM_NEXTDLGCTL, CtlDir, 0);
Key := 0;
end else if(Key=VK_ESCAPE)then begin
Key := 0;
Close;
end;
end;
//---------------------------------------------------------------


 
Vlad1 ©   (2002-11-22 21:58) [7]

1. Form1.KeyPreview:=True;
2. procedure Tform1.FormKeyPress(Sender:TObject;var Key:Char);
if Key=#13 then
begin
Key:=#0;
Perform(CM_DilogKey,VK_TAB,0);
end;
end;


 
Vlad1 ©   (2002-11-22 21:59) [8]

Sorry,
1.Form1.KeyPreview:=True;
2.procedure Tform1.FormKeyPress(Sender:TObject;var Key:Char);
if Key=#13 then
begin
Key:=#0;
Perform(CM_DialogKey,VK_TAB,0);
end;
end;




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

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

Наверх




Память: 0.48 MB
Время: 0.017 c
8-4519
Карлсон
2002-08-10 01:45
2002.12.02
AVI и кодеки.


8-4509
Cr@sh
2002-08-07 13:58
2002.12.02
Подскажите как расчитать cursor position относительно угла TImage


1-4420
AndrewVolkov
2002-11-22 22:40
2002.12.02
А как нарисовать в rxDBGrid TitleButton?


3-4202
Tesych
2002-11-13 15:38
2002.12.02
Подключение Д-6 к MSSQL


3-4264
PKT
2002-11-15 05:53
2002.12.02
AND и OR при параметрич.запросе