Bart
e5aa4cee57
diff --git a/lcl/dialogs.pp b/lcl/dialogs.pp
...
index 24f69c5ac7..b156a70d9c 100644
--- a/lcl/dialogs.pp
+++ b/lcl/dialogs.pp
@@ -543,6 +543,7 @@ type
tfShowMarqueeProgressBar, tfCallbackTimer,
tfPositionRelativeToWindow, tfRtlLayout,
tfNoDefaultRadioButton, tfCanBeMinimized,
+ tfNoSetForeGround, tfSizeToContent,
tfForceNonNative, tfEmulateClassicStyle);
TTaskDialogFlags = set of TTaskDialogFlag;
diff --git a/lcl/include/taskdialog.inc b/lcl/include/taskdialog.inc
index 2ce5a97571..ddf2f46aaa 100644
--- a/lcl/include/taskdialog.inc
+++ b/lcl/include/taskdialog.inc
@@ -179,6 +179,10 @@ function TCustomTaskDialog.DoExecute(ParentWnd: HWND): Boolean;
Result := Result + [tdfNoDefaultRadioButton];
if tfCanBeMinimized in aTaskFlags then
Result := Result + [tdfCanBeMinimized];
+ if tfNoSetForeGround in aTaskFlags then
+ Result := Result + [tdfNoSetForeGround];
+ if tfSizeToContent in aTaskFlags then
+ Result := Result + [tdfSizeToContent];
end;
function TF_DIALOGICON(const aIcon: TTaskDialogIcon): LCLTaskDialog.TTaskDialogIcon;
diff --git a/lcl/lcltaskdialog.pas b/lcl/lcltaskdialog.pas
index 660702261f..2c3caccd43 100644
--- a/lcl/lcltaskdialog.pas
+++ b/lcl/lcltaskdialog.pas
@@ -127,7 +127,7 @@ interface
uses
{$IFDEF MSWINDOWS}
- Windows, ctypes,
+ Windows, ctypes, CommCtrl,
{$ENDIF}
Classes, SysUtils,
LazUTF8,
@@ -172,7 +172,9 @@ type
tdfExpandFooterArea, tdfExpandByDefault, tdfVerificationFlagChecked,
tdfShowProgressBar, tdfShowMarqueeProgressBar, tdfCallbackTimer,
tdfPositionRelativeToWindow, tdfRtlLayout, tdfNoDefaultRadioButton,
- tdfCanBeMinimized, tdfQuery, tdfQueryMasked, tdfQueryFieldFocused);
+ tdfCanBeMinimized, tdfNoSetForeGround {added in Windows 8}, tdfSizeToContent,
+ //custom LCL flags
+ tdfQuery, tdfQueryMasked, tdfQueryFieldFocused);
/// set of available configuration flags for the Task Dialog
TTaskDialogFlags = set of TTaskDialogFlag;
@@ -771,6 +773,29 @@ var
if ModalResult=aButtonDef then
Dialog.Form.ActiveControl := result;
end;
+ {$IFDEF MSWINDOwS}
+ function TaskDialogFlagsToInteger(aFlags: TTaskDialogFlags): Integer;
+ const
+ //missing from CommCtrls in fpc < 3.3.1
+ TDF_NO_SET_FOREGROUND = $10000;
+ TDF_SIZE_TO_CONTENT = $1000000;
+ FlagValues: Array[TTaskDialogFlag] of Integer = (
+ TDF_ENABLE_HYPERLINKS, TDF_USE_HICON_MAIN, TDF_USE_HICON_FOOTER,
+ TDF_ALLOW_DIALOG_CANCELLATION, TDF_USE_COMMAND_LINKS, TDF_USE_COMMAND_LINKS_NO_ICON,
+ TDF_EXPAND_FOOTER_AREA, TDF_EXPANDED_BY_DEFAULT, TDF_VERIFICATION_FLAG_CHECKED,
+ TDF_SHOW_PROGRESS_BAR, TDF_SHOW_MARQUEE_PROGRESS_BAR, TDF_CALLBACK_TIMER,
+ TDF_POSITION_RELATIVE_TO_WINDOW, TDF_RTL_LAYOUT, TDF_NO_DEFAULT_RADIO_BUTTON,
+ TDF_CAN_BE_MINIMIZED, TDF_NO_SET_FOREGROUND {added in Windows 8}, TDF_SIZE_TO_CONTENT,
+ //custom LCL flags
+ 0 {tdfQuery}, 0 {tdfQueryMasked}, 0 {tdfQueryFieldFocused});
+ var
+ aFlag: TTaskDialogFlag;
+ begin
+ Result := 0;
+ for aFlag := Low(TTaskDialogFlags) to High(TTaskDialogFlags) do
+ if (aFlag in aFlags) then Result := Result or FlagValues[aFlag];
+ end;
+ {$ENDIF MSWINWOS}
var
ARadioOffset: integer;
@@ -821,7 +846,7 @@ begin
include(aFlags,tdfVerificationFlagChecked);
if (Config.cButtons=0) and (aCommonButtons=[cbOk]) then
Include(aFlags,tdfAllowDialogCancellation); // just OK -> Esc/Alt+F4 close
- Config.dwFlags := integer(aFlags);
+ Config.dwFlags := TaskDialogFlagsToInteger(aFlags);
Config.hMainIcon := TD_ICONS[aDialogIcon];
Config.hFooterIcon := TD_FOOTERICONS[aFooterIcon];
Config.nDefaultButton := aButtonDef;
2023-07-12 15:15:34 +02:00