加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

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

发布时间:2020-12-15 10:09:35 所属栏目:大数据 来源:网络整理
导读:如果您在 Windows 7下复制文件,您将看到一个进度条中复制的进度显示在应用程序的状态或任务栏按钮中. 可以使用Delphi 7实现吗? 我有一些漫长的操作,这将非常适合展示它的进步. 使用Total Commander的副本样品 . 解决方法 使用 ITaskbarList3 接口,特别是 Se
如果您在 Windows 7下复制文件,您将看到一个进度条中复制的进度显示在应用程序的状态或任务栏按钮中.

可以使用Delphi 7实现吗?

我有一些漫长的操作,这将非常适合展示它的进步.

使用Total Commander的副本样品

.

解决方法

使用 ITaskbarList3接口,特别是 SetProgressStateSetProgressValue方法.使用指定CLSID_TaskbarList和IID_ITaskbarList3的CoCreateInstance()来访问接口.

例如:

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;

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读