Tecsitel_FactuGES2/Source/Base/Utiles/ClipboardUtils.pas
david 15113e1a5e - Repaso global
- Habilitado portapapeles

git-svn-id: https://192.168.0.254/svn/Proyectos.Tecsitel_FactuGES2/trunk@392 0c75b7a4-871f-7646-8a2f-f78d34cc349f
2008-05-30 16:56:23 +00:00

149 lines
4.0 KiB
ObjectPascal

{+------------------------------------------------------------
| Unit ClipboardUtils
|
| Version: 1.1 Created: 05/05/96, 12:56:57
| Last Modified: 18.3.2001
| Author : P. Below
| Project: Common Utilities
| Description:
| Routines to copy string lists and stream to and
| from the clipboard.
+------------------------------------------------------------}
Unit ClipboardUtils;
interface
Uses Classes;
Procedure CopyStringsToClipboard( fmt: Cardinal; S: TStrings );
Procedure CopyStreamToClipboard( fmt: Cardinal; S: TStream );
Procedure CopyStringsFromClipboard( fmt: Cardinal; S: TStrings );
Procedure CopyStreamFromClipboard( fmt: Cardinal; S: TStream );
Function GetClipFmtname( fmt: Word ): String;
Implementation
Uses WinTypes, WinProcs, SysUtils, Clipbrd;
Procedure CopyStringsToClipboard( fmt: Cardinal; S: TStrings );
Var
MemStr: TMemoryStream;
Begin
MemStr := TMemoryStream.Create;
try
S.SaveToStream(MemStr);
CopyStreamToClipboard( fmt, MemStr );
finally
MemStr.Free;
end;
End; { CopyStringsToClipboard }
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
try
S.Read( pMem^, S.Size );
S.Position := 0;
finally
GlobalUnlock( hMem );
end;
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 CopyStringsFromClipboard( fmt: Cardinal; S: TStrings );
Var
MemStr: TMemoryStream;
Begin
MemStr:= TMemoryStream.Create;
try
CopyStreamFromClipboard( fmt, MemStr );
MemStr.Position := 0;
S.LoadFromStream( MemStr );
finally
MemStr.Free;
end;
End; { CopyStringsFromClipboard }
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
try
S.Write( pMem^, GlobalSize( hMem ));
S.Position := 0;
finally
GlobalUnlock( hMem );
end;
End { If }
Else
raise Exception.Create(
'CopyStreamFromClipboard: could not lock global handle '+
'obtained from clipboard!');
End; { If }
End; { CopyStreamFromClipboard }
Function GetClipFmtname( fmt: Word ): String;
Var
buf: Array [0..60] of Char;
Begin
If GetclipboardFormatName( fmt, buf, Pred(Sizeof(buf))) <> 0 Then
Result := StrPas(buf)
Else
Case fmt of
1: Result := 'CF_TEXT';
2: Result := 'CF_BITMAP';
3: Result := 'CF_METAFILEPICT';
4: Result := 'CF_SYLK';
5: Result := 'CF_DIF';
6: Result := 'CF_TIFF';
7: Result := 'CF_OEMTEXT';
8: Result := 'CF_DIB';
9: Result := 'CF_PALETTE';
10: Result := 'CF_PENDATA';
11: Result := 'CF_RIFF';
12: Result := 'CF_WAVE';
13: Result := 'CF_UNICODETEXT';
14: Result := 'CF_ENHMETAFILE';
15: Result := 'CF_HDROP (Win 95)';
16: Result := 'CF_LOCALE (Win 95)';
17: Result := 'CF_MAX (Win 95)';
$0080: Result := 'CF_OWNERDISPLAY';
$0081: Result := 'CF_DSPTEXT';
$0082: Result := 'CF_DSPBITMAP';
$0083: Result := 'CF_DSPMETAFILEPICT';
$008E: Result := 'CF_DSPENHMETAFILE';
$0200..$02FF: Result := 'private format';
$0300..$03FF: Result := 'GDI object';
Else
Result := 'unknown format';
End; {Case}
End;
End { Unit ClipboardUtils }.