Изменение поведения Delete в компоненте Memo
Просто меняю обработчик Memo OnKeyDown следующим образом:
if Key = VK_DELETE then
begin
здесь делайте все, что вы хотите
end;
if Key = VK_BACK then
begin
аналогично
end; |
Вероятно, лучшим решением было бы использование конструкции CASE, но я не уверен, что она поймет как нужно VK_??. Возможно, после обработки нужно вызвать унаследованный обработчик, т.е. дать поработать обработчику верхнего уровня, у которого мы стырили управление. Не хотите подумать над этим?
Чтобы понять, где мы сейчас находимся, используйте SelStart, например, так:
var Lpos, Cpos : Integer; Lpos := SendMessage(memo1.Handle,EM_LINEFROMCHAR,Memo1.SelStart,0); Cpos := SendMessage(memo1.Handle,EM_LINEINDEX,Lpos,0); CPos := Memo1.SelStart-CPos; |
Ответ: поскольку VK_? имеет целочисленный тип, то это будет работать:
case Key of VK_DELETE : begin Key := 0; {этим мы не позволяем сообщению keydown передаваться дальше, например, форме или компонентам} выполняем нужный код; end; VK_BACK: begin Key := 0; {этим мы не позволяем сообщению keydown передаваться дальше, например, форме или компонентам} выполняем нужный код; end; end; |
[001468]