// Borland C++ Builder
// Copyright (c) 1995, 1999 by Borland International
// All rights reserved

// (DO NOT EDIT: machine generated header) 'RVDragDrop.pas' rev: 5.00

#ifndef RVDragDropHPP
#define RVDragDropHPP

#pragma delphiheader begin
#pragma option push -w-
#pragma option push -Vx
#include <RVTypes.hpp>	// Pascal unit
#include <RVClasses.hpp>	// Pascal unit
#include <ShlObj.hpp>	// Pascal unit
#include <RVScroll.hpp>	// Pascal unit
#include <RVUni.hpp>	// Pascal unit
#include <RVStr.hpp>	// Pascal unit
#include <Graphics.hpp>	// Pascal unit
#include <Classes.hpp>	// Pascal unit
#include <ActiveX.hpp>	// Pascal unit
#include <Windows.hpp>	// Pascal unit
#include <SysUtils.hpp>	// Pascal unit
#include <SysInit.hpp>	// Pascal unit
#include <System.hpp>	// Pascal unit

//-- user supplied -----------------------------------------------------------
DECLARE_DINTERFACE_TYPE(IDropTarget)
DECLARE_DINTERFACE_TYPE(IDropSource)
DECLARE_DINTERFACE_TYPE(IEnumFORMATETC)

