怎么样在程序起动后其快捷图标自动放入桌面的任务栏最右边(与系统时间一起) 怎么样在程序起动后其快捷图标自动放入桌面的任务栏最右边,就像QQ一样~而且其窗体始终是在最前的(当其被执行时)也就是跟WINDOWS的任务管理器一样~总是只要其被打开其窗体始终是被置最前的~ 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 1、总在最前,设置主窗口的FormStyle为fsStayOnTop2、以下为无组件实现系统栏图标的代码unit Main;interfaceuses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, Menus, ShellAPI;const MyMessage = wm_user + 1001; MyData = 100;type TfrmMain = class(TForm) PopupMenu1: TPopupMenu; Exit1: TMenuItem; procedure Exit1Click(Sender: TObject); procedure FormCreate(Sender: TObject); procedure FormClose(Sender: TObject; var Action: TCloseAction); private { Private declarations } //自定義消息處理函數,處理鼠標點擊圖標事件 Icon: TIcon; procedure MouseMessage(var message: TMessage); message MyMessage; public { Public declarations } end;var frmMain: TfrmMain; IconData: TNotifyIconDataA;implementation{$R *.dfm}procedure TfrmMain.Exit1Click(Sender: TObject);begin Icon.Free; //释放图标资源 Shell_NotifyIconA(NIM_DELETE, @IconData); //清除系统栏的图标 Application.Terminate;end;procedure TfrmMain.MouseMessage(var message: TMessage);var MousePos: TPoint;begin inherited; case message.LParam of WM_LBUTTONDBLCLK: ShowMessage('Double Clicked.'); WM_RBUTTONUP: begin SetForegroundWindow(Handle); GetCursorPos(MousePos); PopupMenu1.Popup(MousePos.X, MousePos.Y); end; WM_LBUTTONUP: begin ShowWindow(Handle, SW_SHOW); ShowWindow(Application.Handle, SW_SHOW); end; end; message.Result := 0;end;procedure TfrmMain.FormCreate(Sender: TObject);begin Icon := TIcon.Create; Icon.LoadFromFile('E:\Projects\Icons\_xp\2.ico'); //这里载入Icon IconData.cbSize := SizeOf(TNotifyIconDataA); IconData.Wnd := Handle; IconData.uID := MyData; IconData.uFlags := NIF_MESSAGE + NIF_ICON + NIF_TIP; IconData.uCallbackMessage := MyMessage; IconData.hIcon := Icon.Handle; IconData.szTip := '这是系统栏图标'; Shell_NotifyIconA(NIM_ADD, @IconData);end;procedure TfrmMain.FormClose(Sender: TObject; var Action: TCloseAction);begin Action := caNone; ShowWindow(Handle, SW_HIDE); ShowWindow(Application.Handle, SW_HIDE);end;end. hthunter(核桃-我的心在下雨,雨中我和她携手漫步) ( ) 信请问~我按你的做了为什么会报这样的错呢?[Error] Main.pas(55): Undeclared identifier: 'Popup'这是怎么一回事呀? -_-#用过PopupMenu没有?窗体上需要放置一个TPopupMenu,然后添加一个名为Exit1的Item,并跟Onclick事件使用Exit1Click关联,窗体的OnClose、OnCreate事件分别跟FormClose、FormCreate事件关联…… 逼我出绝招-_-#//下面的代码用记事本保存为SystemIcon.dpr文件 **************************************program SystemIcon;uses Forms, Main in 'Main.pas' {frmMain};{$R *.res}begin Application.Initialize; Application.CreateForm(TfrmMain, frmMain); Application.Run;end.//下面的代码用记事本保存为Main.dfm文件 **************************************object frmMain: TfrmMain Left = 325 Top = 113 Width = 696 Height = 480 Caption = 'frmMain' Color = clBtnFace Font.Charset = DEFAULT_CHARSET Font.Color = clWindowText Font.Height = -11 Font.Name = 'MS Sans Serif' Font.Style = [] FormStyle = fsStayOnTop OldCreateOrder = False OnClose = FormClose OnCreate = FormCreate PixelsPerInch = 96 TextHeight = 13 object PopupMenu1: TPopupMenu Left = 100 Top = 76 object Exit1: TMenuItem Caption = 'Exit' OnClick = Exit1Click end endend//还有上面第一次提供的代码用记事本保存为Main.pas文件 ******************************在Delphi中,OpenProject->打开SystemIcon.dpr,编译运行…………………… 放入托盘有个第三方组件CoolTrayIcon,用着很方便的~~ hthunter(核桃-我的心在下雨,雨中我和她携手漫步)谢谢你~!大虾~我按你的做了~看到效果了~不过我想在一开始运行时就希望它就自动放入托盘了~而不是在我点了窗口的X时才放入啊~我应该怎么改呢? 上面的代码是一开始就有系统栏图标的啊,并且你开始的问题也没有提最小化的事情啊。你的意思是窗口启动后就最小化?并且最小化的时候只要系统栏图标、不要任务栏图标?上面的程序作这样的改动:1、窗体的windowsState属性设置为wsMinimized;2、在窗体中添加一个TApplicationEvents控件;3、在ApplicationEvents1的OnMinimize事件中添加如下代码: ShowWindow(Handle, SW_HIDE); ShowWindow(Application.Handle, SW_HIDE); 程序启动设置窗体的windowsState属性设置为wsMinimized;ShowWindow(Handle, SW_HIDE);ShowWindow(Application.Handle, SW_HIDE);在用控件trayicon就可以啊. hthunter(核桃-我的心在下雨,雨中我和她携手漫步)呵呵~你真强~实现 了~对了~我还想变一下!~就是我点窗体的右上角的X时我不希望窗体被放入托盘~而是希望窗体或都说系统退出了~不运行了!~怎么改呢? 《Delphi 5开发人员指南》第24章 扩展Windows外壳 79524.1 托盘图标组件 79524.1.1 API 79524.1.2 处理消息 79724.1.3 图标及提示 79724.1.4 鼠标点击 79824.1.5 隐藏应用程序 79924.1.6 托盘图标应用程序举例 805 吐血……要求可真多,你自己慢慢翻书或者google吧,可真没心情跟你纠缠下去了…… 最后一次满足你的要求…… -_-#把WM_LBUTTONUP那里改成这样: WM_LBUTTONUP: begin ShowWindow(Application.Handle, SW_RESTORE); ShowWindow(Application.Handle, SW_HIDE); SetWindowLong(Application.Handle, GWL_EXSTYLE, GetWindowLong(Application.Handle, GWL_EXSTYLE) or WS_EX_TOOLWINDOW and not WS_EX_APPWINDOW); ShowWindow(Application.Handle, SW_SHOW); ShowWindow(Handle, SW_RESTORE); end; 放入托盘有个第三方组件CoolTrayIcon,用着很方便的~~还有就是我不希望图标在任务栏出现~我只希望它一直在托盘里~不管怎么样都不会出现在任务栏里~而你那种只要窗体没有最小化,窗体的快捷图标就会出现在任务栏里出现的~只有当其最小化了图标才进入托盘~可是卓面上却就没有窗体了~这些都可以实现~~~ 为什么,每次新建一个stringgrid ,它总是获得一个蓝色鼠标选择 FastReport4的问题 可能是初级的问题:关于字符串数组 多条件查询问题,看看问题出在哪? 两个TMemoryStream比较内容是否相同有现成的比较函数不? C+ + 的Dll中的原型,如何在delphi中调用 如果我能做出界面,如何应用到窗体上去? 一个存储过程和临时表的问题: 向数据库中添加数据 请问&apos这个符号是什么呢? 如下C++动态库函数在DELPHI中怎么声明 如何显示word文档
2、以下为无组件实现系统栏图标的代码
unit Main;interfaceuses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, Menus, ShellAPI;const
MyMessage = wm_user + 1001;
MyData = 100;type
TfrmMain = class(TForm)
PopupMenu1: TPopupMenu;
Exit1: TMenuItem;
procedure Exit1Click(Sender: TObject);
procedure FormCreate(Sender: TObject);
procedure FormClose(Sender: TObject; var Action: TCloseAction);
private
{ Private declarations }
//自定義消息處理函數,處理鼠標點擊圖標事件
Icon: TIcon;
procedure MouseMessage(var message: TMessage); message MyMessage;
public
{ Public declarations }
end;var
frmMain: TfrmMain;
IconData: TNotifyIconDataA;implementation{$R *.dfm}procedure TfrmMain.Exit1Click(Sender: TObject);
begin
Icon.Free; //释放图标资源
Shell_NotifyIconA(NIM_DELETE, @IconData); //清除系统栏的图标
Application.Terminate;
end;procedure TfrmMain.MouseMessage(var message: TMessage);
var
MousePos: TPoint;
begin
inherited; case message.LParam of
WM_LBUTTONDBLCLK:
ShowMessage('Double Clicked.');
WM_RBUTTONUP:
begin
SetForegroundWindow(Handle);
GetCursorPos(MousePos);
PopupMenu1.Popup(MousePos.X, MousePos.Y);
end;
WM_LBUTTONUP:
begin
ShowWindow(Handle, SW_SHOW);
ShowWindow(Application.Handle, SW_SHOW);
end;
end; message.Result := 0;
end;procedure TfrmMain.FormCreate(Sender: TObject);
begin
Icon := TIcon.Create;
Icon.LoadFromFile('E:\Projects\Icons\_xp\2.ico'); //这里载入Icon
IconData.cbSize := SizeOf(TNotifyIconDataA);
IconData.Wnd := Handle;
IconData.uID := MyData;
IconData.uFlags := NIF_MESSAGE + NIF_ICON + NIF_TIP;
IconData.uCallbackMessage := MyMessage;
IconData.hIcon := Icon.Handle;
IconData.szTip := '这是系统栏图标';
Shell_NotifyIconA(NIM_ADD, @IconData);
end;procedure TfrmMain.FormClose(Sender: TObject; var Action: TCloseAction);
begin
Action := caNone;
ShowWindow(Handle, SW_HIDE);
ShowWindow(Application.Handle, SW_HIDE);
end;end.
[Error] Main.pas(55): Undeclared identifier: 'Popup'
这是怎么一回事呀?
用过PopupMenu没有?窗体上需要放置一个TPopupMenu,然后添加一个名为Exit1的Item,并跟Onclick事件使用Exit1Click关联,窗体的OnClose、OnCreate事件分别跟FormClose、FormCreate事件关联……
program SystemIcon;uses
Forms,
Main in 'Main.pas' {frmMain};{$R *.res}begin
Application.Initialize;
Application.CreateForm(TfrmMain, frmMain);
Application.Run;
end.
//下面的代码用记事本保存为Main.dfm文件 **************************************
object frmMain: TfrmMain
Left = 325
Top = 113
Width = 696
Height = 480
Caption = 'frmMain'
Color = clBtnFace
Font.Charset = DEFAULT_CHARSET
Font.Color = clWindowText
Font.Height = -11
Font.Name = 'MS Sans Serif'
Font.Style = []
FormStyle = fsStayOnTop
OldCreateOrder = False
OnClose = FormClose
OnCreate = FormCreate
PixelsPerInch = 96
TextHeight = 13
object PopupMenu1: TPopupMenu
Left = 100
Top = 76
object Exit1: TMenuItem
Caption = 'Exit'
OnClick = Exit1Click
end
end
end
//还有上面第一次提供的代码用记事本保存为Main.pas文件 ******************************
在Delphi中,OpenProject->打开SystemIcon.dpr,编译运行……………………
谢谢你~!大虾~我按你的做了~看到效果了~不过我想在一开始运行时就希望它就自动放入托盘了~
而不是在我点了窗口的X时才放入啊~
我应该怎么改呢?
你的意思是窗口启动后就最小化?并且最小化的时候只要系统栏图标、不要任务栏图标?
上面的程序作这样的改动:
1、窗体的windowsState属性设置为wsMinimized;
2、在窗体中添加一个TApplicationEvents控件;
3、在ApplicationEvents1的OnMinimize事件中添加如下代码:
ShowWindow(Handle, SW_HIDE);
ShowWindow(Application.Handle, SW_HIDE);
设置窗体的windowsState属性设置为wsMinimized;
ShowWindow(Handle, SW_HIDE);
ShowWindow(Application.Handle, SW_HIDE);
在用控件trayicon就可以啊.
你真强~
实现 了~
对了~
我还想变一下!~就是我点窗体的右上角的X时我不希望窗体被放入托盘~
而是希望窗体或都说系统退出了~不运行了!~
怎么改呢?
第24章 扩展Windows外壳 795
24.1 托盘图标组件 795
24.1.1 API 795
24.1.2 处理消息 797
24.1.3 图标及提示 797
24.1.4 鼠标点击 798
24.1.5 隐藏应用程序 799
24.1.6 托盘图标应用程序举例 805
把WM_LBUTTONUP那里改成这样: WM_LBUTTONUP:
begin
ShowWindow(Application.Handle, SW_RESTORE);
ShowWindow(Application.Handle, SW_HIDE);
SetWindowLong(Application.Handle, GWL_EXSTYLE,
GetWindowLong(Application.Handle, GWL_EXSTYLE) or
WS_EX_TOOLWINDOW and not WS_EX_APPWINDOW);
ShowWindow(Application.Handle, SW_SHOW);
ShowWindow(Handle, SW_RESTORE);
end;
我只希望它一直在托盘里~
不管怎么样都不会出现在任务栏里~
而你那种只要窗体没有最小化,窗体的快捷图标就会出现在任务栏里出现的~
只有当其最小化了图标才进入托盘~可是卓面上却就没有窗体了~这些都可以实现~~~