您现在的位置: 天下网吧 >> 网吧焦点 >> 网吧程序学习 >> Delphi学习 >> 样例分析 >> 正文

Delphi2010中Windows7新的taskbar功能的使

[作者:有个鼠窝 来源:有个鼠窝BLOG 时间:2011-5-26我来说两句

Windows7正式版已经用了很久了,MSDN上面正式版windows7已经发布很久了。

发现windows7的TaskBar很漂亮,也有很多功能。例如IE下载的时候可以看到进度,可以叠加图标等等特效。

Delphi2010也发布很久了,delphi2010号称支持windows7的新增API,那么看看有没有TaskBar相关的API。

一提到Taskbar相关,首先就想到ITaskBarList不同版本接口。到shlobj单元一看,果然增加了ITaskbarList3、ITaskbarList4两个新版本的接口。

老办法CreateComObject(CLSID_TaskbarList)就行了。返回的是一个ITaskBarList接口。看具体的操作系统,返回的是你操作系统所能支持的最高版本的ITaskBarList。

先来看进度条:

设计一个窗口

1.jpg

 

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
  Timer1.Enabled := not CheckBox1.Checked;
  // 不定的时候设了State就不能再设Value,否则会冲掉。
  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.

本栏目最新推荐
我来说两句
数据载入中,请稍后……
·请遵守《互联网电子公告服务管理规定》及中华人民共和国其他各项有关法律法规。
·用户发表意见仅代表其个人意见,并且承担一切因发表内容引起的纠纷和责任。
·本站管理人员有权在不通知用户的情况下删除不符合规定的评论信息或留做证据。
·请客观的评价您所看到的资讯,提倡就事论事,杜绝漫骂和人身攻击等不文明行为。
声明
本文来源地址:
声明:本站所发表的文章、评论及图片仅代表作者本人观点,与本站立场无关。若文章侵犯了您的相关权益,请及时与我们联系,我们会及时处理,感谢您对本站的支持!联系邮箱:support@txwb.com.
天下网吧·网吧天下
  • 本周热门
  • 本月热门
  • 阅读排行
网吧资讯,网吧软件,网吧技术,网吧无盘,网吧经营,网吧管理,网吧联盟。