Советы по Delphi


Изменение поведения 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]



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