Оригинальный DVD-ROM: eXeL@B DVD !
eXeL@B ВИДЕОКУРС !

Курс видеоуроков КРЭКЕРСТВО + ПРОГРАММИРОВАНИЕ 2017
(актуальность: май 2017)
Свежие инструменты, новые видеоуроки!

  • 400+ видеоуроков
  • 800 инструментов
  • 100+ свежих книг и статей

УЗНАТЬ БОЛЬШЕ >>
Домой | Статьи | RAR-cтатьи | FAQ | Форум | Скачать | Видеокурс
Новичку | Ссылки | Программирование | Интервью | Архив | Связь

БОЛЬШОЙ FAQ ПО DELPHI



Insert и Override с помощью DBEdit

Автор: Denis Sarrazin

Попал програмист в ад. Прошло несколько дней. Дьявол звонит Богу:
- Забери от меня, Христа ради, этого идиота. Он мне всех чертей вилами переколол, а теперь бегает ищет выход на второй уровень.

Сама Windows не позволяет это сделать, но я нашел как это обойти с помощью одной хитрости, и, похоже, это классно работает (надеюсь вы получите даже больше, чем вы хотите :).

Сначала я добавляю к моей форме свойство (и соответствующие переменные и процедуры), наподобие этому:


 private
 FinsertMode: boolean;
 procedure SetInsertMode(value: boolean);
 public
 property insertMode: boolean read FinsertMode write SetInsertMode;
 

В обработчике создания события формы я инициализирую его:


 procedure TForm1.FormCreate(Sender: TObject);
 begin
 {инициализация}
 insertMode := True;
 end;
 

Также для этого свойства я создаю процедуру SetInsertMode, которая с помощью TPanel с именем Panel1 извещает пользователя о текущем режиме работы:


 procedure TForm1.SetInsertMode(value: boolean);
 begin
 FinsertMode := value;
 if FinsertMode then
 Panel1.Caption := 'ВСТАВКА'
 else
 Panel1.Caption := 'ПЕРЕЗАПИСЬ';
 end;
 

Затем я добавляю три обработчика событий (OnKeyDown, OnKeyPress, OnEnter) для каждого моего DBEdit (можно при наличии нескольких компонентов создать один общий обработчик для всех):


 procedure TForm1.DBEditKeyDown(Sender: TObject; var Key: Word; Shift:
   TShiftState);
 begin
   if (Key = VK_INSERT) then
     insertMode := not insertMode;
 end;
 
 procedure TForm1.DBEditKeyPress(Sender: TObject; var Key: Char);
 begin
   if (not insertMode) and (Sender is TDBEdit) then
     (Sender as TDBEdit).SelLength := 1
   else
     (Sender as TDBEdit).SelLength := 0;
 end;
 
 procedure TForm1.DBEditEnter(Sender: TObject);
 begin
   insertMode := True;
 end;
 

Банзай! Похоже это работает, хотя я и не имел достаточного времени протестировать это. Естественно, вы можете изменить это по просьбе вашего заказчика (например, я всегда сбрасывал режим во вставку при перемещении к другому компоненту DBEedit). Все вышесказанное должно также работать без проблем и с компонентами Edit.




<< ВЕРНУТЬСЯ В ОГЛАВЛЕНИЕ



Материалы находятся на сайте https://exelab.ru/pro/



Оригинальный DVD-ROM: eXeL@B DVD !


Вы находитесь на EXELAB.rU
Проект ReactOS