Windows7新的Taskbar 在 Delphi 2010 中的编程应用

限时加码!20+主流AI编程工具免费用 购周边加赠Coding Plan Lite,Claude Code、Cursor等即刻畅享,学习进阶更高效! 阅读详情

Windows7新的Taskbar 在 Delphi 2010 中的编程应用

一提到Taskbar相关,首先就想到ITaskBarList不同版本接口.到shlobj单元一看,果然增加了ITaskbarList3,ITaskbarList4两个新版本的接口.
老办法CreateComObject(CLSID_TaskbarList)就行了.返回的是一个ITaskBarList接口.看具体的操作系统,返回的是你操作系统所能支持的最高版本的ITaskBarList.

TaskBar 的 进度条
设计一个窗口

Windows7新的Taskbar 在 Delphi 2010 中的编程应用 laquo; 易胜领地-Delphi编程 - yyimen - yyimen的博客

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.

运行看看效果.

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

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

TaskBar 的覆盖图标
就是可以再任务栏图标上再覆盖一个小图标,可以用表示状态之类的
新建一个窗口.放置一个ImageList,添加几个icon.再放一个Timer,我们用定时器来不停地变换覆盖图标.如果你的图标设置的足够好,还可以模拟动画效果啊.
Windows7新的Taskbar 在 Delphi 2010 中的编程应用 laquo; 易胜领地-Delphi编程 - yyimen - yyimen的博客

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.


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

在TaskBar上添加按钮

新版迅雷在Windows7上运行的时候会在缩略图上添加三个按钮.
可以实现任务的添加,下载,暂停等功能.
Windows7新的Taskbar 在 Delphi 2010 中的编程应用 laquo; 易胜领地-Delphi编程 - yyimen - yyimen的博客
我们也可以仿照一个.
新建一个窗口
Windows7新的Taskbar 在 Delphi 2010 中的编程应用 laquo; 易胜领地-Delphi编程 - yyimen - yyimen的博客

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.

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

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

delphi隐藏、显示操作系统任务栏.zip delphi开发隐藏、显示操作系统任务栏实例代码 立即下载

相关推荐

Delphi显示隐藏Windows任务栏.rar

Delphi显示隐藏Windows任务栏窗口,把任务栏隐藏掉不显示,当然这个程序还可以显示任务栏,觉得没有什么用,做系统优化软件的时候或许用得上。程序通过数组来保存任务栏名称,将变量nCmdShow设为SW_HIDE来隐藏窗口,设为SW_RESTORE来显示窗口,同时通过调用hideTaskbar过程隐藏任务栏,通过调用showTaskbar过程来显示任务栏,相关代码:   //将nCmdShow设为SW_RESTORE来显示窗口   procedure TForm1.Button1Click(Sender: TObject);   begin    hideTaskbar;    //调用hideTaskbar过程隐藏任务栏   procedure TForm1.Button2Click(Sender: TObject);   begin    showTaskbar;   //调用showTaskbar过程显示任务栏   end;

Delphi2010Windows7新的taskbar功能的使用

Windows7正式版已经用了很久了.MSDN上面正式版Windows7已经发布很久了.发现Windows7TaskBar很漂亮.也有很多功能.例如IE下载的时候可以看到进度,可以叠加图标等等特效.Delphi2010也发布很久了,Delphi2010号称支持Windows7的新增API.那么看看有没有TaskBar相关的API.一提到Taskbar相关,首先就想到ITaskBarList不同版

wr960204(武稀松)的专栏 7416

Delphi隐藏桌面图标、任务栏、开始菜单等..rar

Delphi隐藏桌面图标、任务栏、开始菜单等..rar

Delphi下让窗口不显示在任务栏的另类方法

刚才看到了这篇东西《使窗口不在任务栏上显示(利用ITaskbarList接口)》,作者用ITaskList接口实现了隐藏窗口在任务栏按钮的功能,想起我好多年以前做的程序也有这样的功能,但是绝不是用这些接口之类的做的,只是一个API函数就搞定了(好像是SetWindowLong()中传个什么参数吧,真的想不起来了),可惜程序实在是找不到了,当然ITaskbarList的功能要稍许比以前的那个API强

6527

怎样使用Delphi应用程序不在系统任务条上显示呢?

Delphi由Borland公司推出的Delphi是全新的可视化编程环境,为我们提供了一种方便、快捷的Windows应用程序开发工具。它使用了MicrosoftWindows图形用户界面的许多先进特性和设计思想,采用了弹性可重复利用的完整的面向对象程序语言(Object-OrientedLanguage)。今天小编给大家带来的一篇教程,怎样使用Delphi应用程序不在系统任务条上显示呢?

zyj66666的博客 1100

DELPHI 托盘 实例

 DELPHI 托盘  procedure InstallIcon;      /////////////安装托盘    procedure UninstallIcon;      ////卸载托盘    procedure IconOnclick(var msg:Tmessage); message  ICONEVENT;   ////托盘事件procedure TMain_F.Inst

潇湘博客 838

Delphi2010Windows7新的 taskbar 功能的使用

Windows7正式版已经用了很久了.MSDN上面正式版Windows7已经发布很久了.发现Windows7TaskBar很漂亮.也有很多功能.例如IE下载的时候可以看到进度,可以叠加图标等等特效.Delphi2010也发布很久了,Delphi2010号称支持Windows7的新增API.那么看看有没有TaskBar相关的API.一提到Taskbar相关,首先就想到ITaskBarList不同版本接口.到shlobj单元一看,果然增加了ITaskbarList3,ITaskbarList4两个新版本的接口

缘起§缘灭 986

DelphiWindows Taskbar API 编程,包括任务栏进度条,图标覆盖,任务栏缩略图,跳转列表

Taskbar API 参考MSDN: http://msdn.microsoft.com/en-us/magazine/dd942846.aspx 又一介绍Taskbar的文章: http://blogs.msdn.com/b/yochay/archive/2009/01/06/windows-7-taskbar-part-1-the-basics.aspx 跳转列表参见: htt

编程小战 5886

发现一个妖怪问题导致jumplist不工作

前两天在整理硬盘上的旧文件,为了避免有隐藏文件夹漏网,我打开了资源管理器的“显示隐藏文件和驱动器”这个功能。昨天突然发现资源管理器的jump list突然没有了(现在右键只有3个功能list,“关闭所有窗口”等)。 但是,其他程序“如记事本”和开始菜单的jump list都正常。 没安装过什么自启动软件,我也没有执行过软件优化。 我在各种网站都见过有人提出这样的问题,最早的追溯到09年。 简单的设置都不能解决问题。难道要重装才行?不干呢。 我尝试从自己前几天的备份里面恢复了 %APPDATA%/

Luke的技术博客 1097

Delphi实现把程序固定(pin)在win7任务栏上的办法

//Pin Icon to Win7 Taskbar ShellExecute(Application.Handle, 'TaskbarPin', 'APPNAME', nil, nil, SW_SHOW);

青草 绿叶 百合 2457

TaskBarProgress(任务栏进度条)

1 <Window.TaskbarItemInfo> 2 <TaskbarItemInfo /> 3 </Window.TaskbarItemInfo> 4 5 <Grid> 6 <ProgressBar x:Name="ProgressBar" Margin="10" 7...

weixin_33768481的博客 301
上一篇: Delphi中BitBlt函数实现屏幕对象抓图 - Delphi之窗
下一篇: Delphi XE中String、ANSIString、TBytes之间的转换
sun280
博客等级 码龄25年 3粉丝 457原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值