mirror of
https://gitlab.com/freepascal.org/lazarus/lazarus.git
synced 2025-12-01 02:47:22 +01:00
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;
This commit is contained in:
parent
c6200e29c8
commit
e5aa4cee57
@ -543,6 +543,7 @@ type
|
||||
tfShowMarqueeProgressBar, tfCallbackTimer,
|
||||
tfPositionRelativeToWindow, tfRtlLayout,
|
||||
tfNoDefaultRadioButton, tfCanBeMinimized,
|
||||
tfNoSetForeGround, tfSizeToContent,
|
||||
tfForceNonNative, tfEmulateClassicStyle);
|
||||
TTaskDialogFlags = set of TTaskDialogFlag;
|
||||
|
||||
|
||||
@ -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;
|
||||
|
||||
@ -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;
|
||||
|
||||
Loading…
Reference in New Issue
Block a user