Советы по Delphi


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


Сама 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.

- Denis Sarrazin [001049]



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