Советы по Delphi

Обработка нажатий клавиш `вверх-вниз`


Пришло от читателя письмо:

Почти всегда требуется обработка нажатий клавиш "вверх-вниз" для смены фокуса ввода - мои "тетки-юзеры" боются мышей, да и сам я не любитель комбинаций мышь-клавиатура.

    procedure TfmAbProps.edNameKeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState); begin
if
(Key=vk_down) and
not
(ssAlt in Shift)  // здесь обработка для "выпадающих" окошек типа
TRxDBCalcEdit


then begin Key:=0;
SelectNext(Sender as TWinControl,true,true);
end else
if
Key=vk_up then begin
Key:=0;
SelectNext(Sender as TWinControl,false,true);
end;
end;

Для элементов редактирования типа TDbEdit, TRxDBCalcEdit or TDBDateEdit назначим

    OnKeyDown:=edNameKeyDown

Сложнее с типами вроде TRxDBLookupCombo. Наш прежний обработчик для них не подходит. Я пытался изменить характер TRxDBLookupCombo - но вовремя опомнился - есть же FormKeyDown;

    procedure TfmAbProps.FormKeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState); begin
if
(ActiveControl is TRxDBLookupCombo) then begin
if
Key=vk_down then begin
if not
(ssAlt in Shift) and not  // здесь нельзя обработать нажатие при вызове "выпадающего"
(ActiveControl as TRxDBLookupCombo).IsDropDown then begin // и в случае уже "выпвшего"
Key:=0; selectnext(ActiveControl,true,true); end; end else
if
Key=vk_up then begin if not (ActiveControl as TRxDBLookupCombo).IsDropDown then begin Key:=0; selectnext(ActiveControl,false,true); end; end;
end;
end;

С уважением, Галимарзанов Фанис [000796]



Содержание раздела