Советы по Delphi

         

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


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

procedure TForm1.Edit1Click(Sender: TObject);
begin
IF
ActiveControl IS TCustomEdit THENBEGINWITH TCustomEdit(ActiveControl) DOBEGINCut1.Enabled := SelLength > 0;Copy1.Enabled := SelLength > 0;Paste1.Enabled := ClipBoard.HasFormat(CF_TEXT);END;ENDELSEBEGINCut1.Enabled := False;Copy1.Enabled := False;Paste1.Enabled := False;END;end;

procedure TForm1.Cut1Click(Sender: TObject);
begin
IF
ActiveControl IS TDBEdit THENWITH TDBEdit(ActiveControl).DataSource.DataSet DO Edit;TCustomEdit(ActiveControl).CutToClipboard;IF ActiveControl IS TDBEdit THENWITH 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 THENWITH TDBEdit(ActiveControl).DataSource.DataSet DO Edit;TCustomEdit(ActiveControl).PasteFromClipboard;IF ActiveControl IS TDBEdit THENWITH TDBEdit(ActiveControl).DataSource.DataSet DO Post;end;

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

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

- Neil J. Rubenking [000801]



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