请问如果用程序执行粘贴功能?(100分)

  • 主题发起人 主题发起人 浩毛
  • 开始时间 开始时间

浩毛

Unregistered / Unconfirmed
GUEST, unregistred user!
大家都知道Ctrl+C是粘贴

但我想用其他快接键代替Ctrl+C,比如说CTRL+R粘贴选中的文本,并且执行一些其他的操作。

我不知道如何实现程序来粘贴选中的文本。

请指教
 
是不是有个什么API函数呢?

在TClipBoard里我没看到执行粘贴的,好象都是关于获取粘贴的东西的方法
 
procedure TForm1.Button1Click(Sender: TObject);
begin
//拷贝
edit1.CopyToClipboard;
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
//粘贴
edit1.PasteFromClipboard;
end;
 
以下实现Ctrl+A复制
Form1.KeyPreviw := True;
procedure TForm1.FormKeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
begin
if (ssCtrl in Shift) and (Key=65) then
SendMessage(GetFocus(), wm_copy, 0, 0);
end;
 
为了使应用程序能自动的感知剪贴板的更改,首先应当将应用程序的窗体注册到剪贴板观测链中,然后使
应用程序能响应剪贴板的更改消息并对这些消息进行处理,最后当然不要忘了将该窗体从剪贴板观测链中移去。
为了在剪贴板观测链中注册应用程序的窗体,需调用Win32 API函数SetClipBoardviewer。
SetClipBoardviewer的定义格式为:
function SetClipBoardviewer(hwndnewviewer;hwnd):hwnd;
hwdnnewviewer参数表示要注册的窗体句柄。
如果函数执行成功,返回剪贴板中下一个窗体的句柄。如果发生错误或在剪贴板观测链中无其他窗体,则
返回NULL。
注册了窗体后,下一步就是捕获剪贴板变化的消息并进行处理。如果剪贴板发生了变化,则Windows会向剪
贴板观测链中的窗体发送WM_changecbchain消息或者WM_DRAWCLIPBOARD消息。因此可以定义相应的消息处理过程
来实现。
最后,我们可以用ChangeClipboardChain()函数移去剪贴板观测链中的窗体。
下面的代码清单详细的说明了如何自动感知剪贴板的变化。

public
nextClipViewHdle:hwnd;
procedure wmdrawClipboard(var msg:twmdrawclipboard);
message wm_drawClipboard;
end;

var
Form1: TForm1;

implementation

{$R *.DFM}

procedure TForm1.ButtonCutClick(Sender: Tobject);
begin
clipboard.Assign(image.picture.bitmap);//复制图形到剪贴板
image.Picture.Assign(nil);//清空图形
end;

procedure TForm1.ButtonCopyClick(Sender: Tobject);
begin
clipboard.Assign(image.picture.bitmap);//复制图形到剪贴板
end;

procedure TForm1.ButtonPasteClick(Sender: Tobject);
begin
if clipboard.HasFormat(cf_bitmap) then
begin//如果剪贴板格式为位图,则放入图像组件中
image.Picture.bitmap.Assign(clipboard);
buttonpaste.Enabled :=false;
end
else if clipboard.HasFormat(cf_text) then
begin//如果剪贴板格式为文本,则放入Memo组件中
memo.PasteFromClipboard;
buttonpaste.Enabled :=false;
end;
end;

//该过程自动感知剪贴板
procedure tform1.wmdrawClipboard(var msg:twmdrawclipboard);
begin
if clipboard.HasFormat(cf_text) or clipboard.HasFormat(cf_bitmap) then
buttonpaste.Enabled :=true
else
buttonpaste.Enabled :=false;
end;

procedure TForm1.FormShow(Sender: Tobject);
begin
if clipboard.HasFormat(cf_text) or clipboard.HasFormat(cf_bitmap) then
buttonpaste.Enabled :=true
else
buttonpaste.Enabled :=false;
//将本窗体注册到剪贴板观链中
nextclipviewhdle:=setclipboardviewer(handle);
end;

procedure TForm1.FormClose(Sender: Tobject; var Action: TCloseAction);
begin
//将本窗体从剪贴板观测链中移去
changeclipboardchain(handle,nextclipviewhdle);
end;

end.

下面说明第二种剪贴板的方法
注:该文件出于
http://fxdfbl.51.net/files/onefile.php?file_id=17
 
OK,谢谢了,呵呵
 
后退
顶部