如何在delphi中控制剪切板?(50分)

R

Robot5

Unregistered / Unconfirmed
GUEST, unregistred user!
如何在delphi中控制剪切板?
如把一段文字或图片到剪切板、或从剪切板中清除、在从剪切板中复制到其它程序中。
如何来实现呢?
 
引用Clipbrd单元。
 
将图形放到剪切板中

以下将窗口客户区放入剪切板中
procedure TForm1.Button2Click(Sender: TObject);
Var
Image : TImage;
BitMap : TBitmap;
Begin
Image:=TImage.Create(Self);
BitMap:=TBitMap.Create;
BitMap.Width:=ClientWidth;
BitMap.Height:=ClientHeight;
BitBlt(BitMap.Canvas.Handle, 0, 0,
ClientWidth, ClientHeight,
GetDC(Handle),0, 0, SRCCOPY);
Image.Picture.Graphic:=BitMap;
Clipboard.Assign(Image.Picture);
BitMap.Free;
Image.Free
End;

以下将Image1中的图形放入剪切板中
procedure TForm1.Button2Click(Sender: TObject);
Var
Image : TImage;
BitMap : TBitmap;
Begin
Image:=TImage.Create(Self);
BitMap:=TBitMap.Create;
BitMap.Width:=Image1.Width;
BitMap.Height:=Image1.Height;
BitBlt(BitMap.Canvas.Handle, 0, 0,
Image1.Width, Image1.Height,
Image1.canvas.Handle,0, 0, SRCCOPY);
Image.Picture.Graphic:=BitMap;
Clipboard.Assign(Image.Picture);
BitMap.Free;
Image.Free
End;

 
jsxjd 我是个新手,请问你所说的第一种也就把客户区放入剪贴板中,是不是也就是
把文字性的内容进去呢?
 
文字可以这样:Edit1.CopyToClipboard;
 
Procedure CopyStreamToClipboard( fmt: Cardinal; S: TStream );
Var
hMem: THandle;
pMem: Pointer;
Begin
S.Position := 0;
hMem := GlobalAlloc( GHND or GMEM_DDESHARE, S.Size );
If hMem <> 0 Then Begin
pMem := GlobalLock( hMem );
If pMem <> Nil Then Begin
S.Read( pMem^, S.Size );
S.Position := 0;
GlobalUnlock( hMem );
Clipboard.Open;
try
Clipboard.SetAsHandle( fmt, hMem );
finally
Clipboard.Close;
end;
End { If }
Else Begin
GlobalFree( hMem );
OutOfMemoryError;
End;
End { If }
Else
OutOfMemoryError;
End; { CopyStreamToClipboard }

Procedure CopyStreamFromClipboard( fmt: Cardinal; S: TStream );
Var
hMem: THandle;
pMem: Pointer;
Begin
hMem := Clipboard.GetAsHandle( fmt );
If hMem <> 0 Then Begin
pMem := GlobalLock( hMem );
If pMem <> Nil Then Begin
S.Write( pMem^, GlobalSize( hMem ));
S.Position := 0;
GlobalUnlock( hMem );
End { If }
Else
raise Exception.Create(
'CopyStreamFromClipboard: could not lock global handle '+
'obtained from clipboard!');
End; { If }
End; { CopyStreamFromClipboard }
 
var
V_Format: Word;
V_Data: THandle;
V_Palette: HPalette;
begin
PosPicture.GetPictureArea(ARect(PosPicture));
PosPicture.Bitmap.SaveToClipboardFormat(V_Format,V_Data,V_Palette);
ClipBoard.SetAsHandle(V_Format,V_Data);
PosPicture.SaveToFile(AppCurrentDir+'/CapturePic.bmp');
Close;
end;
 
谢谢,大家了,不过好象你说的都比较难。
我只是想剪贴文本的内容。没有图片的。
哈哈,谢谢!收下了!
 
我用的方法是:
Edit1.SetFocus;
Edit1.CopyToClipboard;
就是上面这样的。不知道对不对?
 
不好意思又有问题了,上面的方法好象只能剪一次。
第二次就剪不上了。
如何清除剪贴板呢?
 
顶部