Главная страница
    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
1-4399
bAgmAn
2002-11-22 18:39
2002.12.02
Файлы


7-4652
sancho
2002-09-23 22:01
2002.12.02
реестр


1-4438
V-A-V
2002-11-20 08:33
2002.12.02
поиск в TreeView


1-4350
ЮРИЙ_К
2002-11-21 17:46
2002.12.02
Изменить картинку на закладке PageControl1 по клику


14-4567
Николай Быков
2002-11-11 13:37
2002.12.02
Зачем я тут дурью маюсь уже несколько месяцев?





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский