Delphi2010中Windows7新的taskbar功能的使用

转自我的旧博客

Windows7正式版已经用了很久了.MSDN上面正式版Windows7已经发布很久了.
发现Windows7的TaskBar很漂亮.也有很多功能.例如IE下载的时候可以看到进度,可以叠加图标等等特效.
Delphi2010也发布很久了,Delphi2010号称支持Windows7的新增API.那么看看有没有TaskBar相关的API.
一提到Taskbar相关,首先就想到ITaskBarList不同版本接口.到shlobj单元一看,果然增加了ITaskbarList3,ITaskbarList4两个新版本的接口.
老办法CreateComObject(CLSID_TaskbarList)就行了.返回的是一个ITaskBarList接口.看具体的操作系统,返回的是你操作系统所能支持的最高版本的ITaskBarList.
先来看进度条:
设计一个窗口

unit Unit1;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, ShlObj, ActiveX, ComObj, ExtCtrls, StdCtrls;

type
TForm1 = class(TForm)
Timer1: TTimer;
GroupBox1: TGroupBox;
CheckBox2: TCheckBox;
CheckBox3: TCheckBox;
CheckBox1: TCheckBox;
CheckBox4: TCheckBox;
procedure FormCreate(Sender: TObject);
procedure Timer1Timer(Sender: TObject);
procedure CheckBox1Click(Sender: TObject);
private
{ Private declarations }
FPos : Int64;
FMax : Int64;
FTaskBarList : ITaskbarList4;
function SetProgressState():Integer;
public
{ Public declarations }
end;

var
Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.CheckBox1Click(Sender: TObject);
begin
SetProgressState();
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
FTaskBarList := CreateComObject(CLSID_TaskbarList)? as ITaskbarList4;
FPos := 0;
FMax := 200;
SetProgressState();
end;

function TForm1.SetProgressState: Integer;
begin
Result := TBPF_NOPROGRESS;
if CheckBox1.Checked then
Result? := Result or TBPF_INDETERMINATE;
if CheckBox2.Checked then
Result? := Result or TBPF_NORMAL;
if CheckBox3.Checked then
Result? := Result or TBPF_ERROR;
if CheckBox4.Checked then
Result? := Result or TBPF_PAUSED;
FTaskBarList.SetProgressState(Handle, Result);
end;

procedure TForm1.Timer1Timer(Sender: TObject);
begin
if (FPos < FMAX) then
Inc(FPos, 10)
else
FPos := 0;
FTaskBarList.SetProgressValue(Handle, FPos, FMax);
end;

end.

运行看看效果.

不定的:进度颜色的边缘是渐变的
正常的:就是绿色的进度条.

出错的:就是红色的进度条.

暂停的:就是黄色的进度条

再来看覆盖图标
就是可以再任务栏图标上再覆盖一个小图标,可以用表示状态之类的
新建一个窗口.放置一个ImageList,添加几个icon.再放一个Timer,我们用定时器来不停地变换覆盖图标.如果你的图标设置的足够好,还可以模拟动画效果啊.

代码如下
unit Unit1;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, ShlObj, ActiveX, ComObj, ExtCtrls, StdCtrls, ImgList;

type
TForm1 = class(TForm)
Button1: TButton;
ImageList1: TImageList;
Timer1: TTimer;
procedure FormCreate(Sender: TObject);
procedure FormDestroy(Sender: TObject);
procedure Timer1Timer(Sender: TObject);
private
{ Private declarations }
FTaskBarList : ITaskbarList4;
FIcon : TIcon;
FIconIndex : Integer;
public
{ Public declarations }
end;

var
Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.FormCreate(Sender: TObject);
begin
FTaskBarList := CreateComObject(CLSID_TaskbarList)? as ITaskbarList4;
FIcon := TIcon.Create;
end;
procedure TForm1.FormDestroy(Sender: TObject);
begin
FIcon.Free;
end;

procedure TForm1.Timer1Timer(Sender: TObject);
begin
if FIconIndex < ImageList1.Count then
begin
Inc(FIconIndex);
end
else
begin
FIconIndex := 0;
end;
ImageList1.GetIcon(FIconIndex, FIcon);
FTaskBarList.SetOverlayIcon(Handle, FIcon.Handle, ”);
end;

end.

看到我的程序图标右下角的小图标了吗.就是这个样子了.

添加按钮:
新版迅雷在Windows7上运行的时候会在缩略图上添加三个按钮.
可以实现任务的添加,下载,暂停等功能.

我们也可以仿照一个.
新建一个窗口

unit Unit1;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, ShlObj, ActiveX, ComObj, ExtCtrls, StdCtrls, ImgList;

type
TForm1 = class(TForm)
Button1: TButton;
procedure Button1Click(Sender: TObject);
procedure FormDestroy(Sender: TObject);
procedure FormCreate(Sender: TObject);
private
{ Private declarations }
FTaskBarList: ITaskbarList4;
btnIcon : TIcon;
Fbtns: array [0 .. 2] of TThumbButton;
protected
procedure WndProc(var Message: TMessage); override;
public
{ Public declarations }
end;

var
Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
var
I: Integer;
begin
ZeroMemory(@Fbtns, SizeOf(TThumbButton) * length(Fbtns));
for I := Low(Fbtns) to High(Fbtns) do
begin
Fbtns[I].dwMask := THB_ICON or THB_TOOLTIP or THB_FLAGS;
Fbtns[i].hIcon := btnIcon.Handle;
Fbtns[I].dwFlags := THBF_ENABLED;
Fbtns[I].iId := I;
Fbtns[I].szTip := ‘ABCD’;
end;
// 这里什么图也没给,出现的按钮都是没有图标的
FTaskBarList.ThumbBarAddButtons(Handle, length(Fbtns), @Fbtns);
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
FTaskBarList := CreateComObject(CLSID_TaskbarList) as ITaskbarList4;
FTaskBarList.HrInit();
btnIcon := TIcon.Create;
btnIcon.LoadFromFile(‘c:/AquaValue2.ico’);
end;

procedure TForm1.FormDestroy(Sender: TObject);
begin
btnIcon.Free;
end;

procedure TForm1.WndProc(var Message: TMessage);
begin
inherited;
case Message.Msg of
WM_COMMAND:
begin
case HiWord(Message.WParam) of
THBN_CLICKED:
begin
ShowMessage(Format(‘你按了按钮[id=%d]’, [LoWord(Message.WParam)]));
end;
end;
end;
end;
end;

end.

运行起来.按一下按钮.效果如下图:

但是现在还有个问题困扰了我半天.就是MSDN上说点击了按钮会受到WM_COMMAND消息.我也在WndProc中做了处理.但是不论怎样都收不到.正要放弃的时候突然灵光一闪.会不会是在调试状态运行和实际运行有啥区别呢?
于是找到编译好的EXE文件双击执行.哈哈,一切OK.虽然不知道是什么问题引起的.但是肯定和VCL或者Delphi的IDE调试环境有关.我又用C#和VC分别验证了一下.他们在调试状态下就没有这个问题.这只是一个小麻烦问题不大.呵呵.
新的ITaskBarList接口还有其他的一些方法.不过最常用的都是前面的几个.都很简单.有了前面的基础这些试一下就知道怎么用了.

注意哦,你的程序除非是Only for Windows7的.否则要判断一下操作系统版本号.再决定是否调用新的TaskBar功能.

此条目发表在Delphi, 未分类分类目录。将固定链接加入收藏夹。

