Советы по Delphi

       

Поддержка Cut Copy Paste I


Автор: "Shejchenko Andrij" <andrij@dep01.niiit.kiev.ua>

Я использую следующую процедуру. Вызывайте ее при нажатии на соответвующих пунктах меню. Это будет работать со всеми "редактируемыми" элементами управления. Но для деревьев вы должны использовать специальные сообщения редактирования.

procedure TMainForm.EditUndo(Sender: TObject);
var Mes:TWMUndo;
begin
Mes.Msg:=WM_UNDO;Screen.ActiveControl.Dispatch(Mes);end;

procedure TMainForm.EditCut(Sender: TObject);
var Mes:TWMCut;
begin
Mes.Msg:=WM_CUT;Screen.ActiveControl.Dispatch(Mes);end;

procedure TMainForm.EditCopy(Sender: TObject);
var Mes:TWMCopy;
begin
Mes.Msg:=WM_COPY;Screen.ActiveControl.Dispatch(Mes);end;

procedure TMainForm.EditPaste(Sender: TObject);
var Mes:TWMPaste;
begin
Mes.Msg:=WM_PASTE;Screen.ActiveControl.Dispatch(Mes);end;
[000302]


Свойство формы ActiveControl позволяет вам получить ссылку на активный в данный момент элемент управления. Но не все элементы управления могут работать с буфером обмена. Если вы хотите работать только с компонентами Edit и Memo, то вот самый простой метод:



ActiveControl.Perform( WM_COPY, 0, 0 );

для CopyToClipboard и:

ActiveControl.Perform( WM_PASTE, 0, 0 );

для PasteFromClipboard.

Если элемент управления "не понимает" посланных сообщений, то это никак не скажется на его работе, он просто проигнорирует их.

Другим способом является проверка типа во время выполнения приложения:

If ActiveControl Is TCustomEdit ThenTCustomEdit(ActiveControl).CopyToClipboard;

- Peter Below [000851]



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