namespace Rvdragdrop
{
//-- type declarations -------------------------------------------------------
class DELPHICLASS TRVDropTarget;
class PASCALIMPLEMENTATION TRVDropTarget : public Rvscroll::TRVScrollerInternalIfcObject 
{
	typedef Rvscroll::TRVScrollerInternalIfcObject inherited;
	
private:
	bool FAccepted;
	bool __fastcall HasAcceptableFormats(const _di_IDataObject DataObj);
	bool __fastcall AllowMoving(int KeyState, int Effect);
	int __fastcall GetEffect(int KeyState, int Effect);
	void __fastcall FillFormatEtc(tagFORMATETC &FmtEtc, Word Format);
	bool __fastcall GetFiles(const unsigned Handle, Classes::TStrings* Files);
	
public:
	HRESULT __stdcall DragEnter(const _di_IDataObject DataObj, int KeyState, const Windows::TPoint pt, 
		int &Effect);
	HRESULT __stdcall DragOver(int KeyState, const Windows::TPoint pt, int &Effect);
	HRESULT __stdcall DragLeave(void);
	HRESULT __stdcall Drop(const _di_IDataObject DataObj, int KeyState, const Windows::TPoint pt, int &
		Effect);
	bool __fastcall GetMedium(const _di_IDataObject DataObj, Word Format, tagSTGMEDIUM &StgMedium);
	Rvclasses::TRVMemoryStream* __fastcall GetAsStream(const _di_IDataObject DataObj, Word Format);
	bool __fastcall GetAsTextA(const _di_IDataObject DataObj, Word Format, AnsiString &s);
	bool __fastcall GetAsTextW(const _di_IDataObject DataObj, Word Format, AnsiString &s);
	Graphics::TBitmap* __fastcall GetAsBitmap(const _di_IDataObject DataObj, bool TryDIBFirst);
	Graphics::TMetafile* __fastcall GetAsMetafile(const _di_IDataObject DataObj);
	Classes::TStringList* __fastcall GetAsFiles(const _di_IDataObject DataObj);
	bool __fastcall HasFormat(const _di_IDataObject DataObj, Word Format);
	__fastcall virtual ~TRVDropTarget(void);
	bool __fastcall RegisterDragDropForOwner(void);
	void __fastcall UnRegisterDragDropForOwner(void);
public:
	#pragma option push -w-inl
	/* TRVScrollerInternalIfcObject.Create */ inline __fastcall TRVDropTarget(Rvscroll::TRVScroller* AOwner
		) : Rvscroll::TRVScrollerInternalIfcObject(AOwner) { }
	#pragma option pop
	
private:
	void *__IDropTarget;	/* IDropTarget */
	
public:
	operator IDropTarget*(void) { return (IDropTarget*)&__IDropTarget; }
	
};


class DELPHICLASS TRVEnumFormatEtc;
class PASCALIMPLEMENTATION TRVEnumFormatEtc : public System::TInterfacedObject 
{
	typedef System::TInterfacedObject inherited;
	
private:
	Graphics::TGraphic* FGraphic;
	int FIndex;
	Word __fastcall GetCurFormat(void);
	
public:
	__fastcall TRVEnumFormatEtc(Graphics::TGraphic* Graphic, int Index);
	HRESULT __stdcall Next(int Celt, /* out */ void *Elt, Windows::PLongint PCeltFetched);
	HRESULT __stdcall Skip(int Celt);
	HRESULT __stdcall Reset(void);
	HRESULT __stdcall Clone(/* out */ _di_IEnumFORMATETC &Enum);
public:
	#pragma option push -w-inl
	/* TObject.Destroy */ inline __fastcall virtual ~TRVEnumFormatEtc(void) { }
	#pragma option pop
	
private:
	void *__IEnumFORMATETC;	/* IEnumFORMATETC */
	
public:
	operator IEnumFORMATETC*(void) { return (IEnumFORMATETC*)&__IEnumFORMATETC; }
	
};


class DELPHICLASS TRVDropSource;
class PASCALIMPLEMENTATION TRVDropSource : public Rvscroll::TRVScrollerInternalIfcObject 
{
	typedef Rvscroll::TRVScrollerInternalIfcObject inherited;
	
private:
	tagSTGMEDIUM FMedium;
	bool FUseMedium;
	bool __fastcall IsAvailableFormat(Word Format);
	Classes::TMemoryStream* __fastcall GetAsStream(Word Format);
	HRESULT __fastcall GetAsHandle(Word Format, unsigned &Handle);
	HRESULT __fastcall SaveToHandle(Word Format, unsigned Handle);
	
public:
	HRESULT __stdcall QueryContinueDrag(BOOL FEscapePressed, int KeyState);
	HRESULT __stdcall GiveFeedback(int Effect);
	HRESULT __stdcall GetData(const tagFORMATETC &FormatEtcIn, /* out */ tagSTGMEDIUM &Medium);
	HRESULT __stdcall GetDataHere(const tagFORMATETC &FormatEtcIn, /* out */ tagSTGMEDIUM &Medium);
	HRESULT __stdcall QueryGetData(const tagFORMATETC &FormatEtc);
	HRESULT __stdcall GetCanonicalFormatEtc(const tagFORMATETC &FormatEtc, /* out */ tagFORMATETC &FormatEtcOut
		);
	HRESULT __stdcall SetData(const tagFORMATETC &FormatEtc, tagSTGMEDIUM &Medium, BOOL FRelease);
	HRESULT __stdcall EnumFormatEtc(int Direction, /* out */ _di_IEnumFORMATETC &EnumFormatEtc);
	HRESULT __stdcall DAdvise(const tagFORMATETC &FormatEtc, int advf, const _di_IAdviseSink advsink, /* out */ 
		int &Connection);
	HRESULT __stdcall DUnadvise(int Connection);
	HRESULT __stdcall EnumDAdvise(/* out */ _di_IEnumSTATDATA &EnumAdvise);
	__fastcall virtual ~TRVDropSource(void);
	bool __fastcall StoreData(Word Format);
public:
	#pragma option push -w-inl
	/* TRVScrollerInternalIfcObject.Create */ inline __fastcall TRVDropSource(Rvscroll::TRVScroller* AOwner
		) : Rvscroll::TRVScrollerInternalIfcObject(AOwner) { }
	#pragma option pop
	
private:
	void *__IDropSource;	/* IDropSource */
	void *__IDataObject;	/* IDataObject */
	
public:
	operator IDataObject*(void) { return (IDataObject*)&__IDataObject; }
	operator IDropSource*(void) { return (IDropSource*)&__IDropSource; }
	
};


//-- var, const, procedure ---------------------------------------------------

}	/* namespace Rvdragdrop */
#if !defined(NO_IMPLICIT_NAMESPACE_USE)
using namespace Rvdragdrop;
#endif
#pragma option pop	// -w-
#pragma option pop	// -Vx

#pragma delphiheader end.
//-- end unit ----------------------------------------------------------------
#endif	// RVDragDrop