Delphi2010中Windows7新的taskbar功能的使用》有142条回应

  1. Pingback引用通告: 橡胶止水带

  2. Pingback引用通告: trustedmdstorefy.com

  3. Pingback引用通告: bofilm

  4. Pingback引用通告: Êîíñóëüòàöèÿ ïñèõîëîãà

  5. Pingback引用通告: hqcialismht.com

  6. Pingback引用通告: viagramdtrustser.com

  7. Pingback引用通告: 4serial.com

  8. Pingback引用通告: See-Season-1

  9. Pingback引用通告: Evil-Season-3

  10. Pingback引用通告: Evil-Season-4

  11. Pingback引用通告: serial 2020

  12. Pingback引用通告: Dailymotion

  13. Pingback引用通告: Watch+movies+2020

  14. Pingback引用通告: serial-video-film-online

  15. Pingback引用通告: serial

  16. Pingback引用通告: 1plus1tv

  17. Pingback引用通告: #1plus1

  18. Pingback引用通告: 2020

  19. Pingback引用通告: Watch Movies Online

  20. Pingback引用通告: Film

  21. Pingback引用通告: Film 2020

  22. Pingback引用通告: Film 2021

  23. Pingback引用通告: watch online TV LIVE

  24. Pingback引用通告: parazity-oskar-2020

  25. Pingback引用通告: human design

  26. Pingback引用通告: DSmlka

  27. Pingback引用通告: viagra

  28. Pingback引用通告: viagra online

  29. Pingback引用通告: +

  30. Pingback引用通告: ¯jak Son³k

  31. Pingback引用通告: astrolog

  32. Pingback引用通告: film-kalashnikov-watch

  33. Pingback引用通告: generic cialis

  34. Pingback引用通告: cialis 20mg

  35. Pingback引用通告: watch online

  36. Pingback引用通告: kinoxaxru.ru

  37. Pingback引用通告: pobachennya u vegas

  38. Pingback引用通告: Proshanie so Stalinym

  39. Pingback引用通告: strelcov 2020

  40. Pingback引用通告: film t-34

  41. Pingback引用通告: online pharmacy

  42. Pingback引用通告: canadian pharmacy

  43. Pingback引用通告: Beograd film 2020

  44. Pingback引用通告: psiholog

  45. Pingback引用通告: psyhelp_on_line

  46. Pingback引用通告: coronavirus

  47. Pingback引用通告: PSYCHOSOCIAL

  48. Pingback引用通告: rasstanovka hellinger

  49. Pingback引用通告: Cherekasi film 2020

  50. Pingback引用通告: film doktor_liza

  51. Pingback引用通告: djoker film

  52. Pingback引用通告: t.me/psyhell

  53. Pingback引用通告: Ïñèõîëîã îíëàéí

  54. Pingback引用通告: bitly.com

  55. Pingback引用通告: viagra 100mg

  56. Pingback引用通告: viagra price

  57. Pingback引用通告: viagra generic

  58. Pingback引用通告: viagra coupon

  59. Pingback引用通告: cheap viagra

  60. Pingback引用通告: cialis

  61. Pingback引用通告: cialis coupon

  62. Pingback引用通告: canadian pharmacy cialis

  63. Pingback引用通告: cialis 5mg

  64. Pingback引用通告: rlowcostmd.com

  65. Pingback引用通告: bitly

  66. Pingback引用通告: Zemlyane 2005 smotret onlajn

  67. Pingback引用通告: smotret onlajn besplatno v kachestve hd 1080

  68. Pingback引用通告: gusmeasu.com

  69. Pingback引用通告: movies-unhinged-film

  70. Pingback引用通告: malenkie-zhenshhiny-2020

  71. Pingback引用通告: dom 2

  72. Pingback引用通告: zoom-psykholog

  73. Pingback引用通告: zoom-viber-skype

  74. Pingback引用通告: Vratar Galaktiki Film, 2020

  75. Pingback引用通告: Vratar

  76. Pingback引用通告: Cherkassy 2020

  77. Pingback引用通告: chernobyl-hbo-2019-1-sezon

  78. Pingback引用通告: moskva-psiholog

  79. Pingback引用通告: batmanapollo.ru

  80. Pingback引用通告: 323

  81. Pingback引用通告: 525

  82. Pingback引用通告: dom2-ru

  83. Pingback引用通告: Tenet Online

  84. Pingback引用通告: psy psy psy psy

  85. Pingback引用通告: krsmi.ru

  86. Pingback引用通告: like-v.ru

  87. Pingback引用通告: CFOSPUK

  88. Pingback引用通告: MAMprEj

  89. Pingback引用通告: fgu0ygW

  90. Pingback引用通告: batmanapollo

  91. Pingback引用通告: tsoy

  92. Pingback引用通告: 44548

  93. Pingback引用通告: 44549

  94. Pingback引用通告: hod-korolevy-2020

  95. Pingback引用通告: HD

  96. Pingback引用通告: 158444

  97. Pingback引用通告: groznyy-serial-2020

  98. Pingback引用通告: 38QvPmk

  99. Pingback引用通告: bitly.com/doctor-strange-hd

  100. Pingback引用通告: bitly.com/eternals-online

  101. Pingback引用通告: bitly.com/maior-grom

  102. Pingback引用通告: matrica-film

  103. Pingback引用通告: dzhonuikfilm4

  104. Pingback引用通告: bitly.com/batman20212022

  105. Pingback引用通告: bitly.com/venom-2-smotret-onlajn

  106. Pingback引用通告: bitly.com/nevremyaumirat

  107. Pingback引用通告: bitly.com/kingsmankingsman

  108. Pingback引用通告: bitly.com/1dreykfilm

  109. Pingback引用通告: bitly.com/topgunmavericktopgun

  110. Pingback引用通告: bitly.com/flash2022

  111. Pingback引用通告: bitly.com/fantasticheskietvari3

  112. Pingback引用通告: bitly.com/wonderwoman1984hd

  113. Pingback引用通告: 1444

  114. Pingback引用通告: cleantalkorg2.ru

  115. Pingback引用通告: 232dfsad

  116. Pingback引用通告: cleantalkorg2.ru/sitemap.xml

  117. Pingback引用通告: join vk

  118. Pingback引用通告: vk login

  119. Pingback引用通告: svaty—7—sezon

  120. Pingback引用通告: svaty 7 sezon

  121. Pingback引用通告: svaty 7

  122. Pingback引用通告: tik tok

  123. Pingback引用通告: 666

  124. Pingback引用通告: The Revenant

  125. Pingback引用通告: 00-tv.com

  126. Pingback引用通告: 2021

  127. Pingback引用通告: D4

  128. Pingback引用通告: 777

  129. Pingback引用通告: link

  130. Pingback引用通告: 4569987

  131. Pingback引用通告: news news news

  132. Pingback引用通告: psy

  133. Pingback引用通告: psy2022

  134. Pingback引用通告: projectio-freid

  135. Pingback引用通告: kinoteatrzarya.ru

  136. Pingback引用通告: topvideos

  137. Pingback引用通告: video

  138. Pingback引用通告: afisha-kinoteatrov.ru

  139. Pingback引用通告: Ukrainskie-serialy

  140. Pingback引用通告: site

  141. Pingback引用通告: top

  142. Pingback引用通告: soderzhanki-3-sezon-2021.online

评论已关闭。