Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2002.12.02;
Скачать: [xml.tar.bz2];

Вниз

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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.46 MB
Время: 0.008 c
7-4647
Ильясов Вадим
2002-10-01 17:33
2002.12.02
Как записать двоичный параметр в реестр(Integer) из Delphi


7-4651
max2057
2002-09-30 13:01
2002.12.02
TdxMasterView and Drag-n-Drop


4-4682
Дмитрий Минеев
2002-10-17 23:00
2002.12.02
Блокировка


3-4224
kserg@ukr.net
2002-11-13 16:51
2002.12.02
Как подключиться к


14-4562
Ramzes
2002-11-11 15:22
2002.12.02
Delphi и 1C





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский