Browse Source

--- Merging r16037 into '.':
U packages/paszlib/src/zipper.pp
--- Merging r16041 into '.':
U packages/winunits-base/Makefile.fpc
A packages/winunits-base/src/nb30.pp
U packages/winunits-base/src/buildwinutilsbase.pp
D packages/winunits-base/src/Nb30.pp
U packages/winunits-base/Makefile
--- Merging r16337 into '.':
U packages/winunits-base/src/shlobj.pp
--- Merging r16338 into '.':
U packages/winunits-base/src/commctrl.pp
G packages/winunits-base/src/shlobj.pp
--- Merging r16353 into '.':
G packages/winunits-base/src/shlobj.pp
--- Merging r16357 into '.':
G packages/winunits-base/src/shlobj.pp

# revisions: 16037,16041,16337,16338,16353,16357
------------------------------------------------------------------------
r16037 | joost | 2010-09-23 21:07:35 +0200 (Thu, 23 Sep 2010) | 1 line
Changed paths:
M /trunk/packages/paszlib/src/zipper.pp

* Override virtual constructor instead of adding a static one so that it is actually called. Fixes problems on non-Windows
------------------------------------------------------------------------
------------------------------------------------------------------------
r16041 | marco | 2010-09-25 14:57:33 +0200 (Sat, 25 Sep 2010) | 2 lines
Changed paths:
M /trunk/packages/winunits-base/Makefile
M /trunk/packages/winunits-base/Makefile.fpc
D /trunk/packages/winunits-base/src/Nb30.pp
M /trunk/packages/winunits-base/src/buildwinutilsbase.pp
A /trunk/packages/winunits-base/src/nb30.pp (from /trunk/packages/winunits-base/src/Nb30.pp:16040)

* renamed nb30 header to lowercase and added makefiles.

------------------------------------------------------------------------
------------------------------------------------------------------------
r16337 | marco | 2010-11-13 19:02:53 +0100 (Sat, 13 Nov 2010) | 1 line
Changed paths:
M /trunk/packages/winunits-base/src/shlobj.pp

* Copied TaskDialog headers from Lazarus' win32extra at Paul's request.
------------------------------------------------------------------------
------------------------------------------------------------------------
r16338 | marco | 2010-11-13 19:32:11 +0100 (Sat, 13 Nov 2010) | 1 line
Changed paths:
M /trunk/packages/winunits-base/src/commctrl.pp
M /trunk/packages/winunits-base/src/shlobj.pp

* moved taskdialog to commctrl
------------------------------------------------------------------------
------------------------------------------------------------------------
r16353 | marco | 2010-11-17 14:07:43 +0100 (Wed, 17 Nov 2010) | 2 lines
Changed paths:
M /trunk/packages/winunits-base/src/shlobj.pp

* patch from Paul, fixes 17958, newer Vista/W7 interfaces for dialogs.

------------------------------------------------------------------------
------------------------------------------------------------------------
r16357 | paul | 2010-11-18 02:47:12 +0100 (Thu, 18 Nov 2010) | 1 line
Changed paths:
M /trunk/packages/winunits-base/src/shlobj.pp

shlobj: add more SHARD_ constants
------------------------------------------------------------------------

git-svn-id: branches/fixes_2_4@16378 -

marco 14 years ago
parent
commit
e28efffa82

+ 1 - 1
.gitattributes

@@ -5183,7 +5183,6 @@ packages/winceunits/src/ws2bth.pp svneol=native#text/plain
 packages/winunits-base/Makefile svneol=native#text/plain
 packages/winunits-base/Makefile.fpc svneol=native#text/plain
 packages/winunits-base/fpmake.pp svneol=native#text/plain
-packages/winunits-base/src/Nb30.pp svneol=native#text/plain
 packages/winunits-base/src/activex.pp svneol=native#text/plain
 packages/winunits-base/src/buildwinutilsbase.pp svneol=native#text/plain
 packages/winunits-base/src/comconst.pp svneol=native#text/plain
@@ -5199,6 +5198,7 @@ packages/winunits-base/src/imm.pas svneol=native#text/plain
 packages/winunits-base/src/imm_dyn.pas svneol=native#text/plain
 packages/winunits-base/src/mmsystem.pp svneol=native#text/plain
 packages/winunits-base/src/multimon.pp svneol=native#text/plain
+packages/winunits-base/src/nb30.pp svneol=native#text/plain
 packages/winunits-base/src/ole2.pp svneol=native#text/plain
 packages/winunits-base/src/oleserver.pp svneol=native#text/plain
 packages/winunits-base/src/richedit.pp svneol=native#text/plain

+ 4 - 2
packages/paszlib/src/zipper.pp

@@ -265,7 +265,7 @@ Type
   Protected
     Property HdrPos : Longint Read FHeaderPos Write FheaderPos;
   Public
-    constructor Create;
+    constructor Create(ACollection: TCollection); override;
     function IsDirectory: Boolean;
     function IsLink: Boolean;
     Procedure Assign(Source : TPersistent); override;
@@ -1974,13 +1974,15 @@ begin
     Result:=FDiskFileName;
 end;
 
-constructor TZipFileEntry.Create;
+constructor TZipFileEntry.Create(ACollection: TCollection);
+
 begin
 {$IFDEF UNIX}
   FOS := OS_UNIX;
 {$ELSE}
   FOS := OS_FAT;
 {$ENDIF}
+  inherited create(ACollection);
 end;
 
 function TZipFileEntry.IsDirectory: Boolean;

+ 61 - 61
packages/winunits-base/Makefile

@@ -450,187 +450,187 @@ ifeq ($(FULL_TARGET),mipsel-linux)
 override TARGET_UNITS+=buildwinutilsbase
 endif
 ifeq ($(FULL_TARGET),i386-linux)
-override TARGET_IMPLICITUNITS+=flatsb winver mmsystem comobj comconst commdlg commctrl ole2 activex shellapi shlobj oleserver shfolder richedit imagehlp wininet uxtheme dwmapi multimon htmlhelp winutils comserv winspool imm imm_dyn
+override TARGET_IMPLICITUNITS+=flatsb winver mmsystem comobj comconst commdlg commctrl ole2 activex shellapi shlobj oleserver shfolder richedit imagehlp wininet uxtheme dwmapi multimon htmlhelp winutils comserv winspool imm imm_dyn nb30
 endif
 ifeq ($(FULL_TARGET),i386-go32v2)
-override TARGET_IMPLICITUNITS+=flatsb winver mmsystem comobj comconst commdlg commctrl ole2 activex shellapi shlobj oleserver shfolder richedit imagehlp wininet uxtheme dwmapi multimon htmlhelp winutils comserv winspool imm imm_dyn
+override TARGET_IMPLICITUNITS+=flatsb winver mmsystem comobj comconst commdlg commctrl ole2 activex shellapi shlobj oleserver shfolder richedit imagehlp wininet uxtheme dwmapi multimon htmlhelp winutils comserv winspool imm imm_dyn nb30
 endif
 ifeq ($(FULL_TARGET),i386-win32)
-override TARGET_IMPLICITUNITS+=flatsb winver mmsystem comobj comconst commdlg commctrl ole2 activex shellapi shlobj oleserver shfolder richedit imagehlp wininet uxtheme dwmapi multimon htmlhelp winutils comserv winspool imm imm_dyn
+override TARGET_IMPLICITUNITS+=flatsb winver mmsystem comobj comconst commdlg commctrl ole2 activex shellapi shlobj oleserver shfolder richedit imagehlp wininet uxtheme dwmapi multimon htmlhelp winutils comserv winspool imm imm_dyn nb30
 endif
 ifeq ($(FULL_TARGET),i386-os2)
-override TARGET_IMPLICITUNITS+=flatsb winver mmsystem comobj comconst commdlg commctrl ole2 activex shellapi shlobj oleserver shfolder richedit imagehlp wininet uxtheme dwmapi multimon htmlhelp winutils comserv winspool imm imm_dyn
+override TARGET_IMPLICITUNITS+=flatsb winver mmsystem comobj comconst commdlg commctrl ole2 activex shellapi shlobj oleserver shfolder richedit imagehlp wininet uxtheme dwmapi multimon htmlhelp winutils comserv winspool imm imm_dyn nb30
 endif
 ifeq ($(FULL_TARGET),i386-freebsd)
-override TARGET_IMPLICITUNITS+=flatsb winver mmsystem comobj comconst commdlg commctrl ole2 activex shellapi shlobj oleserver shfolder richedit imagehlp wininet uxtheme dwmapi multimon htmlhelp winutils comserv winspool imm imm_dyn
+override TARGET_IMPLICITUNITS+=flatsb winver mmsystem comobj comconst commdlg commctrl ole2 activex shellapi shlobj oleserver shfolder richedit imagehlp wininet uxtheme dwmapi multimon htmlhelp winutils comserv winspool imm imm_dyn nb30
 endif
 ifeq ($(FULL_TARGET),i386-beos)
-override TARGET_IMPLICITUNITS+=flatsb winver mmsystem comobj comconst commdlg commctrl ole2 activex shellapi shlobj oleserver shfolder richedit imagehlp wininet uxtheme dwmapi multimon htmlhelp winutils comserv winspool imm imm_dyn
+override TARGET_IMPLICITUNITS+=flatsb winver mmsystem comobj comconst commdlg commctrl ole2 activex shellapi shlobj oleserver shfolder richedit imagehlp wininet uxtheme dwmapi multimon htmlhelp winutils comserv winspool imm imm_dyn nb30
 endif
 ifeq ($(FULL_TARGET),i386-haiku)
-override TARGET_IMPLICITUNITS+=flatsb winver mmsystem comobj comconst commdlg commctrl ole2 activex shellapi shlobj oleserver shfolder richedit imagehlp wininet uxtheme dwmapi multimon htmlhelp winutils comserv winspool imm imm_dyn
+override TARGET_IMPLICITUNITS+=flatsb winver mmsystem comobj comconst commdlg commctrl ole2 activex shellapi shlobj oleserver shfolder richedit imagehlp wininet uxtheme dwmapi multimon htmlhelp winutils comserv winspool imm imm_dyn nb30
 endif
 ifeq ($(FULL_TARGET),i386-netbsd)
-override TARGET_IMPLICITUNITS+=flatsb winver mmsystem comobj comconst commdlg commctrl ole2 activex shellapi shlobj oleserver shfolder richedit imagehlp wininet uxtheme dwmapi multimon htmlhelp winutils comserv winspool imm imm_dyn
+override TARGET_IMPLICITUNITS+=flatsb winver mmsystem comobj comconst commdlg commctrl ole2 activex shellapi shlobj oleserver shfolder richedit imagehlp wininet uxtheme dwmapi multimon htmlhelp winutils comserv winspool imm imm_dyn nb30
 endif
 ifeq ($(FULL_TARGET),i386-solaris)
-override TARGET_IMPLICITUNITS+=flatsb winver mmsystem comobj comconst commdlg commctrl ole2 activex shellapi shlobj oleserver shfolder richedit imagehlp wininet uxtheme dwmapi multimon htmlhelp winutils comserv winspool imm imm_dyn
+override TARGET_IMPLICITUNITS+=flatsb winver mmsystem comobj comconst commdlg commctrl ole2 activex shellapi shlobj oleserver shfolder richedit imagehlp wininet uxtheme dwmapi multimon htmlhelp winutils comserv winspool imm imm_dyn nb30
 endif
 ifeq ($(FULL_TARGET),i386-qnx)
-override TARGET_IMPLICITUNITS+=flatsb winver mmsystem comobj comconst commdlg commctrl ole2 activex shellapi shlobj oleserver shfolder richedit imagehlp wininet uxtheme dwmapi multimon htmlhelp winutils comserv winspool imm imm_dyn
+override TARGET_IMPLICITUNITS+=flatsb winver mmsystem comobj comconst commdlg commctrl ole2 activex shellapi shlobj oleserver shfolder richedit imagehlp wininet uxtheme dwmapi multimon htmlhelp winutils comserv winspool imm imm_dyn nb30
 endif
 ifeq ($(FULL_TARGET),i386-netware)
-override TARGET_IMPLICITUNITS+=flatsb winver mmsystem comobj comconst commdlg commctrl ole2 activex shellapi shlobj oleserver shfolder richedit imagehlp wininet uxtheme dwmapi multimon htmlhelp winutils comserv winspool imm imm_dyn
+override TARGET_IMPLICITUNITS+=flatsb winver mmsystem comobj comconst commdlg commctrl ole2 activex shellapi shlobj oleserver shfolder richedit imagehlp wininet uxtheme dwmapi multimon htmlhelp winutils comserv winspool imm imm_dyn nb30
 endif
 ifeq ($(FULL_TARGET),i386-openbsd)
-override TARGET_IMPLICITUNITS+=flatsb winver mmsystem comobj comconst commdlg commctrl ole2 activex shellapi shlobj oleserver shfolder richedit imagehlp wininet uxtheme dwmapi multimon htmlhelp winutils comserv winspool imm imm_dyn
+override TARGET_IMPLICITUNITS+=flatsb winver mmsystem comobj comconst commdlg commctrl ole2 activex shellapi shlobj oleserver shfolder richedit imagehlp wininet uxtheme dwmapi multimon htmlhelp winutils comserv winspool imm imm_dyn nb30
 endif
 ifeq ($(FULL_TARGET),i386-wdosx)
-override TARGET_IMPLICITUNITS+=flatsb winver mmsystem comobj comconst commdlg commctrl ole2 activex shellapi shlobj oleserver shfolder richedit imagehlp wininet uxtheme dwmapi multimon htmlhelp winutils comserv winspool imm imm_dyn
+override TARGET_IMPLICITUNITS+=flatsb winver mmsystem comobj comconst commdlg commctrl ole2 activex shellapi shlobj oleserver shfolder richedit imagehlp wininet uxtheme dwmapi multimon htmlhelp winutils comserv winspool imm imm_dyn nb30
 endif
 ifeq ($(FULL_TARGET),i386-darwin)
-override TARGET_IMPLICITUNITS+=flatsb winver mmsystem comobj comconst commdlg commctrl ole2 activex shellapi shlobj oleserver shfolder richedit imagehlp wininet uxtheme dwmapi multimon htmlhelp winutils comserv winspool imm imm_dyn
+override TARGET_IMPLICITUNITS+=flatsb winver mmsystem comobj comconst commdlg commctrl ole2 activex shellapi shlobj oleserver shfolder richedit imagehlp wininet uxtheme dwmapi multimon htmlhelp winutils comserv winspool imm imm_dyn nb30
 endif
 ifeq ($(FULL_TARGET),i386-emx)
-override TARGET_IMPLICITUNITS+=flatsb winver mmsystem comobj comconst commdlg commctrl ole2 activex shellapi shlobj oleserver shfolder richedit imagehlp wininet uxtheme dwmapi multimon htmlhelp winutils comserv winspool imm imm_dyn
+override TARGET_IMPLICITUNITS+=flatsb winver mmsystem comobj comconst commdlg commctrl ole2 activex shellapi shlobj oleserver shfolder richedit imagehlp wininet uxtheme dwmapi multimon htmlhelp winutils comserv winspool imm imm_dyn nb30
 endif
 ifeq ($(FULL_TARGET),i386-watcom)
-override TARGET_IMPLICITUNITS+=flatsb winver mmsystem comobj comconst commdlg commctrl ole2 activex shellapi shlobj oleserver shfolder richedit imagehlp wininet uxtheme dwmapi multimon htmlhelp winutils comserv winspool imm imm_dyn
+override TARGET_IMPLICITUNITS+=flatsb winver mmsystem comobj comconst commdlg commctrl ole2 activex shellapi shlobj oleserver shfolder richedit imagehlp wininet uxtheme dwmapi multimon htmlhelp winutils comserv winspool imm imm_dyn nb30
 endif
 ifeq ($(FULL_TARGET),i386-netwlibc)
-override TARGET_IMPLICITUNITS+=flatsb winver mmsystem comobj comconst commdlg commctrl ole2 activex shellapi shlobj oleserver shfolder richedit imagehlp wininet uxtheme dwmapi multimon htmlhelp winutils comserv winspool imm imm_dyn
+override TARGET_IMPLICITUNITS+=flatsb winver mmsystem comobj comconst commdlg commctrl ole2 activex shellapi shlobj oleserver shfolder richedit imagehlp wininet uxtheme dwmapi multimon htmlhelp winutils comserv winspool imm imm_dyn nb30
 endif
 ifeq ($(FULL_TARGET),i386-wince)
-override TARGET_IMPLICITUNITS+=flatsb winver mmsystem comobj comconst commdlg commctrl ole2 activex shellapi shlobj oleserver shfolder richedit imagehlp wininet uxtheme dwmapi multimon htmlhelp winutils comserv winspool imm imm_dyn
+override TARGET_IMPLICITUNITS+=flatsb winver mmsystem comobj comconst commdlg commctrl ole2 activex shellapi shlobj oleserver shfolder richedit imagehlp wininet uxtheme dwmapi multimon htmlhelp winutils comserv winspool imm imm_dyn nb30
 endif
 ifeq ($(FULL_TARGET),i386-embedded)
-override TARGET_IMPLICITUNITS+=flatsb winver mmsystem comobj comconst commdlg commctrl ole2 activex shellapi shlobj oleserver shfolder richedit imagehlp wininet uxtheme dwmapi multimon htmlhelp winutils comserv winspool imm imm_dyn
+override TARGET_IMPLICITUNITS+=flatsb winver mmsystem comobj comconst commdlg commctrl ole2 activex shellapi shlobj oleserver shfolder richedit imagehlp wininet uxtheme dwmapi multimon htmlhelp winutils comserv winspool imm imm_dyn nb30
 endif
 ifeq ($(FULL_TARGET),i386-symbian)
-override TARGET_IMPLICITUNITS+=flatsb winver mmsystem comobj comconst commdlg commctrl ole2 activex shellapi shlobj oleserver shfolder richedit imagehlp wininet uxtheme dwmapi multimon htmlhelp winutils comserv winspool imm imm_dyn
+override TARGET_IMPLICITUNITS+=flatsb winver mmsystem comobj comconst commdlg commctrl ole2 activex shellapi shlobj oleserver shfolder richedit imagehlp wininet uxtheme dwmapi multimon htmlhelp winutils comserv winspool imm imm_dyn nb30
 endif
 ifeq ($(FULL_TARGET),i386-nativent)
-override TARGET_IMPLICITUNITS+=flatsb winver mmsystem comobj comconst commdlg commctrl ole2 activex shellapi shlobj oleserver shfolder richedit imagehlp wininet uxtheme dwmapi multimon htmlhelp winutils comserv winspool imm imm_dyn
+override TARGET_IMPLICITUNITS+=flatsb winver mmsystem comobj comconst commdlg commctrl ole2 activex shellapi shlobj oleserver shfolder richedit imagehlp wininet uxtheme dwmapi multimon htmlhelp winutils comserv winspool imm imm_dyn nb30
 endif
 ifeq ($(FULL_TARGET),m68k-linux)
-override TARGET_IMPLICITUNITS+=flatsb winver mmsystem comobj comconst commdlg commctrl ole2 activex shellapi shlobj oleserver shfolder richedit imagehlp wininet uxtheme dwmapi multimon htmlhelp winutils comserv winspool imm imm_dyn
+override TARGET_IMPLICITUNITS+=flatsb winver mmsystem comobj comconst commdlg commctrl ole2 activex shellapi shlobj oleserver shfolder richedit imagehlp wininet uxtheme dwmapi multimon htmlhelp winutils comserv winspool imm imm_dyn nb30
 endif
 ifeq ($(FULL_TARGET),m68k-freebsd)
-override TARGET_IMPLICITUNITS+=flatsb winver mmsystem comobj comconst commdlg commctrl ole2 activex shellapi shlobj oleserver shfolder richedit imagehlp wininet uxtheme dwmapi multimon htmlhelp winutils comserv winspool imm imm_dyn
+override TARGET_IMPLICITUNITS+=flatsb winver mmsystem comobj comconst commdlg commctrl ole2 activex shellapi shlobj oleserver shfolder richedit imagehlp wininet uxtheme dwmapi multimon htmlhelp winutils comserv winspool imm imm_dyn nb30
 endif
 ifeq ($(FULL_TARGET),m68k-netbsd)
-override TARGET_IMPLICITUNITS+=flatsb winver mmsystem comobj comconst commdlg commctrl ole2 activex shellapi shlobj oleserver shfolder richedit imagehlp wininet uxtheme dwmapi multimon htmlhelp winutils comserv winspool imm imm_dyn
+override TARGET_IMPLICITUNITS+=flatsb winver mmsystem comobj comconst commdlg commctrl ole2 activex shellapi shlobj oleserver shfolder richedit imagehlp wininet uxtheme dwmapi multimon htmlhelp winutils comserv winspool imm imm_dyn nb30
 endif
 ifeq ($(FULL_TARGET),m68k-amiga)
-override TARGET_IMPLICITUNITS+=flatsb winver mmsystem comobj comconst commdlg commctrl ole2 activex shellapi shlobj oleserver shfolder richedit imagehlp wininet uxtheme dwmapi multimon htmlhelp winutils comserv winspool imm imm_dyn
+override TARGET_IMPLICITUNITS+=flatsb winver mmsystem comobj comconst commdlg commctrl ole2 activex shellapi shlobj oleserver shfolder richedit imagehlp wininet uxtheme dwmapi multimon htmlhelp winutils comserv winspool imm imm_dyn nb30
 endif
 ifeq ($(FULL_TARGET),m68k-atari)
-override TARGET_IMPLICITUNITS+=flatsb winver mmsystem comobj comconst commdlg commctrl ole2 activex shellapi shlobj oleserver shfolder richedit imagehlp wininet uxtheme dwmapi multimon htmlhelp winutils comserv winspool imm imm_dyn
+override TARGET_IMPLICITUNITS+=flatsb winver mmsystem comobj comconst commdlg commctrl ole2 activex shellapi shlobj oleserver shfolder richedit imagehlp wininet uxtheme dwmapi multimon htmlhelp winutils comserv winspool imm imm_dyn nb30
 endif
 ifeq ($(FULL_TARGET),m68k-openbsd)
-override TARGET_IMPLICITUNITS+=flatsb winver mmsystem comobj comconst commdlg commctrl ole2 activex shellapi shlobj oleserver shfolder richedit imagehlp wininet uxtheme dwmapi multimon htmlhelp winutils comserv winspool imm imm_dyn
+override TARGET_IMPLICITUNITS+=flatsb winver mmsystem comobj comconst commdlg commctrl ole2 activex shellapi shlobj oleserver shfolder richedit imagehlp wininet uxtheme dwmapi multimon htmlhelp winutils comserv winspool imm imm_dyn nb30
 endif
 ifeq ($(FULL_TARGET),m68k-palmos)
-override TARGET_IMPLICITUNITS+=flatsb winver mmsystem comobj comconst commdlg commctrl ole2 activex shellapi shlobj oleserver shfolder richedit imagehlp wininet uxtheme dwmapi multimon htmlhelp winutils comserv winspool imm imm_dyn
+override TARGET_IMPLICITUNITS+=flatsb winver mmsystem comobj comconst commdlg commctrl ole2 activex shellapi shlobj oleserver shfolder richedit imagehlp wininet uxtheme dwmapi multimon htmlhelp winutils comserv winspool imm imm_dyn nb30
 endif
 ifeq ($(FULL_TARGET),m68k-embedded)
-override TARGET_IMPLICITUNITS+=flatsb winver mmsystem comobj comconst commdlg commctrl ole2 activex shellapi shlobj oleserver shfolder richedit imagehlp wininet uxtheme dwmapi multimon htmlhelp winutils comserv winspool imm imm_dyn
+override TARGET_IMPLICITUNITS+=flatsb winver mmsystem comobj comconst commdlg commctrl ole2 activex shellapi shlobj oleserver shfolder richedit imagehlp wininet uxtheme dwmapi multimon htmlhelp winutils comserv winspool imm imm_dyn nb30
 endif
 ifeq ($(FULL_TARGET),powerpc-linux)
-override TARGET_IMPLICITUNITS+=flatsb winver mmsystem comobj comconst commdlg commctrl ole2 activex shellapi shlobj oleserver shfolder richedit imagehlp wininet uxtheme dwmapi multimon htmlhelp winutils comserv winspool imm imm_dyn
+override TARGET_IMPLICITUNITS+=flatsb winver mmsystem comobj comconst commdlg commctrl ole2 activex shellapi shlobj oleserver shfolder richedit imagehlp wininet uxtheme dwmapi multimon htmlhelp winutils comserv winspool imm imm_dyn nb30
 endif
 ifeq ($(FULL_TARGET),powerpc-netbsd)
-override TARGET_IMPLICITUNITS+=flatsb winver mmsystem comobj comconst commdlg commctrl ole2 activex shellapi shlobj oleserver shfolder richedit imagehlp wininet uxtheme dwmapi multimon htmlhelp winutils comserv winspool imm imm_dyn
+override TARGET_IMPLICITUNITS+=flatsb winver mmsystem comobj comconst commdlg commctrl ole2 activex shellapi shlobj oleserver shfolder richedit imagehlp wininet uxtheme dwmapi multimon htmlhelp winutils comserv winspool imm imm_dyn nb30
 endif
 ifeq ($(FULL_TARGET),powerpc-amiga)
-override TARGET_IMPLICITUNITS+=flatsb winver mmsystem comobj comconst commdlg commctrl ole2 activex shellapi shlobj oleserver shfolder richedit imagehlp wininet uxtheme dwmapi multimon htmlhelp winutils comserv winspool imm imm_dyn
+override TARGET_IMPLICITUNITS+=flatsb winver mmsystem comobj comconst commdlg commctrl ole2 activex shellapi shlobj oleserver shfolder richedit imagehlp wininet uxtheme dwmapi multimon htmlhelp winutils comserv winspool imm imm_dyn nb30
 endif
 ifeq ($(FULL_TARGET),powerpc-macos)
-override TARGET_IMPLICITUNITS+=flatsb winver mmsystem comobj comconst commdlg commctrl ole2 activex shellapi shlobj oleserver shfolder richedit imagehlp wininet uxtheme dwmapi multimon htmlhelp winutils comserv winspool imm imm_dyn
+override TARGET_IMPLICITUNITS+=flatsb winver mmsystem comobj comconst commdlg commctrl ole2 activex shellapi shlobj oleserver shfolder richedit imagehlp wininet uxtheme dwmapi multimon htmlhelp winutils comserv winspool imm imm_dyn nb30
 endif
 ifeq ($(FULL_TARGET),powerpc-darwin)
-override TARGET_IMPLICITUNITS+=flatsb winver mmsystem comobj comconst commdlg commctrl ole2 activex shellapi shlobj oleserver shfolder richedit imagehlp wininet uxtheme dwmapi multimon htmlhelp winutils comserv winspool imm imm_dyn
+override TARGET_IMPLICITUNITS+=flatsb winver mmsystem comobj comconst commdlg commctrl ole2 activex shellapi shlobj oleserver shfolder richedit imagehlp wininet uxtheme dwmapi multimon htmlhelp winutils comserv winspool imm imm_dyn nb30
 endif
 ifeq ($(FULL_TARGET),powerpc-morphos)
-override TARGET_IMPLICITUNITS+=flatsb winver mmsystem comobj comconst commdlg commctrl ole2 activex shellapi shlobj oleserver shfolder richedit imagehlp wininet uxtheme dwmapi multimon htmlhelp winutils comserv winspool imm imm_dyn
+override TARGET_IMPLICITUNITS+=flatsb winver mmsystem comobj comconst commdlg commctrl ole2 activex shellapi shlobj oleserver shfolder richedit imagehlp wininet uxtheme dwmapi multimon htmlhelp winutils comserv winspool imm imm_dyn nb30
 endif
 ifeq ($(FULL_TARGET),powerpc-embedded)
-override TARGET_IMPLICITUNITS+=flatsb winver mmsystem comobj comconst commdlg commctrl ole2 activex shellapi shlobj oleserver shfolder richedit imagehlp wininet uxtheme dwmapi multimon htmlhelp winutils comserv winspool imm imm_dyn
+override TARGET_IMPLICITUNITS+=flatsb winver mmsystem comobj comconst commdlg commctrl ole2 activex shellapi shlobj oleserver shfolder richedit imagehlp wininet uxtheme dwmapi multimon htmlhelp winutils comserv winspool imm imm_dyn nb30
 endif
 ifeq ($(FULL_TARGET),sparc-linux)
-override TARGET_IMPLICITUNITS+=flatsb winver mmsystem comobj comconst commdlg commctrl ole2 activex shellapi shlobj oleserver shfolder richedit imagehlp wininet uxtheme dwmapi multimon htmlhelp winutils comserv winspool imm imm_dyn
+override TARGET_IMPLICITUNITS+=flatsb winver mmsystem comobj comconst commdlg commctrl ole2 activex shellapi shlobj oleserver shfolder richedit imagehlp wininet uxtheme dwmapi multimon htmlhelp winutils comserv winspool imm imm_dyn nb30
 endif
 ifeq ($(FULL_TARGET),sparc-netbsd)
-override TARGET_IMPLICITUNITS+=flatsb winver mmsystem comobj comconst commdlg commctrl ole2 activex shellapi shlobj oleserver shfolder richedit imagehlp wininet uxtheme dwmapi multimon htmlhelp winutils comserv winspool imm imm_dyn
+override TARGET_IMPLICITUNITS+=flatsb winver mmsystem comobj comconst commdlg commctrl ole2 activex shellapi shlobj oleserver shfolder richedit imagehlp wininet uxtheme dwmapi multimon htmlhelp winutils comserv winspool imm imm_dyn nb30
 endif
 ifeq ($(FULL_TARGET),sparc-solaris)
-override TARGET_IMPLICITUNITS+=flatsb winver mmsystem comobj comconst commdlg commctrl ole2 activex shellapi shlobj oleserver shfolder richedit imagehlp wininet uxtheme dwmapi multimon htmlhelp winutils comserv winspool imm imm_dyn
+override TARGET_IMPLICITUNITS+=flatsb winver mmsystem comobj comconst commdlg commctrl ole2 activex shellapi shlobj oleserver shfolder richedit imagehlp wininet uxtheme dwmapi multimon htmlhelp winutils comserv winspool imm imm_dyn nb30
 endif
 ifeq ($(FULL_TARGET),sparc-embedded)
-override TARGET_IMPLICITUNITS+=flatsb winver mmsystem comobj comconst commdlg commctrl ole2 activex shellapi shlobj oleserver shfolder richedit imagehlp wininet uxtheme dwmapi multimon htmlhelp winutils comserv winspool imm imm_dyn
+override TARGET_IMPLICITUNITS+=flatsb winver mmsystem comobj comconst commdlg commctrl ole2 activex shellapi shlobj oleserver shfolder richedit imagehlp wininet uxtheme dwmapi multimon htmlhelp winutils comserv winspool imm imm_dyn nb30
 endif
 ifeq ($(FULL_TARGET),x86_64-linux)
-override TARGET_IMPLICITUNITS+=flatsb winver mmsystem comobj comconst commdlg commctrl ole2 activex shellapi shlobj oleserver shfolder richedit imagehlp wininet uxtheme dwmapi multimon htmlhelp winutils comserv winspool imm imm_dyn
+override TARGET_IMPLICITUNITS+=flatsb winver mmsystem comobj comconst commdlg commctrl ole2 activex shellapi shlobj oleserver shfolder richedit imagehlp wininet uxtheme dwmapi multimon htmlhelp winutils comserv winspool imm imm_dyn nb30
 endif
 ifeq ($(FULL_TARGET),x86_64-freebsd)
-override TARGET_IMPLICITUNITS+=flatsb winver mmsystem comobj comconst commdlg commctrl ole2 activex shellapi shlobj oleserver shfolder richedit imagehlp wininet uxtheme dwmapi multimon htmlhelp winutils comserv winspool imm imm_dyn
+override TARGET_IMPLICITUNITS+=flatsb winver mmsystem comobj comconst commdlg commctrl ole2 activex shellapi shlobj oleserver shfolder richedit imagehlp wininet uxtheme dwmapi multimon htmlhelp winutils comserv winspool imm imm_dyn nb30
 endif
 ifeq ($(FULL_TARGET),x86_64-solaris)
-override TARGET_IMPLICITUNITS+=flatsb winver mmsystem comobj comconst commdlg commctrl ole2 activex shellapi shlobj oleserver shfolder richedit imagehlp wininet uxtheme dwmapi multimon htmlhelp winutils comserv winspool imm imm_dyn
+override TARGET_IMPLICITUNITS+=flatsb winver mmsystem comobj comconst commdlg commctrl ole2 activex shellapi shlobj oleserver shfolder richedit imagehlp wininet uxtheme dwmapi multimon htmlhelp winutils comserv winspool imm imm_dyn nb30
 endif
 ifeq ($(FULL_TARGET),x86_64-darwin)
-override TARGET_IMPLICITUNITS+=flatsb winver mmsystem comobj comconst commdlg commctrl ole2 activex shellapi shlobj oleserver shfolder richedit imagehlp wininet uxtheme dwmapi multimon htmlhelp winutils comserv winspool imm imm_dyn
+override TARGET_IMPLICITUNITS+=flatsb winver mmsystem comobj comconst commdlg commctrl ole2 activex shellapi shlobj oleserver shfolder richedit imagehlp wininet uxtheme dwmapi multimon htmlhelp winutils comserv winspool imm imm_dyn nb30
 endif
 ifeq ($(FULL_TARGET),x86_64-win64)
-override TARGET_IMPLICITUNITS+=flatsb winver mmsystem comobj comconst commdlg commctrl ole2 activex shellapi shlobj oleserver shfolder richedit imagehlp wininet uxtheme dwmapi multimon htmlhelp winutils comserv winspool imm imm_dyn
+override TARGET_IMPLICITUNITS+=flatsb winver mmsystem comobj comconst commdlg commctrl ole2 activex shellapi shlobj oleserver shfolder richedit imagehlp wininet uxtheme dwmapi multimon htmlhelp winutils comserv winspool imm imm_dyn nb30
 endif
 ifeq ($(FULL_TARGET),x86_64-embedded)
-override TARGET_IMPLICITUNITS+=flatsb winver mmsystem comobj comconst commdlg commctrl ole2 activex shellapi shlobj oleserver shfolder richedit imagehlp wininet uxtheme dwmapi multimon htmlhelp winutils comserv winspool imm imm_dyn
+override TARGET_IMPLICITUNITS+=flatsb winver mmsystem comobj comconst commdlg commctrl ole2 activex shellapi shlobj oleserver shfolder richedit imagehlp wininet uxtheme dwmapi multimon htmlhelp winutils comserv winspool imm imm_dyn nb30
 endif
 ifeq ($(FULL_TARGET),arm-linux)
-override TARGET_IMPLICITUNITS+=flatsb winver mmsystem comobj comconst commdlg commctrl ole2 activex shellapi shlobj oleserver shfolder richedit imagehlp wininet uxtheme dwmapi multimon htmlhelp winutils comserv winspool imm imm_dyn
+override TARGET_IMPLICITUNITS+=flatsb winver mmsystem comobj comconst commdlg commctrl ole2 activex shellapi shlobj oleserver shfolder richedit imagehlp wininet uxtheme dwmapi multimon htmlhelp winutils comserv winspool imm imm_dyn nb30
 endif
 ifeq ($(FULL_TARGET),arm-palmos)
-override TARGET_IMPLICITUNITS+=flatsb winver mmsystem comobj comconst commdlg commctrl ole2 activex shellapi shlobj oleserver shfolder richedit imagehlp wininet uxtheme dwmapi multimon htmlhelp winutils comserv winspool imm imm_dyn
+override TARGET_IMPLICITUNITS+=flatsb winver mmsystem comobj comconst commdlg commctrl ole2 activex shellapi shlobj oleserver shfolder richedit imagehlp wininet uxtheme dwmapi multimon htmlhelp winutils comserv winspool imm imm_dyn nb30
 endif
 ifeq ($(FULL_TARGET),arm-darwin)
-override TARGET_IMPLICITUNITS+=flatsb winver mmsystem comobj comconst commdlg commctrl ole2 activex shellapi shlobj oleserver shfolder richedit imagehlp wininet uxtheme dwmapi multimon htmlhelp winutils comserv winspool imm imm_dyn
+override TARGET_IMPLICITUNITS+=flatsb winver mmsystem comobj comconst commdlg commctrl ole2 activex shellapi shlobj oleserver shfolder richedit imagehlp wininet uxtheme dwmapi multimon htmlhelp winutils comserv winspool imm imm_dyn nb30
 endif
 ifeq ($(FULL_TARGET),arm-wince)
-override TARGET_IMPLICITUNITS+=flatsb winver mmsystem comobj comconst commdlg commctrl ole2 activex shellapi shlobj oleserver shfolder richedit imagehlp wininet uxtheme dwmapi multimon htmlhelp winutils comserv winspool imm imm_dyn
+override TARGET_IMPLICITUNITS+=flatsb winver mmsystem comobj comconst commdlg commctrl ole2 activex shellapi shlobj oleserver shfolder richedit imagehlp wininet uxtheme dwmapi multimon htmlhelp winutils comserv winspool imm imm_dyn nb30
 endif
 ifeq ($(FULL_TARGET),arm-gba)
-override TARGET_IMPLICITUNITS+=flatsb winver mmsystem comobj comconst commdlg commctrl ole2 activex shellapi shlobj oleserver shfolder richedit imagehlp wininet uxtheme dwmapi multimon htmlhelp winutils comserv winspool imm imm_dyn
+override TARGET_IMPLICITUNITS+=flatsb winver mmsystem comobj comconst commdlg commctrl ole2 activex shellapi shlobj oleserver shfolder richedit imagehlp wininet uxtheme dwmapi multimon htmlhelp winutils comserv winspool imm imm_dyn nb30
 endif
 ifeq ($(FULL_TARGET),arm-nds)
-override TARGET_IMPLICITUNITS+=flatsb winver mmsystem comobj comconst commdlg commctrl ole2 activex shellapi shlobj oleserver shfolder richedit imagehlp wininet uxtheme dwmapi multimon htmlhelp winutils comserv winspool imm imm_dyn
+override TARGET_IMPLICITUNITS+=flatsb winver mmsystem comobj comconst commdlg commctrl ole2 activex shellapi shlobj oleserver shfolder richedit imagehlp wininet uxtheme dwmapi multimon htmlhelp winutils comserv winspool imm imm_dyn nb30
 endif
 ifeq ($(FULL_TARGET),arm-embedded)
-override TARGET_IMPLICITUNITS+=flatsb winver mmsystem comobj comconst commdlg commctrl ole2 activex shellapi shlobj oleserver shfolder richedit imagehlp wininet uxtheme dwmapi multimon htmlhelp winutils comserv winspool imm imm_dyn
+override TARGET_IMPLICITUNITS+=flatsb winver mmsystem comobj comconst commdlg commctrl ole2 activex shellapi shlobj oleserver shfolder richedit imagehlp wininet uxtheme dwmapi multimon htmlhelp winutils comserv winspool imm imm_dyn nb30
 endif
 ifeq ($(FULL_TARGET),arm-symbian)
-override TARGET_IMPLICITUNITS+=flatsb winver mmsystem comobj comconst commdlg commctrl ole2 activex shellapi shlobj oleserver shfolder richedit imagehlp wininet uxtheme dwmapi multimon htmlhelp winutils comserv winspool imm imm_dyn
+override TARGET_IMPLICITUNITS+=flatsb winver mmsystem comobj comconst commdlg commctrl ole2 activex shellapi shlobj oleserver shfolder richedit imagehlp wininet uxtheme dwmapi multimon htmlhelp winutils comserv winspool imm imm_dyn nb30
 endif
 ifeq ($(FULL_TARGET),powerpc64-linux)
-override TARGET_IMPLICITUNITS+=flatsb winver mmsystem comobj comconst commdlg commctrl ole2 activex shellapi shlobj oleserver shfolder richedit imagehlp wininet uxtheme dwmapi multimon htmlhelp winutils comserv winspool imm imm_dyn
+override TARGET_IMPLICITUNITS+=flatsb winver mmsystem comobj comconst commdlg commctrl ole2 activex shellapi shlobj oleserver shfolder richedit imagehlp wininet uxtheme dwmapi multimon htmlhelp winutils comserv winspool imm imm_dyn nb30
 endif
 ifeq ($(FULL_TARGET),powerpc64-darwin)
-override TARGET_IMPLICITUNITS+=flatsb winver mmsystem comobj comconst commdlg commctrl ole2 activex shellapi shlobj oleserver shfolder richedit imagehlp wininet uxtheme dwmapi multimon htmlhelp winutils comserv winspool imm imm_dyn
+override TARGET_IMPLICITUNITS+=flatsb winver mmsystem comobj comconst commdlg commctrl ole2 activex shellapi shlobj oleserver shfolder richedit imagehlp wininet uxtheme dwmapi multimon htmlhelp winutils comserv winspool imm imm_dyn nb30
 endif
 ifeq ($(FULL_TARGET),powerpc64-embedded)
-override TARGET_IMPLICITUNITS+=flatsb winver mmsystem comobj comconst commdlg commctrl ole2 activex shellapi shlobj oleserver shfolder richedit imagehlp wininet uxtheme dwmapi multimon htmlhelp winutils comserv winspool imm imm_dyn
+override TARGET_IMPLICITUNITS+=flatsb winver mmsystem comobj comconst commdlg commctrl ole2 activex shellapi shlobj oleserver shfolder richedit imagehlp wininet uxtheme dwmapi multimon htmlhelp winutils comserv winspool imm imm_dyn nb30
 endif
 ifeq ($(FULL_TARGET),avr-embedded)
-override TARGET_IMPLICITUNITS+=flatsb winver mmsystem comobj comconst commdlg commctrl ole2 activex shellapi shlobj oleserver shfolder richedit imagehlp wininet uxtheme dwmapi multimon htmlhelp winutils comserv winspool imm imm_dyn
+override TARGET_IMPLICITUNITS+=flatsb winver mmsystem comobj comconst commdlg commctrl ole2 activex shellapi shlobj oleserver shfolder richedit imagehlp wininet uxtheme dwmapi multimon htmlhelp winutils comserv winspool imm imm_dyn nb30
 endif
 ifeq ($(FULL_TARGET),armeb-linux)
-override TARGET_IMPLICITUNITS+=flatsb winver mmsystem comobj comconst commdlg commctrl ole2 activex shellapi shlobj oleserver shfolder richedit imagehlp wininet uxtheme dwmapi multimon htmlhelp winutils comserv winspool imm imm_dyn
+override TARGET_IMPLICITUNITS+=flatsb winver mmsystem comobj comconst commdlg commctrl ole2 activex shellapi shlobj oleserver shfolder richedit imagehlp wininet uxtheme dwmapi multimon htmlhelp winutils comserv winspool imm imm_dyn nb30
 endif
 ifeq ($(FULL_TARGET),armeb-embedded)
-override TARGET_IMPLICITUNITS+=flatsb winver mmsystem comobj comconst commdlg commctrl ole2 activex shellapi shlobj oleserver shfolder richedit imagehlp wininet uxtheme dwmapi multimon htmlhelp winutils comserv winspool imm imm_dyn
+override TARGET_IMPLICITUNITS+=flatsb winver mmsystem comobj comconst commdlg commctrl ole2 activex shellapi shlobj oleserver shfolder richedit imagehlp wininet uxtheme dwmapi multimon htmlhelp winutils comserv winspool imm imm_dyn nb30
 endif
 ifeq ($(FULL_TARGET),mipsel-linux)
-override TARGET_IMPLICITUNITS+=flatsb winver mmsystem comobj comconst commdlg commctrl ole2 activex shellapi shlobj oleserver shfolder richedit imagehlp wininet uxtheme dwmapi multimon htmlhelp winutils comserv winspool imm imm_dyn
+override TARGET_IMPLICITUNITS+=flatsb winver mmsystem comobj comconst commdlg commctrl ole2 activex shellapi shlobj oleserver shfolder richedit imagehlp wininet uxtheme dwmapi multimon htmlhelp winutils comserv winspool imm imm_dyn nb30
 endif
 ifeq ($(FULL_TARGET),i386-linux)
 override TARGET_RSTS+=jwawintype comconst

+ 1 - 1
packages/winunits-base/Makefile.fpc

@@ -12,7 +12,7 @@ packages=fcl-registry fcl-base
 [target]
 units=buildwinutilsbase
 implicitunits=flatsb winver mmsystem comobj comconst commdlg commctrl ole2 activex shellapi shlobj oleserver \
-	shfolder richedit imagehlp wininet uxtheme dwmapi multimon htmlhelp winutils comserv winspool imm imm_dyn
+	shfolder richedit imagehlp wininet uxtheme dwmapi multimon htmlhelp winutils comserv winspool imm imm_dyn nb30
 
 examples=examples
 

+ 1 - 1
packages/winunits-base/src/buildwinutilsbase.pp

@@ -24,7 +24,7 @@ uses
     flatsb, winver, mmsystem, comconst, commctrl, comobj, commdlg,
     ole2, activex, shellapi, shlobj, oleserver,  shfolder, richedit,
     imagehlp, wininet, uxtheme, dwmapi, multimon, htmlhelp, winutils,
-    comserv, winspool, imm, imm_dyn;
+    comserv, winspool, imm, imm_dyn, nb30;
 
 implementation
 

+ 195 - 0
packages/winunits-base/src/commctrl.pp

