gpt4 book ai didi

delphi - 如何使用 Delphi 7 在状态/任务栏按钮中显示进度?

转载 作者:行者123 更新时间:2023-12-03 14:36:13 25 4
gpt4 key购买 nike

如果您在 Windows 7 下复制文件,您将在状态栏或任务栏按钮中开始显示复制的进度。应用程序。

这可以使用 Delphi 7 实现吗?

我有一些冗长的操作,非常适合以这种方式显示其进度。

使用 Total Commander 进行复制的此类按钮示例

sample of such a button using copy with Total Commander .

最佳答案

使用ITaskbarList3接口(interface),特别是其 SetProgressStateSetProgressValue方法。使用 CoCreateInstance() 指定 CLSID_TaskbarListIID_ITaskbarList3 来访问该接口(interface)。

例如:

type
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;

THUMBBUTTON = record
dwMask: DWORD;
iId: UINT;
iBitmap: UINT;
hIcon: HICON;
szTip: packed array[0..259] of WCHAR;
dwFlags: DWORD;
end;
TThumbButton = THUMBBUTTON;
PThumbButton = ^TThumbButton;

ITaskbarList3 = interface(ITaskbarList2)
['{EA1AFB91-9E28-4B86-90E9-9E9F8A5EEFAF}']
function SetProgressValue(hwnd: HWND; ullCompleted: ULONGLONG;
ullTotal: ULONGLONG): HRESULT; stdcall;
function SetProgressState(hwnd: HWND;
tbpFlags: Integer): 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;
tbatFlags: Integer): HRESULT; stdcall;
function ThumbBarAddButtons(hwnd: HWND; cButtons: UINT;
pButton: PThumbButton): HRESULT; stdcall;
function ThumbBarUpdateButtons(hwnd: HWND; cButtons: UINT;
pButton: PThumbButton): 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;
var prcClip: TRect): HRESULT; stdcall;
end;

const
CLSID_TaskbarList: TGUID = '{56FDF344-FD6D-11d0-958A-006097C9A090}';
TBPF_NOPROGRESS = 0;
TBPF_INDETERMINATE = $1;
TBPF_NORMAL = $2;
TBPF_ERROR = $4;
TBPF_PAUSED = $8;

var
TBL: ITaskbarList3;
I: Integer;
begin
CoCreateInstance(CLSID_TaskbarList, nil, CLSCTX_INPROC, ITaskbarList3, TBL);

if (TBL <> nil) then
TBL.SetProgressState(Application.Handle, TBPF_INDETERMINATE);
try
for I := 0 to 100 do
begin
if (TBL <> nil) then
TBL.SetProgressValue(Application.Handle, I, 100);
Sleep(1000);
end;
finally
if (TBL <> nil) then
TBL.SetProgressState(Application.Handle, TBPF_NOPROGRESS);
end;
end;

关于delphi - 如何使用 Delphi 7 在状态/任务栏按钮中显示进度?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5814765/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com