Советы по Delphi

Функции меню Вырезать/Копировать/Вставить


Есть два шага, положенных в основу работы функций cut/copy/paste. Во-первых, вам нужно знать, какие пункты меню "Редактирование" должны быть в данный момент включены. Во-вторых, вам необходимо работать с тем элементом управления, который в данный момент выбран. Вот возможное решение:

    procedure TForm1.Edit1Click(Sender: TObject);
begin
IF
ActiveControl IS TCustomEdit THEN BEGIN WITH TCustomEdit(ActiveControl) DO BEGIN Cut1.Enabled := SelLength > 0;

Copy1.Enabled := SelLength > 0; Paste1.Enabled := ClipBoard.HasFormat(CF_TEXT); END; END ELSE BEGIN Cut1.Enabled := False; Copy1.Enabled := False; Paste1.Enabled := False; END; end;

procedure TForm1.Cut1Click(Sender: TObject);
begin
IF
ActiveControl IS TDBEdit THEN WITH TDBEdit(ActiveControl).DataSource.DataSet DO Edit; TCustomEdit(ActiveControl).CutToClipboard; IF ActiveControl IS TDBEdit THEN WITH TDBEdit(ActiveControl).DataSource.DataSet DO Post; end;

procedure TForm1.Copy1Click(Sender: TObject);
begin
TCustomEdit(ActiveControl).CopyToClipboard; end;

procedure TForm1.Paste1Click(Sender: TObject);
begin
IF
ActiveControl IS TDBEdit THEN WITH TDBEdit(ActiveControl).DataSource.DataSet DO Edit; TCustomEdit(ActiveControl).PasteFromClipboard; IF ActiveControl IS TDBEdit THEN WITH TDBEdit(ActiveControl).DataSource.DataSet DO Post; end;

Хорошо? Edit1 - меню редактирования верхнего уровня - если по нему щелкают, то прежде, чем меню "вывалится" вниз, происходит проверка того, принадлежит ли текущий активный элемент управления некоторым типам редактирования. Если это условие выполняется, активизируются пункты меню Вырезать и Копировать, и, если есть текст в буфере обмена, то и пункт Вставить. Если нет, то все три пункта будут недоступны.

Для копирования содержимого элемента редактирования достаточно просто вызвать CopyToClipboard; это не проблема. Для вырезания и вставки вам необходимо *ИЗМЕНИТЬ* содержимое активного элемента редактирования - если это DBEdit, вам необходимо перейти в режим редактирования и после манипуляций с данными буфера обмена запостить измененные данные.

- Neil J. Rubenking [000801]



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