summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authormarco <marco@3ad0048d-3df7-0310-abae-a5850022a9f2>2009-12-13 00:03:26 +0000
committermarco <marco@3ad0048d-3df7-0310-abae-a5850022a9f2>2009-12-13 00:03:26 +0000
commit011ba65ff82ab9e04963c848d60fbeac411bf649 (patch)
treed4725f7ba0781d26165c61702f7ae9c5955588ae
parent371424f38a68474a7bf7e811d9154121bc4d711e (diff)
downloadfpc-011ba65ff82ab9e04963c848d60fbeac411bf649.tar.gz
* IFileDialogs and friends. Needed for Vista like fileopendialogs
git-svn-id: http://svn.freepascal.org/svn/fpc/trunk@14431 3ad0048d-3df7-0310-abae-a5850022a9f2
-rw-r--r--packages/winunits-base/src/shlobj.pp128
1 files changed, 125 insertions, 3 deletions
diff --git a/packages/winunits-base/src/shlobj.pp b/packages/winunits-base/src/shlobj.pp
index b007ce83f5..1c639a892b 100644
--- a/packages/winunits-base/src/shlobj.pp
+++ b/packages/winunits-base/src/shlobj.pp
@@ -838,11 +838,51 @@ Const
SMSET_DONTOWN = $00000001; // The Menuband doesn't own the non-ref counted object
SMINV_REFRESH = $00000001;
SMINV_ID = $00000008;
-
+ FDEOR_DEFAULT = 0;
+ FDEOR_ACCEPT = 1;
+ FDEOR_REFUSE = 2;
+ FDESVR_DEFAULT = 0;
+ FDESVR_ACCEPT = 1;
+ FDESVR_REFUSE = 2;
+ FDAP_BOTTOM = 0;
+ FDAP_TOP = 1;
+ FOS_OVERWRITEPROMPT = $2;
+ FOS_STRICTFILETYPES = $4;
+ FOS_NOCHANGEDIR = $8;
+ FOS_PICKFOLDERS = $20;
+ FOS_FORCEFILESYSTEM = $40;
+ FOS_ALLNONSTORAGEITEMS = $80;
+ FOS_NOVALIDATE = $100;
+ FOS_ALLOWMULTISELECT = $200;
+ FOS_PATHMUSTEXIST = $800;
+ FOS_FILEMUSTEXIST = $1000;
+ FOS_CREATEPROMPT = $2000;
+ FOS_SHAREAWARE = $4000;
+ FOS_NOREADONLYRETURN = $8000;
+ FOS_NOTESTFILECREATE = $10000;
+ FOS_HIDEMRUPLACES = $20000;
+ FOS_HIDEPINNEDPLACES = $40000;
+ FOS_NODEREFERENCELINKS = $100000;
+ FOS_DONTADDTORECENT = $2000000;
+ FOS_FORCESHOWHIDDEN = $10000000;
+ FOS_DEFAULTNOMINIMODE = $20000000;
+ FOS_FORCEPREVIEWPANEON = $40000000;
+
Type
- SFGAOF = ULONG;
+ SFGAOF = ULONG;
TSFGAOF = SFGAOF;
PSFGAOF = ^SFGAOF;
+ SHCONTF = longint;
+ TSHCONTF = SHCONTF;
+ PSHCONTF = ^SHCONTF;
+ SIGDN = longint;
+ TSIGDN = SIGDN;
+ PSIGDN = ^SIGDN;
+ SICHINTF = longint;
+ TSICHINTF = SICHINTF;
+ PSICHINTF = ^SICHINTF;
+
+
PROPERTYUI_NAME_FLAGS = DWord; // enum
PROPERTYUI_FORMAT_FLAGS = DWord;
PROPERTYUI_FLAGS = Dword;
@@ -1715,7 +1755,28 @@ Type
LPAASHELLMENUITEM = PtagAASHELLMENUITEM;
PLPAASHELLMENUITEM = ^LPAASHELLMENUITEM;
-
+ FDE_OVERWRITE_RESPONSE = longint;
+ TFDE_OVERWRITE_RESPONSE = FDE_OVERWRITE_RESPONSE;
+ PFDE_OVERWRITE_RESPONSE = ^longint;
+ FDE_SHAREVIOLATION_RESPONSE = longint;
+ TFDE_SHAREVIOLATION_RESPONSE = FDE_SHAREVIOLATION_RESPONSE;
+ PFDE_SHAREVIOLATION_RESPONSE = ^FDE_SHAREVIOLATION_RESPONSE;
+ FILEOPENDIALOGOPTIONS = longint;
+ TFILEOPENDIALOGOPTIONS = FILEOPENDIALOGOPTIONS;
+ PFILEOPENDIALOGOPTIONS = ^TFILEOPENDIALOGOPTIONS;
+ FDAP = longint;
+ TFDAP= FDAP;
+ PFDAP= ^FDAP;
+ _COMDLG_FILTERSPEC = packed record
+ pszName : LPCWSTR;
+ pszSpec : LPCWSTR;
+ end;
+
+ COMDLG_FILTERSPEC = _COMDLG_FILTERSPEC;
+ TCOMDLG_FILTERSPEC = _COMDLG_FILTERSPEC;
+ PCOMDLG_FILTERSPEC = ^_COMDLG_FILTERSPEC;
+
+
IPersistFolder = Interface(IPersist)
['{000214EA-0000-0000-C000-000000000046}']
function Initialize (pild : LPCITEMIDLIST): HResult; StdCall;
@@ -1999,6 +2060,67 @@ Type
end;
IShellLink = IShellLinkA;
+ PIShellItem= ^IShellItem;
+ IShellItem = interface(IUnknown)
+ ['{43826d1e-e718-42ee-bc55-a1e261c37bfe}']
+ function BindToHandler(pbc:IBindCTX;bhid:PGUID;RIID:PIID;ppv:ppointer):HResult;Stdcall;
+ function GetParent(ppsi:PISHellItem):HResult;Stdcall;
+ function GetDisplayName(sigdnname:SIGDN;ppszName:LPWSTR):HResult; Stdcall;
+ function GetAttributes(sfgaomask:SFGAOF;psfgaoAttribs:PSFGAOF):HResult;Stdcall;
+ function Compare(psi:IShellItem;hint:SICHINTF;piorder:PINT):HResult; Stdcall;
+ end;
+
+ IModalWindow = Interface(IUnknown)
+ ['{b4db1657-70d7-485e-8e3e-6fcb5a5c1802}']
+ function Show(hwndparent:HWND):HResult;StdCall;
+ end;
+
+ IShellItemFilter = Interface(IUnknown)
+ ['{2659B475-EEB8-48b7-8F07-B378810F48CF}']
+ function IncludeItem(psi:IShellItem):HResult;StdCall;
+ function GetEnumFlagsForItem(psi:IShellItem;pgrfflags :PSHCONTF):HRESULT;Stdcall;
+ end;
+
+ IFileDialog = Interface;
+ IFileDialogEvents = Interface(IUnknown)
+ ['{973510db-7d7f-452b-8975-74a85828d354}']
+ function OnFileOk (pfd:IFileDialog):HResult; Stdcall;
+ function OnFolderChanging (pfd:IFileDialog;psifolder:IShellItem):HResult; Stdcall;
+ function OnFolderChange (pfd:IFileDialog):HResult; Stdcall;
+ function OnSelectionChange(pfd:IFileDialog):HResult; Stdcall;
+ function OnShareViolation (pfd:IFileDialog;psi:IShellItem;pResponse :pFDE_SHAREVIOLATION_RESPONSE):HResult; Stdcall;
+ function OnTypeChange (pfd:IFileDialog):HResult; Stdcall;
+ function OnOverwrite (pfd:IFileDialog;psi:IShellItem;pResponse :pFDE_OVERWRITE_RESPONSE):HResult; Stdcall;
+ end;
+
+ IFileDialog = Interface(IModalWindow)
+ ['{42f85136-db7e-439c-85f1-e4075d135fc8}']
+ function SetFileTypes(cFileTypes:UINT;rgFilterSpec:pCOMDLG_FILTERSPEC):HRESULT;Stdcall;
+ function SetFileTypeIndex(iFileType:UINT):HRESULT;Stdcall;
+ function GetFileTypeIndex(piFileType:pUINT):HRESULT;Stdcall;
+ function Advise(pdfde:IFileDialogEvents;pdwcookie:PDWORD):HRESULT;Stdcall;
+ function unadvise(dwCookie:DWORD):HRESULT;Stdcall;
+ function SetOptions(fos:FILEOPENDIALOGOPTIONS):HRESULT;Stdcall;
+ function GetOptions(pfos:pFILEOPENDIALOGOPTIONS):HRESULT;Stdcall;
+ function SetDefaultFolder(psi:IShellItem):HRESULT;Stdcall;
+ function SetFolder(psi:IShellItem):HRESULT;Stdcall;
+ function Getfolder(ppsi:pIShellItem):HRESULT;Stdcall;
+ function GetCurrentSelection(ppsi:pIShellItem):HRESULT;Stdcall;
+ function SetFileName(pszName:LPCWSTR):HRESULT;Stdcall;
+ function GetFileName(pszName:pLPWSTR):HRESULT;Stdcall;
+ function SetTitle(pszTitle:LPCWSTR):HRESULT;Stdcall;
+ function SetOkButtonLabel(pszText:LPCWSTR):HRESULT;Stdcall;
+ function SetFileNameLabel(pszLabel:LPCWSTR):HRESULT;Stdcall;
+ function GetResult(ppsi:pIShellItem):HRESULT;Stdcall;
+ function AddPlace(psi:IShellItem;fdap:FDAP):HRESULT;Stdcall;
+ function SetDefaultExtension(pszDefaultExtension:LPCWSTR):HRESULT;Stdcall;
+ function Close(hr:HRESULT):HRESULT;Stdcall;
+ function SetClientGuid(GUID:PGUID):HRESULT;Stdcall;
+ function ClearClientData:HRESULT;Stdcall;
+ function SetFilter(pfilter:IShellItemFilter):HRESULT;Stdcall;
+ end;
+
+
function SHGetMalloc(out ppmalloc: IMalloc):HResult;StdCall; external 'shell32' name 'SHGetMalloc';
function SHGetDesktopFolder(out ppshf:IShellFolder):HResult;StdCall; external 'shell32' name 'SHGetDesktopFolder';