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