Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Общие вопросы > Запрет ввода символа для Memo


Автор: Delphist 15.3.2006, 16:20
В memo стоит следующая обработка на OnKeyDown:

Код


 procedure TForm1.Memo1KeyDown(Sender: TObject; var Key: Word;
   Shift: TShiftState);
 begin

   if (Shift = [ssCtrl]) and (key = VK_SPACE) then begin
      Key:=0;
      SetCaretPos(Memo1.CaretPos.X-1, Memo1.CaretPos.Y);
   end;
end; 

Т.е. если нажимается клавиша Ctrl+пробел, то курсор memo должен оставаться на месте. Но мой код что-то не работает (хотя вроде бы всё правильно). Подскажите в чём проблема.

Автор: Romikgy 15.3.2006, 16:30
Цитата(Delphist @ 15.3.2006, 15:20 Найти цитируемый пост)
SetCaretPos(Memo1.CaretPos.X-1, Memo1.CaretPos.Y);

А это разве надо?

PS ты случаем на IDE среду пишешь?

Автор: Delphist 15.3.2006, 17:00
Цитата(Romikgy @ 15.3.2006, 16:30)
А это разве надо?

PS ты случаем на IDE среду пишешь?

1. Да в принципе и не надо. Вот только Key := 0 в KeyDown'e не обнуляет клавишу, почему не знаю.
2. Нет не пишу я среду IDE.

Автор: Romikgy 15.3.2006, 17:17
Цитата(Delphist @ 15.3.2006, 16:00 Найти цитируемый пост)
Вот только Key := 0 в KeyDown'e не обнуляет клавишу, почему не знаю

Вот это странно!

Автор: Delphist 15.3.2006, 17:54
Цитата(Romikgy @ 15.3.2006, 17:17)
Цитата(Delphist @  15.3.2006,  16:00 Найти цитируемый пост)
Вот только Key := 0 в KeyDown'e не обнуляет клавишу, почему не знаю

Вот это странно!

Ну и как с этим бороться.

Автор: Sunvas 16.3.2006, 08:38
Первое: Нужно писать Key:=#0
Второе: Нужно использовать событие onkeyPress

Автор: Romikgy 16.3.2006, 09:36
Цитата(Sunvas @ 16.3.2006, 07:38 Найти цитируемый пост)
Нужно писать Key:=#0

это да
Цитата(Sunvas @ 16.3.2006, 07:38 Найти цитируемый пост)
Нужно использовать событие onkeyPress

а это необязательно

Автор: tigger 16.3.2006, 12:50
Конечный вид процедуры:

Код


procedure TForm1.Memo1KeyPress(Sender: TObject; var Key: Char);
var
Shift: TShiftState;
begin
Shift := KeyDataToShiftState(0);
if (Shift = [ssCtrl]) and (key = Char(VK_SPACE)) then Key := #0;
end;


Автор: Snowy 16.3.2006, 13:03
Char(VK_SPACE) это ' '

Автор: tigger 16.3.2006, 13:12
Цитата(Snowy @ 16.3.2006, 13:03 Найти цитируемый пост)
Char(VK_SPACE) это ' '


это точно smile

Автор: Sunvas 18.3.2006, 19:50
Цитата(Romikgy @ 16.3.2006, 09:36 Найти цитируемый пост)
Цитата(Sunvas @ 16.3.2006, 07:38 )
Нужно писать Key:=#0

это да

Цитата(Sunvas @ 16.3.2006, 07:38 )
Нужно использовать событие onkeyPress 

а это необязательно


Если делать все это в процедуре OnkeyPress, то писать Key:=#0, чтобы обнулить значение нажатой кнопки это делать обязательно.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)