Экспертная система Delphi.int.ru

Сообщество программистов
Общение, помощь, обмен опытом

Логин:
Пароль:
Регистрация | Забыли пароль?

Delphi.int.ru Expert

Другие разделы портала

Переход к вопросу:

#   

Статистика за сегодня:  


Лучшие эксперты

Подробнее »



Вопрос # 1 134

Раздел: Delphi » Прочее
/ вопрос открыт /

Здравствуйте, уважаемые эксперты!

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

Смирнов Вопрос ожидает решения (принимаются ответы, доступен мини-форум)

Вопрос задал: Смирнов (статус: Посетитель)
Вопрос отправлен: 23 ноября 2007, 17:43
Состояние вопроса: открыт, ответов: 2.

Ответ #1. Отвечает эксперт: Gooddy

Здравствуйте, Смирнов! Нужно просто отловить реакцию на нажатие Instrt и переключить в поле ввода тип записи (параметр overwrite или нечно похожее (точно не помню делфи снёс :( ) )

Ответ отправил: Gooddy (статус: 3-ий класс)
Время отправки: 23 ноября 2007, 19:33
Оценка за ответ: 2

Ответ #2. Отвечает эксперт: Dron

Здравствуйте, Смирнов!
Готового режима Insert/Overwrite у TEdit нет, однако эту возможность несложно запрограммировать самостоятельно. Воспользуемся свойством Tag поля ввода: будем хранить в нём 1, если включён режим замены и 0, если это режим вставки (т.е. обычный режим).
Далее нужно отловить нажатие клавиши Insert и переключить режим. Воспользуемся событием OnKeyDown нашего поля ввода:

procedure TForm1.Edit1KeyDown(Sender: TObject; var Key: Word;
  Shift: TShiftState);
begin
  if Key = VK_INSERT then
    with Edit1 do
      if Tag = 0 then
        Tag:=1
      else
        Tag:=0;
end;
Мы производим действия только в случае, если нажата клавиша Insert. Если был режим вставки - станет режим замены и наоборот.
Теперь остаётся только обработать ввод символов в поле - используем событие OnKeyPress:
procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char);
begin
  with Edit1 do
    if Tag = 1 then
      SelLength:=1
end;
Применён очень простой способ - чтобы заменить символ, стоящий справа от курсора, достаточно выделить этот символ - тогда печатаемый символ заменит выделение. Делается это только в случае, если активен режим замены.
Вот и всё - поле ввода с режимом замены готово.
Чтобы отображать режим замены, можно как-то визуально изменить поле ввода - например сделать его другим цветом (свойство Color).
Всё вышесказанное - программирование одного конкретного поля ввода. Если требуется поддерживать режим для множества полей, логичнее описать новый класс на основе TEdit - там уже можно и отдельное свойство завести для хранения текущего режима.
Удачи!

Ответ отправил: Dron (статус: Студент)
Время отправки: 23 ноября 2007, 21:58
Оценка за ответ: 4


Мини-форум вопроса

Мини-форум пуст.

Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.

Версия движка: 2.6+ (26.01.2011)
Текущее время: 22 февраля 2025, 11:29
Выполнено за 0.03 сек.