如何实现在任务栏上显示倒计时?

hjkto 2010-04-30 08:52:27
我想在任务栏上显示一个60分或120分的倒计时。格式,就像右下角的时间格式就行,字体是粗体,颜色红或蓝
字号当然越大越好,哪样看得方便。
这个倒计时时间,背景要透明,像屏幕右下角时间哪样。要一直置顶,不能被其它的任务栏按钮所挡住或覆盖掉,最好它可以用属标实现拖动,但不能拖出这个任务栏区?
这个效果要怎么写?
...全文
1178 32 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
32 条回复
切换为时间正序
请发表友善的回复…
发表回复
hjkto 2010-05-01
  • 打赏
  • 举报
回复

tiankun66不好意思,我忘记是你了。我重新发帖吧。说明是求代码帖。
大肚肥肥 2010-05-01
  • 打赏
  • 举报
回复
你等那些没事人帮你完成吧。
hjkto 2010-05-01
  • 打赏
  • 举报
回复
我已经把要求说的很清楚了,没有人会用500分,只求一个思路或一部分代码。
你如果能达到我的要求,我给你分,如果达不到,没分。
大肚肥肥 2010-05-01
  • 打赏
  • 举报
回复
那好吧,你知道怎么把窗体移动到制定区域,并移动任务栏位置么?

你自己先看过上面的代码吗?

hjkto 2010-05-01
  • 打赏
  • 举报
回复
在再,你的代码并不是关键代码,和我要的效果差很多
你看清题目了吗?
你的代码,对我来说,目前没有参考价值!
hjkto 2010-05-01
  • 打赏
  • 举报
回复
现在没环境去作它
大肚肥肥 2010-05-01
  • 打赏
  • 举报
回复
Form上放个timer,执行以下代码
var
Datestring: string;
begin
SetPosition;
datestring := TimeToStr(Now);
Canvas.TextOut(0, 0, datestring);
end;

SetPosition; 里面是调整位置的,你自己去调整吧

另外,作为技术,你是否合格。这里是技术讨论而已,并不是代替帮你开发。

就算这次行了,下一次呢?知识在自己手才是最珍贵的。

我们做技术的,别人给出关键代码,剩下的地方自己去完善就好了。。

我想问你,你连定时代码都不会写吗?

hjkto 2010-05-01
  • 打赏
  • 举报
回复
刚才又测试了22楼的程序,它是在开始按钮的旁边创建一个近似按钮的东西,但这个按钮只能改变颜色,不能给该按钮命名,而且,当打开任务管理器时,这个按钮就消失了。
ljluck7687 2010-05-01
  • 打赏
  • 举报
回复
这不就是一个托盘程序么?在托盘中显示的是动态改变的文本(用定时器处理就可以了)
hjkto 2010-05-01
  • 打赏
  • 举报
回复
背景没有透明,没有倒计时代码
其实这个东西,就是一个倒计时器,我觉得放在任务栏哪里比较明显,看着也方便。
这个东西的效果,应该就像“输入法”或“开始”按钮一样,开机启动后,始终在任务栏区间,最好在中间。
它应该是运行后,自动找到任务栏的可用位置,倒计时开始,在任务栏中,要不被覆盖,可以属性拖动。拖动范围在任务栏范围内

我运行22楼的代码,就是在任务栏上显示一个普通程序的按钮。
柯本 2010-04-30
  • 打赏
  • 举报
回复
[Quote=引用 13 楼 hjkto 的回复:]
引用 12 楼 keiy 的回复:
一个简单的实现思路,用TrayIcon,由于1个TrayIcon所能显示的区域较小,所以可用二个TrayIcon,系统设一定时器,对TrayIcon的Icon进行重画,应该可以实现


这个控件显示的图标不在任务栏区,在托盘区的
[/Quote]
TrayIcon就是用在托盘区的
hjkto 2010-04-30
  • 打赏
  • 举报
回复
谁能给我一个实例 学习一下?
大肚肥肥 2010-04-30
  • 打赏
  • 举报
回复
我贴我的代码给你吧

unit Unit1;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs;

type
TForm1 = class(TForm)
procedure FormCreate(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
HTrayWnd, HReBar, HBtnStar, ReplaceBtnHwnd, HNotifyWnd: HWND;
TrayWndRct, ReBarTct, BtnStarTct, NotifyWndTct: TRect;
procedure SetPosition;
procedure GetTraySize;

procedure CreateButton;
end;

var
Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.FormCreate(Sender: TObject);
begin
BorderStyle := bsNone;
HTrayWnd := FindWindow('Shell_TrayWnd', nil);
HReBar := FindWindowEx(HTrayWnd, 0, 'ReBarWindow32', nil);
HNotifyWnd := FindWindowEx(HTrayWnd, 0, 'TrayNotifyWnd', nil);
if Win32MajorVersion < 6 then
begin
HBtnStar := FindWindowEx(HTrayWnd, 0, 'Button', nil);
end
else
begin
HBtnStar := FindWindow('Button', nil);
end;
CreateButton;
end;

procedure TForm1.GetTraySize;
begin

try
if (Windows.GetWindowRect(HReBar, ReBarTct) = false) or (Windows.GetWindowRect(HTrayWnd, TrayWndRct) = false)
or (Windows.GetWindowRect(HBtnStar, BtnStarTct) = false)
or (Windows.GetWindowRect(HNotifyWnd, NotifyWndTct) = false)
then
begin
Application.MessageBox('错误,初始化获取数据失败,程序退出。', Pchar(Application.Title), MB_OK + MB_ICONERROR);
Application.Terminate;
Application.ShowMainForm := False;
end;
except
end;


end;

procedure TForm1.SetPosition;
var
BisWidth: Boolean;
begin
try
GetTraySize;
if TrayWndRct.Right - TrayWndRct.Left > TrayWndRct.Bottom - TrayWndRct.Top then //判断人无论是横向还是纵向
BisWidth := True
else
BisWidth := False;
if BisWidth then
begin
MoveWindow(Self.Handle, BtnStarTct.Right + 5, (TrayWndRct.Bottom - TrayWndRct.Top - Self.Height) div 2, 75, 25, true);
MoveWindow(HReBar, 75 + 5 + BtnStarTct.Right + 5, 0, NotifyWndTct.Left - 75 - 10 - BtnStarTct.Right, ReBarTct.Bottom - ReBarTct.Top, True)
end
else
begin
MoveWindow(Self.Handle, (TrayWndRct.Right - TrayWndRct.Left - Self.Width) div 2, BtnStarTct.Bottom + 3, 75, 25, true);
MoveWindow(HReBar, 0, BtnStarTct.Bottom + 25 + 6, ReBarTct.Right - ReBarTct.Left, NotifyWndTct.Top - 6 - 25 - BtnStarTct.Bottom, True);
end;
except
end;
end;

procedure TForm1.CreateButton;
begin
try
Self.ParentWindow := HTrayWnd;
Self.Visible := true;
Self.Width := 75;
Self.Height := 25;
Self.Left := -100;
Self.Caption := '';
SetPosition;
except
end;
end;
end.


haitao 2010-04-30
  • 打赏
  • 举报
回复
每秒用API函数将自己的窗体至于最上方一次,以免被遮挡
金卯刀 2010-04-30
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 mwy654321 的回复:]

你这个新贴用Setparent函数设置新句柄就可以实现了。
[/Quote]

沒這麼簡單吧,你有試過嗎?
hjkto 2010-04-30
  • 打赏
  • 举报
回复
[Quote=引用 12 楼 keiy 的回复:]
一个简单的实现思路,用TrayIcon,由于1个TrayIcon所能显示的区域较小,所以可用二个TrayIcon,系统设一定时器,对TrayIcon的Icon进行重画,应该可以实现
[/Quote]

这个控件显示的图标不在任务栏区,在托盘区的
柯本 2010-04-30
  • 打赏
  • 举报
回复
一个简单的实现思路,用TrayIcon,由于1个TrayIcon所能显示的区域较小,所以可用二个TrayIcon,系统设一定时器,对TrayIcon的Icon进行重画,应该可以实现
iqyely 2010-04-30
  • 打赏
  • 举报
回复
要学习下了,不懂。
LAZIJIDING 2010-04-30
  • 打赏
  • 举报
回复
进来学习一下
Come under study
无条件为你 2010-04-30
  • 打赏
  • 举报
回复
你这个新贴用Setparent函数设置新句柄就可以实现了。
加载更多回复(12)

1,183

社区成员

发帖
与我相关
我的任务
社区描述
Delphi Windows SDK/API
社区管理员
  • Windows SDK/API社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