procedure TForm1.CopyClick(Sender: TObject); var Mes: TWMCopy; begin Mes.Msg := WM_COPY; Screen.ActiveControl.Dispatch(Mes); end; procedure TForm1.CutClick(Sender: TObject); var Mes: TWMCut; begin Mes.Msg := WM_CUT; Screen.ActiveControl.Dispatch(Mes); end; procedure TForm1.PasteClick(Sender: TObject); var Mes: TWMPaste; begin Mes.Msg := WM_PASTE; Screen.ActiveControl.Dispatch(Mes); end; procedure TForm1.UndoClick(Sender: TObject); var Mes: TWMUndo; begin Mes.Msg := WM_UNDO; Screen.ActiveControl.Dispatch(Mes); end;[Shejchenko Andrij]
ActiveControl.Perform(WM_COPY, 0, 0); Для PasteFromClipboard: ActiveControl.Perform(WM_PASTE, 0, 0);Если элемент управления «не понимает» посланных сообщений, то это никак не скажется на его работе, он просто проигнорирует их.
Другим способом является проверка типа во время выполнения приложения:
if ActiveControl is TCustomEdit then TCustomEdit(ActiveControl).CopyToClipboard;[News Group]
SendMessage(GetFocus, WM_CUT, 0, 0); SendMessage(GetFocus, WM_COPY, 0, 0); SendMessage(GetFocus, WM_PASTE, 0, 0);[News Group]
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, необходимо перейти в режим редактирования и после манипуляций с данными буфера обмена сохранить измененные данные.
[News Group]