@@ -9922,6 +9922,152 @@ Function LoadIconWithScaleDown( hinst:HINST; pszName:LPCWStr;cx:cint;cy:cint;var
 function DrawShadowText(hdc:HDC;pszText:LPCWSTR;cch:UINT;prc:PRECT;dwFlags:DWORD;crText:COLORREF;crShadow:COLORREF;ixOffset:cint;iyOffset:cint):cint; stdcall; external commctrldll name 'DrawShadowText';
 {$ENDIF}
 
+// ===================== Task Dialog =========================
+
+Type
+  PFTASKDIALOGCALLBACK = function(hwnd: HWND; msg: UINT; wParam: WPARAM; lParam: LPARAM; lpRefData: LONG_PTR): HRESULT; stdcall;
+
+  // _TASKDIALOG_FLAGS enum
+const
+  TDF_ENABLE_HYPERLINKS               = $0001;
+  TDF_USE_HICON_MAIN                  = $0002;
+  TDF_USE_HICON_FOOTER                = $0004;
+  TDF_ALLOW_DIALOG_CANCELLATION       = $0008;
+  TDF_USE_COMMAND_LINKS               = $0010;
+  TDF_USE_COMMAND_LINKS_NO_ICON       = $0020;
+  TDF_EXPAND_FOOTER_AREA              = $0040;
+  TDF_EXPANDED_BY_DEFAULT             = $0080;
+  TDF_VERIFICATION_FLAG_CHECKED       = $0100;
+  TDF_SHOW_PROGRESS_BAR               = $0200;
+  TDF_SHOW_MARQUEE_PROGRESS_BAR       = $0400;
+  TDF_CALLBACK_TIMER                  = $0800;
+  TDF_POSITION_RELATIVE_TO_WINDOW     = $1000;
+  TDF_RTL_LAYOUT                      = $2000;
+  TDF_NO_DEFAULT_RADIO_BUTTON         = $4000;
+  TDF_CAN_BE_MINIMIZED                = $8000;
+
+type
+  TASKDIALOG_FLAGS = Integer;                         // Note: _TASKDIALOG_FLAGS is an int
+
+  // _TASKDIALOG_MESSAGES enum
+const
+  TDM_NAVIGATE_PAGE                   = WM_USER+101;
+  TDM_CLICK_BUTTON                    = WM_USER+102; // wParam = Button ID
+  TDM_SET_MARQUEE_PROGRESS_BAR        = WM_USER+103; // wParam = 0 (nonMarque) wParam != 0 (Marquee)
+  TDM_SET_PROGRESS_BAR_STATE          = WM_USER+104; // wParam = new progress state
+  TDM_SET_PROGRESS_BAR_RANGE          = WM_USER+105; // lParam = MAKELPARAM(nMinRange, nMaxRange)
+  TDM_SET_PROGRESS_BAR_POS            = WM_USER+106; // wParam = new position
+  TDM_SET_PROGRESS_BAR_MARQUEE        = WM_USER+107; // wParam = 0 (stop marquee), wParam != 0 (start marquee), lparam = speed (milliseconds between repaints)
+  TDM_SET_ELEMENT_TEXT                = WM_USER+108; // wParam = element (TASKDIALOG_ELEMENTS), lParam = new element text (LPCWSTR)
+  TDM_CLICK_RADIO_BUTTON              = WM_USER+110; // wParam = Radio Button ID
+  TDM_ENABLE_BUTTON                   = WM_USER+111; // lParam = 0 (disable), lParam != 0 (enable), wParam = Button ID
+  TDM_ENABLE_RADIO_BUTTON             = WM_USER+112; // lParam = 0 (disable), lParam != 0 (enable), wParam = Radio Button ID
+  TDM_CLICK_VERIFICATION              = WM_USER+113; // wParam = 0 (unchecked), 1 (checked), lParam = 1 (set key focus)
+  TDM_UPDATE_ELEMENT_TEXT             = WM_USER+114; // wParam = element (TASKDIALOG_ELEMENTS), lParam = new element text (LPCWSTR)
+  TDM_SET_BUTTON_ELEVATION_REQUIRED_STATE = WM_USER+115; // wParam = Button ID, lParam = 0 (elevation not required), lParam != 0 (elevation required)
+  TDM_UPDATE_ICON                     = WM_USER+116; // wParam = icon element (TASKDIALOG_ICON_ELEMENTS), lParam = new icon (hIcon if TDF_USE_HICON_* was set, PCWSTR otherwise)
+
+  // _TASKDIALOG_NOTIFICATIONS enum
+const
+  TDN_CREATED                         = 0;
+  TDN_NAVIGATED                       = 1;
+  TDN_BUTTON_CLICKED                  = 2;            // wParam = Button ID
+  TDN_HYPERLINK_CLICKED               = 3;            // lParam = (LPCWSTR)pszHREF
+  TDN_TIMER                           = 4;            // wParam = Milliseconds since dialog created or timer reset
+  TDN_DESTROYED                       = 5;
+  TDN_RADIO_BUTTON_CLICKED            = 6;            // wParam = Radio Button ID
+  TDN_DIALOG_CONSTRUCTED              = 7;
+  TDN_VERIFICATION_CLICKED            = 8;             // wParam = 1 if checkbox checked, 0 if not, lParam is unused and always 0
+  TDN_HELP                            = 9;
+  TDN_EXPANDO_BUTTON_CLICKED          = 10;           // wParam = 0 (dialog is now collapsed), wParam != 0 (dialog is now expanded)
+
+type
+  _TASKDIALOG_BUTTON = packed record
+      nButtonID: Integer;
+      pszButtonText: PCWSTR;
+  end;
+  TASKDIALOG_BUTTON = _TASKDIALOG_BUTTON;
+  TTASKDIALOG_BUTTON = TASKDIALOG_BUTTON;
+  PTASKDIALOG_BUTTON = ^TASKDIALOG_BUTTON;
+
+  // _TASKDIALOG_ELEMENTS enum
+const
+  TDE_CONTENT              = 0;
+  TDE_EXPANDED_INFORMATION = 1;
+  TDE_FOOTER               = 2;
+  TDE_MAIN_INSTRUCTION     = 3;
+
+  // _TASKDIALOG_ICON_ELEMENTS enum
+  TDIE_ICON_MAIN   = 0;
+  TDIE_ICON_FOOTER = 1;
+
+  TD_WARNING_ICON         = MAKEINTRESOURCEW(Word(-1));
+  TD_ERROR_ICON           = MAKEINTRESOURCEW(Word(-2));
+  TD_INFORMATION_ICON     = MAKEINTRESOURCEW(Word(-3));
+  TD_SHIELD_ICON          = MAKEINTRESOURCEW(Word(-4));
+  TD_SHIELD_GRADIENT_ICON = MAKEINTRESOURCEW(Word(-5));
+  TD_SHIELD_WARNING_ICON  = MAKEINTRESOURCEW(Word(-6));
+  TD_SHIELD_ERROR_ICON    = MAKEINTRESOURCEW(Word(-7));
+  TD_SHIELD_OK_ICON       = MAKEINTRESOURCEW(Word(-8));
+  TD_SHIELD_GRAY_ICON     = MAKEINTRESOURCEW(Word(-9));
+
+  // _TASKDIALOG_COMMON_BUTTON_FLAGS enum
+  TDCBF_OK_BUTTON            = $0001; // selected control return value IDOK
+  TDCBF_YES_BUTTON           = $0002; // selected control return value IDYES
+  TDCBF_NO_BUTTON            = $0004; // selected control return value IDNO
+  TDCBF_CANCEL_BUTTON        = $0008; // selected control return value IDCANCEL
+  TDCBF_RETRY_BUTTON         = $0010; // selected control return value IDRETRY
+  TDCBF_CLOSE_BUTTON         = $0020; // selected control return value IDCLOSE
+
+type
+  TASKDIALOG_COMMON_BUTTON_FLAGS = Integer;           // Note: _TASKDIALOG_COMMON_BUTTON_FLAGS is an int
+
+  _TASKDIALOGCONFIG = packed record
+    cbSize: UINT;
+    hwndParent: HWND;
+    hInstance: HINST;                                 // used for MAKEINTRESOURCE() strings
+    dwFlags: TASKDIALOG_FLAGS;                        // TASKDIALOG_FLAGS (TDF_XXX) flags
+    dwCommonButtons: TASKDIALOG_COMMON_BUTTON_FLAGS;  // TASKDIALOG_COMMON_BUTTON (TDCBF_XXX) flags
+    pszWindowTitle: PCWSTR;                           // string or MAKEINTRESOURCE()
+    case PtrInt of
+      0: (hMainIcon: HICON);
+      1: (
+        pszMainIcon: PCWSTR;
+        pszMainInstruction: PCWSTR;
+        pszContent: PCWSTR;
+        cButtons: UINT;
+        pButtons: PTASKDIALOG_BUTTON;
+        nDefaultButton: Integer;
+        cRadioButtons: UINT;
+        pRadioButtons: PTASKDIALOG_BUTTON;
+        nDefaultRadioButton: Integer;
+        pszVerificationText: PCWSTR;
+        pszExpandedInformation: PCWSTR;
+        pszExpandedControlText: PCWSTR;
+        pszCollapsedControlText: PCWSTR;
+        case PtrInt of
+          0: (hFooterIcon: HICON);
+          1: (
+            pszFooterIcon: PCWSTR;
+            pszFooter: PCWSTR;
+            pfCallback: PFTASKDIALOGCALLBACK;
+            lpCallbackData: LONG_PTR;
+            cxWidth: UINT;                                // width of the Task Dialog's client area in DLU's. If 0, Task Dialog will calculate the ideal width.
+          );
+      );
+  end;
+  TASKDIALOGCONFIG = _TASKDIALOGCONFIG;
+  PTASKDIALOGCONFIG = ^TASKDIALOGCONFIG;
+  TTASKDIALOGCONFIG = TASKDIALOGCONFIG;
+
+var
+  TaskDialogIndirect: function(const pTaskConfig: PTASKDIALOGCONFIG; pnButton: PInteger; pnRadioButton: PInteger; pfVerificationFlagChecked: PBOOL): HRESULT; stdcall;
+  TaskDialog: function(hwndParent: HWND; hInstance: HINST; pszWindowTitle: PCWSTR; pszMainInstruction: PCWSTR; pszContent: PCWSTR;
+      dwCommonButtons: TASKDIALOG_COMMON_BUTTON_FLAGS; pszIcon: PCWSTR; pnButton: PInteger): HRESULT; stdcall;
+
+
+// ==================== End TaskDialog =======================
+
 
 IMPLEMENTATION
 
@@ -13552,4 +13698,53 @@ begin
  Result:=HFONT(SendMessage(hdp, DTM_GETMCFONT, 0, 0));
 end;
 
+const
+  comctl32lib = 'comctl32.dll';
+
+var
+  comctl32handle: THandle = 0;
+
+function _TaskDialogIndirect(const pTaskConfig: PTASKDIALOGCONFIG; pnButton: PInteger; pnRadioButton: PInteger; pfVerificationFlagChecked: PBOOL): HRESULT; stdcall;
+begin
+  Result := E_NOTIMPL;
+end;
+
+function _TaskDialog(hwndParent: HWND; hInstance: HINST; pszWindowTitle: PCWSTR; pszMainInstruction: PCWSTR; pszContent: PCWSTR;
+    dwCommonButtons: TASKDIALOG_COMMON_BUTTON_FLAGS; pszIcon: PCWSTR; pnButton: PInteger): HRESULT; stdcall;
+begin
+  Result := E_NOTIMPL;
+end;
+
+procedure Initialize;
+var
+  p: Pointer;
+begin
+  // Defaults
+  Pointer(TaskDialogIndirect) := @_TaskDialogIndirect;
+  Pointer(TaskDialog) := @_TaskDialog;
+
+  comctl32handle := LoadLibrary(comctl32lib);
+  if comctl32handle <> 0 then
+  begin
+    p := GetProcAddress(comctl32handle, 'TaskDialogIndirect');
+    if p <> nil
+    then Pointer(TaskDialogIndirect) := p;
+
+    p := GetProcAddress(comctl32handle, 'TaskDialog');
+    if p <> nil
+    then Pointer(TaskDialog) := p;
+  end;
+end;
+
+procedure Finalize;
+begin
+  if comctl32handle <> 0 then
+    FreeLibrary(comctl32handle);
+  comctl32handle := 0;
+end;
+
+initialization
+  Initialize;
+Finalization
+  Finalize;  
 End.

+ 0 - 0
packages/winunits-base/src/Nb30.pp → packages/winunits-base/src/nb30.pp


+ 252 - 3
packages/winunits-base/src/shlobj.pp

@@ -198,6 +198,9 @@ Const
    CLSID_PersistPropset                : TGUID = '{fb8f0821-0164-101b-84ed-08002b2ec713}';
    CLSID_ConvertVBX                    : TGUID = '{fb8f0822-0164-101b-84ed-08002b2ec713}';
    CLSID_InternetShortcut              : TGUID = '{fbf23b40-e3f0-101b-8488-00aa003e56f8}';
+   CLSID_ShellItem                     : TGUID = '{9ac9fbe1-e0a2-4ad6-b4ee-e212013ea917}';
+   CLSID_FileOpenDialog                : TGUID = '{DC1C5A9C-E88A-4dde-A5A1-60F82A20AEF7}';
+   CLSID_FileSaveDialog                : TGUID = '{C0B4E2F3-BA21-4773-8DBA-335EC946EB8B}';
 
 Const
   SV2GV_CURRENTVIEW  = DWORD(-1);
@@ -516,9 +519,14 @@ Const
   QITIPF_USESLOWTIP       = $00000008;  // Flag says it's OK to take a long time generating tip
   QIF_CACHED          = $00000001;
   QIF_DONTEXPANDFOLDER= $00000002;
-  SHARD_PIDL          = DWord($00000001);
-  SHARD_PATHA         = DWord($00000002);
-  SHARD_PATHW         = DWord($00000003);
+  SHARD_PIDL            = DWord($00000001);
+  SHARD_PATHA           = DWord($00000002);
+  SHARD_PATHW           = DWord($00000003);
+  SHARD_APPIDINFO       = DWord($00000004);
+  SHARD_APPIDINFOIDLIST = DWord($00000005);
+  SHARD_LINK            = DWord($00000006);
+  SHARD_APPIDINFOLINK   = DWord($00000007);
+  SHARD_SHELLITEM       = DWord($00000008);
   PRF_VERIFYEXISTS            = $0001;
   PRF_TRYPROGRAMEXTENSIONS    = ($0002 or PRF_VERIFYEXISTS);
   PRF_FIRSTDIRDEF             = $0004;
@@ -2015,6 +2023,135 @@ Type
         function GetInfoTip (dwFlags:DWord;var pwsztip:pwchar):HResult;StdCall;
         function GetInfoFlags (var dwflags:dword):HResult;Stdcall;
         end;
+
+    ITaskbarList = interface(IUnknown)
+      ['{56FDF342-FD6D-11d0-958A-006097C9A090}']
+      function HrInit: HResult; stdcall;
+      function AddTab(hwnd: HWND): HResult; stdcall;
+      function DeleteTab(hwnd: HWND): HResult; stdcall;
+      function ActivateTab(hwnd: HWND): HResult; stdcall;
+      function SetActiveAlt(hwnd: HWND): HResult; stdcall;
+    end;
+
+    ITaskbarList2 = interface(ITaskbarList)
+      ['{602D4995-B13A-429b-A66E-1935E44F4317}']
+      function MarkFullscreenWindow(hwnd: HWND; fFullscreen: BOOL): HResult; stdcall;
+    end;
+
+const
+    // enum THUMBBUTTONFLAGS
+    THBF_ENABLED        = 0;
+    THBF_DISABLED       = $1;
+    THBF_DISMISSONCLICK = $2;
+    THBF_NOBACKGROUND   = $4;
+    THBF_HIDDEN         = $8;
+    THBF_NONINTERACTIVE = $10;
+
+type
+    THUMBBUTTONFLAGS = DWord;
+
+const
+    // enum THUMBBUTTONMASK
+    THB_BITMAP  = $1;
+    THB_ICON    = $2;
+    THB_TOOLTIP = $4;
+    THB_FLAGS   = $8;
+
+type
+    THUMBBUTTONMASK = DWord;
+
+    THUMBBUTTON = packed record
+      dwMask: THUMBBUTTONMASK;
+      iId: UINT;
+      iBitmap: UINT;
+      hIcon: HICON;
+      szTip: array[0..259] of WCHAR;
+      dwFlags: THUMBBUTTONFLAGS;
+    end;
+    LPTHUMBBUTTON = ^THUMBBUTTON;
+
+const
+    THBN_CLICKED      = $1800;
+
+    // enum TBPFLAG
+    TBPF_NOPROGRESS    = 0;
+    TBPF_INDETERMINATE = $1;
+    TBPF_NORMAL	     = $2;
+    TBPF_ERROR         = $4;
+    TBPF_PAUSED        = $8;
+
+type
+    TBPFLAG = DWord;
+
+    ITaskBarList3 = interface(ITaskbarList2)
+      ['{ea1afb91-9e28-4b86-90e9-9e9f8a5eefaf}']
+      function SetProgressValue(hwnd: HWND; ullCompleted: ULONGLONG; ullTotal: ULONGLONG): HResult; stdcall;
+      function SetProgressState(hwnd: HWND; tbpFlags: TBPFLAG): HResult; stdcall;
+      function RegisterTab(hwndTab: HWND; hwndMDI: HWND): HResult; stdcall;
+      function UnregisterTab(hwndTab: HWND): HResult; stdcall;
+      function SetTabOrder(hwndTab: HWND; hwndInsertBefore: HWND): HResult; stdcall;
+      function SetTabActive(hwndTab: HWND; hwndMDI: HWND; dwReserved: DWORD): HResult; stdcall;
+      function ThumbBarAddButtons(hwnd: HWND; cButtons: UINT; pButton: LPTHUMBBUTTON): HResult; stdcall;
+      function ThumbBarUpdateButtons(hwnd: HWND; cButtons: UINT; pButton: LPTHUMBBUTTON): HResult; stdcall;
+      function ThumbBarSetImageList(hwnd: HWND; himl: HIMAGELIST): HResult; stdcall;
+      function SetOverlayIcon(hwnd: HWND; hIcon: HICON; pszDescription: LPCWSTR): HResult; stdcall;
+      function SetThumbnailTooltip(hwnd: HWND; pszTip: LPCWSTR): HResult; stdcall;
+      function SetThumbnailClip(hwnd: HWND; prcClip: PRECT): HResult; stdcall;
+    end;
+
+const
+    // enum STPFLAG
+    STPF_NONE                      = 0;
+    STPF_USEAPPTHUMBNAILALWAYS     = $1;
+    STPF_USEAPPTHUMBNAILWHENACTIVE = $2;
+    STPF_USEAPPPEEKALWAYS          = $4;
+    STPF_USEAPPPEEKWHENACTIVE      = $8;
+
+type
+    STPFLAG = DWord;
+
+    ITaskbarList4 = interface(ITaskbarList3)
+      ['{c43dc798-95d1-4bea-9030-bb99e2983a1a}']
+      function SetTabProperties(hwndTab: HWND; stpFlags: STPFLAG): HResult; stdcall;
+    end;
+
+const
+    // GETPROPERTYSTOREFLAGS enum
+    GPS_DEFAULT	              = 0;
+    GPS_HANDLERPROPERTIESONLY = $1;
+    GPS_READWRITE	      = $2;
+    GPS_TEMPORARY	      = $4;
+    GPS_FASTPROPERTIESONLY    = $8;
+    GPS_OPENSLOWITEM	      = $10;
+    GPS_DELAYCREATION         = $20;
+    GPS_BESTEFFORT            = $40;
+    GPS_NO_OPLOCK	      = $80;
+    GPS_MASK_VALID            = $ff;
+
+type
+    GETPROPERTYSTOREFLAGS = DWord;
+    _tagpropertykey = packed record
+        fmtid: TGUID;
+        pid: DWORD;
+    end;
+    PROPERTYKEY = _tagpropertykey;
+    REFPROPERTYKEY = ^PROPERTYKEY;
+    REFPROPVARIANT = ^TPROPVARIANT;
+
+    IPropertyStore = interface(IUnknown)
+      ['{886d8eeb-8cf2-4446-8d02-cdba1dbdcf99}']
+      function GetCount(out cProps: DWORD): HResult; stdcall;
+      function GetAt(iProp: DWORD; out pkey: PROPERTYKEY): HResult; stdcall;
+      function GetValue(key: REFPROPERTYKEY; out pv: PROPVARIANT): HResult; stdcall;
+      function SetValue(key: REFPROPERTYKEY; propvar: REFPROPVARIANT): HResult; stdcall;
+      function Commit: HResult; stdcall;
+    end;
+
+    IPropertyDescriptionList = interface(IUnknown)
+      ['{1f9fc1d0-c39b-4b26-817f-011967d3440e}']
+      function GetCount(out pcElem: UINT): HResult; stdcall;
+      function GetAt(iElem: UINT; const riid: REFIID; out ppv): HResult; stdcall;
+    end;
  
     IShellLinkA  = Interface(IUnknown)
         ['{000214EE-0000-0000-C000-000000000046}']
@@ -2071,6 +2208,35 @@ Type
                function Compare(psi:IShellItem;hint:SICHINTF;piorder:PINT):HResult; Stdcall;
                end;
 
+    IEnumShellItems = interface(IUnknown)
+      ['{70629033-e363-4a28-a567-0db78006e6d7}']
+      function Next(celt: ULONG; out rgelt: IShellItem; var pceltFetched: ULONG): HResult; stdcall;
+      function Skip(celt: ULONG): HResult; stdcall;
+      function Reset: HResult; stdcall;
+      function Clone(out ppenum: IEnumShellItems): HResult; stdcall;
+    end;
+
+const
+    // SIATTRIBFLAGS enum
+    SIATTRIBFLAGS_AND       = $1;
+    SIATTRIBFLAGS_OR        = $2;
+    SIATTRIBFLAGS_APPCOMPAT = $3;
+    SIATTRIBFLAGS_MASK      = $3;
+    SIATTRIBFLAGS_ALLITEMS  = $4000;
+
+type
+    SIATTRIBFLAGS = DWord;
+    IShellItemArray = interface(IUnknown)
+      ['{b63ea76d-1f85-456f-a19c-48159efa858b}']
+      function BindToHandler(pbc: IBindCtx; const bhid: TGUID; const riid: REFIID; out ppvOut): HResult; stdcall;
+      function GetPropertyStore(flags: GETPROPERTYSTOREFLAGS; const riid: REFIID; out ppv): HResult; stdcall;
+      function GetPropertyDescriptionList(keyType: REFPROPERTYKEY; const riid: REFIID; out ppv): HResult; stdcall;
+      function GetAttributes(AttribFlags: SIATTRIBFLAGS; sfgaoMask: SFGAOF; var psfgaoAttribs: SFGAOF): HResult; stdcall;
+      function GetCount(var pdwNumItems: DWORD): HResult; stdcall;
+      function GetItemAt(dwIndex: DWORD; var ppsi: IShellItem): HResult; stdcall;
+      function EnumItems(var ppenumShellItems: IEnumShellItems): HResult; stdcall;
+    end;
+
     IModalWindow = Interface(IUnknown)
 	             ['{b4db1657-70d7-485e-8e3e-6fcb5a5c1802}']
 				   function Show(hwndparent:HWND):HResult;StdCall;
@@ -2121,7 +2287,88 @@ Type
 		    function SetFilter(pfilter:IShellItemFilter):HRESULT;Stdcall;
 		  end;
 
+    IFileOperationProgressSink = interface(IUnknown)
+      ['{04b0f1a7-9490-44bc-96e1-4296a31252e2}']
+      function StartOperations: HResult; stdcall;
+      function FinishOperations(hrResult: HResult): HResult; stdcall;
+      function PreRenameItem(dwFlags: DWORD; psiItem: IShellItem; pszNewName: LPCWSTR): HResult; stdcall;
+      function PostRenameItem(dwFlags: DWORD; psiItem: IShellItem; pszNewName: LPCWSTR; hrRename: HRESULT; psiNewlyCreated: IShellItem): HResult; stdcall;
+      function PreMoveItem(dwFlags: DWORD; psiItem: IShellItem; psiDestinationFolder: IShellItem; pszNewName: LPCWSTR): HResult; stdcall;
+      function PostMoveItem(dwFlags: DWORD; psiItem: IShellItem; psiDestinationFolder: IShellItem; pszNewName: LPCWSTR; hrMove: HRESULT; psiNewlyCreated: IShellItem): HResult; stdcall;
+      function PreCopyItem(dwFlags: DWORD; psiItem: IShellItem; psiDestinationFolder: IShellItem; pszNewName: LPCWSTR): HResult; stdcall;
+      function PostCopyItem(dwFlags: DWORD; psiItem: IShellItem; psiDestinationFolder: IShellItem; pszNewName: LPCWSTR; hrCopy: HRESULT; psiNewlyCreated: IShellItem): HResult; stdcall;
+      function PreDeleteItem(dwFlags: DWORD; psiItem: IShellItem): HResult; stdcall;
+      function PostDeleteItem(dwFlags: DWORD; psiItem: IShellItem; hrDelete: HRESULT; psiNewlyCreated: IShellItem): HResult; stdcall;
+      function PreNewItem(dwFlags: DWORD; psiDestinationFolder: IShellItem; pszNewName: LPCWSTR): HResult; stdcall;
+      function PostNewItem(dwFlags: DWORD; psiDestinationFolder: IShellItem; pszNewName: LPCWSTR; pszTemplateName: LPCWSTR; dwFileAttributes: DWORD; hrNew: HRESULT; psiNewItem: IShellItem): HResult; stdcall;
+      function UpdateProgress(iWorkTotal: UINT; iWorkSoFar: UINT): HResult; stdcall;
+      function ResetTimer: HResult; stdcall;
+      function PauseTimer: HResult; stdcall;
+      function ResumeTimer: HResult; stdcall;
+    end;
 
+    IFileSaveDialog = interface(IFileDialog)
+      ['{84bccd23-5fde-4cdb-aea4-af64b83d78ab}']
+      function SetSaveAsItem(psi: IShellItem): HResult; stdcall;
+      function SetProperties(pStore: IPropertyStore): HResult; stdcall;
+      function SetCollectedProperties(pList: IPropertyDescriptionList; fAppendDefault: BOOL): HResult; stdcall;
+      function GetProperties(var ppStore: IPropertyStore): HResult; stdcall;
+      function ApplyProperties(psi: IShellItem; pStore: IPropertyStore; hwnd: HWND; pSink: IFileOperationProgressSink): HResult; stdcall;
+    end;
+
+    IFileOpenDialog = interface(IFileDialog)
+      ['{d57c7288-d4ad-4768-be02-9d969532d960}']
+      function GetResults(var ppenum: IShellItemArray): HResult; stdcall;
+      function GetSelectedItems(var ppsai: IShellItemArray): HResult; stdcall;
+    end;
+
+const
+    // CDCONTROLSTATEF enum
+    CDCS_INACTIVE       = 0;
+    CDCS_ENABLED        = $1;
+    CDCS_VISIBLE        = $2;
+    CDCS_ENABLEDVISIBLE = $3;
+
+type
+    CDCONTROLSTATEF = DWord;
+    IFileDialogCustomize = interface(IUnknown)
+      ['{e6fdd21a-163f-4975-9c8c-a69f1ba37034}']
+      function EnableOpenDropDown(dwIDCtl: DWORD): HResult; stdcall;
+      function AddMenu(dwIDCtl: DWORD; pszLabel: LPCWSTR): HResult; stdcall;
+      function AddPushButton(dwIDCtl: DWORD; pszLabel: LPCWSTR): HResult; stdcall;
+      function AddComboBox(dwIDCtl: DWORD): HResult; stdcall;
+      function AddRadioButtonList(dwIDCtl: DWORD): HResult; stdcall;
+      function AddCheckButton(dwIDCtl: DWORD; pszLabel: LPCWSTR; bChecked: BOOL): HResult; stdcall;
+      function AddEditBox(dwIDCtl: DWORD; pszText: LPCWSTR): HResult; stdcall;
+      function AddSeparator(dwIDCtl: DWORD): HResult; stdcall;
+      function AddText(dwIDCtl: DWORD; pszText: LPCWSTR): HResult; stdcall;
+      function SetControlLabel(dwIDCtl: DWORD; pszLabel: LPCWSTR): HResult; stdcall;
+      function GetControlState(dwIDCtl: DWORD; out pdwState: CDCONTROLSTATEF): HResult; stdcall;
+      function SetControlState(dwIDCtl: DWORD; dwState: CDCONTROLSTATEF): HResult; stdcall;
+      function GetEditBoxText(dwIDCtl: DWORD; out ppszText: WCHAR): HResult; stdcall;
+      function SetEditBoxText(dwIDCtl: DWORD; pszText: LPCWSTR): HResult; stdcall;
+      function GetCheckButtonState(dwIDCtl: DWORD; out pbChecked: BOOL): HResult; stdcall;
+      function SetCheckButtonState(dwIDCtl: DWORD; bChecked: BOOL): HResult; stdcall;
+      function AddControlItem(dwIDCtl: DWORD; dwIDItem: DWORD; pszLabel: LPCWSTR): HResult; stdcall;
+      function RemoveControlItem(dwIDCtl: DWORD; dwIDItem: DWORD): HResult; stdcall;
+      function RemoveAllControlItems(dwIDCtl: DWORD): HResult; stdcall;
+      function GetControlItemState(dwIDCtl: DWORD; dwIDItem: DWORD; out pdwState: CDCONTROLSTATEF): HResult; stdcall;
+      function SetControlItemState(dwIDCtl: DWORD; dwIDItem: DWORD; dwState: CDCONTROLSTATEF): HResult; stdcall;
+      function GetSelectedControlItem(dwIDCtl: DWORD; out pdwIDItem: DWORD): HResult; stdcall;
+      function SetSelectedControlItem(dwIDCtl: DWORD; dwIDItem: DWORD): HResult; stdcall;
+      function StartVisualGroup(dwIDCtl: DWORD; pszLabel: LPCWSTR): HResult; stdcall;
+      function EndVisualGroup: HResult; stdcall;
+      function MakeProminent(dwIDCtl: DWORD): HResult; stdcall;
+      function SetControlItemText(dwIDCtl: DWORD; dwIDItem: DWORD; pszLabel: LPCWSTR): HResult; stdcall;
+    end;
+
+    IFileDialogControlEvents = interface(IUnknown)
+      ['{36116642-D713-4b97-9B83-7484A9D00433}']
+      function OnItemSelected(pfdc: IFileDialogCustomize; dwIDCtl: DWORD; dwIDItem: DWORD): HResult; stdcall;
+      function OnButtonClicked(pfdc: IFileDialogCustomize; dwIDCtl: DWORD): HResult; stdcall;
+      function OnCheckButtonToggled(pfdc: IFileDialogCustomize; dwIDCtl: DWORD; bChecked: BOOL): HResult; stdcall;
+      function OnControlActivating(pfdc: IFileDialogCustomize; dwIDCtl: DWORD): HResult; stdcall;
+    end;
 
     IShellExtInit = Interface(IUnknown)
           [IID_IShellExtInit]
@@ -2295,4 +2542,6 @@ Const External_Library = 'shell32';
   function SHMapPIDLToSystemImageListIndex(pshf:IShellFolder; pidl:LPCITEMIDLIST; piIndexSel:plongint):Longint;StdCall;external External_library name 'SHMapPIDLToSystemImageListIndex';
 
 implementation
+
+
 end.