/* * Xailer source code: * * Clipboard.prg * Clase TClipboard() * * Copyright 2003, 2007 Jose Lalin * Copyright 2003, 2007 Xailer.com * All rights reserved * */ #include "Xailer.ch" //-------------------------------------------------------------------------- CLASS XClipboard FROM TComponent PUBLIC: METHOD Create( oParent ) CONSTRUCTOR METHOD Destroy() INLINE ::Close() METHOD Open() INLINE OpenClipboard( ::ParentHandle ) // --> lSuccess METHOD Close() INLINE CloseClipboard() // --> lSuccess METHOD Empty() // --> Nil METHOD IsEmpty() INLINE ::CountFormats() == 0 // --> lResult METHOD GetOwner() INLINE GetClipboardOwner() // --> hWnd METHOD GetWindow() INLINE GetOpenClipboardWindow() // --> hWnd METHOD SetData( nFormatID, uData ) // --> lSuccess METHOD GetData( nFormatID ) // --> uData METHOD HasData( nFormatID ) INLINE IsClipboardFormatAvailable( nFormatID ) // --> lResult METHOD GetText() INLINE ::GetData( CF_TEXT ) // --> cString METHOD SetText( cText ) INLINE ::SetData( CF_TEXT, cText ) // --> lSuccess METHOD SetDropFiles( aFiles ) // --> lSuccess METHOD GetDropFiles() INLINE ::GetData( CF_HDROP ) // --> aFiles METHOD RegisterFormat( cFormat ) // --> nFormatId METHOD CountFormats() INLINE CountClipboardFormats() // --> nCount METHOD EnumFormats() // --> aFormatsId METHOD EnumFormatsName() // --> aFormatsName METHOD GetFormatName( nFormatID ) // --> cName METHOD IsSystemFormat( nFormatID ) INLINE nFormatID > 0 .AND. nFormatID < CF_MAX // --> lResult METHOD IsPrivateFormat( nFormatID ) INLINE nFormatID > 0xC000 // --> lResult PROTECTED: DATA ParentHandle INIT 0 ENDCLASS //-------------------------------------------------------------------------- METHOD Create( oParent ) CLASS XClipboard ::Super:Create( oParent ) IF oParent != Nil IF ValType( oParent ) == "O" ::ParentHandle := oParent:Handle ELSEIF ValType( oParent ) == "N" ::ParentHandle := oParent ENDIF ENDIF RETURN Self //-------------------------------------------------------------------------- METHOD GetData( nFormatID ) CLASS XClipboard LOCAL uData IF ::HasData( nFormatID ) ::Open() uData := GetClipboardData( nFormatID ) ::Close() ENDIF RETURN uData //-------------------------------------------------------------------------- METHOD SetData( nFormatID, uData ) CLASS XClipboard LOCAL lSet := .F. IF ::Open() lSet := SetClipboardData( nFormatID, uData ) ::Close() ENDIF RETURN lSet //-------------------------------------------------------------------------- METHOD RegisterFormat( cFormat ) CLASS XClipboard LOCAL nFormatID nFormatID := RegisterClipboardFormat( cFormat ) RETURN IIf( nFormatID > 0xC000, nFormatID, 0 ) //-------------------------------------------------------------------------- METHOD Empty() CLASS XClipboard IF ::Open() EmptyClipBoard() ::Close() ENDIF RETURN Nil //-------------------------------------------------------------------------- METHOD GetFormatName( nFormatID ) CLASS XClipboard LOCAL cName := "" DO CASE CASE nFormatID == CF_TEXT cName := "TEXT" CASE nFormatID == CF_BITMAP cName := "BITMAP" CASE nFormatID == CF_METAFILEPICT cName := "METAFILEPICT" CASE nFormatID == CF_SYLK cName := "SYLK" CASE nFormatID == CF_DIF cName := "DIF" CASE nFormatID == CF_TIFF cName := "TIFF" CASE nFormatID == CF_OEMTEXT cName := "OEMTEXT" CASE nFormatID == CF_DIB cName := "DIB" CASE nFormatID == CF_PALETTE cName := "PALETTE" CASE nFormatID == CF_PENDATA cName := "PENDATA" CASE nFormatID == CF_RIFF cName := "RIFF" CASE nFormatID == CF_WAVE cName := "WAVE" CASE nFormatID == CF_UNICODETEXT cName := "UNICODETEXT" CASE nFormatID == CF_ENHMETAFILE cName := "ENHMETAFILE" CASE nFormatID == CF_HDROP cName := "HDROP" CASE nFormatID == CF_LOCALE cName := "LOCALE" CASE nFormatID == CF_DIBV5 cName := "DIBV5" OTHERWISE IF nFormatID > CF_MAX cName := GetClipboardFormatName( nFormatID ) ENDIF ENDCASE RETURN cName //-------------------------------------------------------------------------- METHOD EnumFormats() CLASS XClipboard LOCAL aFormats := {} IF ::Open() aFormats := EnumClipboardFormats() ::Close() ENDIF RETURN aFormats //-------------------------------------------------------------------------- METHOD EnumFormatsName() CLASS XClipboard LOCAL aFormats := ::EnumFormats() LOCAL aNames := {} LOCAL i FOR i := 1 TO Len( aFormats ) AAdd( aNames, ::GetFormatName( aFormats[ i ] ) ) NEXT RETURN aNames //-------------------------------------------------------------------------- METHOD SetDropFiles( aFiles ) CLASS XClipboard LOCAL cFiles := "" LOCAL lSuccess := FALSE IF ValType( aFiles ) == "A" AEval( aFiles, {|cFile| cFiles += cFile + Chr( 0 ) } ) ELSE IF Right( aFiles, -1 ) != Chr( 0 ) cFiles := aFiles + Chr( 0 ) ENDIF ENDIF cFiles += Chr( 0 ) lSuccess := ::SetData( CF_HDROP, cFiles ) RETURN lSuccess //--------------------------------------------------------------------------