delphi trayicon的用法
Delphi7使用控件CoolTrayIcon时如何做到程序启动就最小化到托盘
Delphi7使用控件CoolTrayIcon时如何做到程序启动就最小化到托盘学习Delphi时,使用了第3方控件CoolTrayIcon。
CoolTrayIcon 的功能很强大,能够将程序添加进托盘,省去了我们再编写代码来实现托盘。
但是在看搜CoolTrayIcon的时候,发现好多朋友在求如何让程序在启动就最小化多托盘的方法。
但是貌似都不曾成功过。
笔者摸索了一下,成功实现了。
找原因首先我们来看一下CoolTrayIcon的功能函数:根据CoolTrayIcon的使用实例来看,CoolTrayIcon提供了函数HideMainForm()。
好吧我们如果在FromCreat里面如果调用该函数会发现没有任何反应。
为什么呢?我们接着跟踪这个函数看一下它的声明:procedure TCoolTrayIcon.HideMainForm;beginif Owner is T WinControl then // Owner might be of type TServiceif Appl ication.MainForm <> nil thenbegin// Hide the form itself (and t hus any child windows)Application.MainForm.Visible := False;{ H ide application's TASKBAR icon (not the tray icon). Do this AFTE Rthe main form is hidden, or any child windows will redisplay th etaskbar icon if they are visible. }HideTaskbarIcon;end;end;好吧,我们看到这里应该知道了吧。
如果你还不知道,可以对它设置断点调试,你就会发现函数声明的语句根本就没有进去。
Delphi编程制作托盘图标步骤讲解(精)
详细步骤如下:一.新建一个应用程序:File->New Applicaton 在Interface部分定义一个消息常量:const WM_NID=WM_USER+1000; 系统规定从WM_USER 开始为用户自定义消息。
二.定义一个全局变量: NotifyIcon:TNotifyIconData,NotifyIcon是非常重要的一个变量,整个程序基本上是围着这个变量在转。
TNotifyIconData是一个记录类型,按住Ctrl键,在TNotifyIconData 双击即进入ShellAPI.pas单元。
(注:在Delphi中,这是一个非常好的对源代码进行分析的方法,源代码说明一切,你要想知道程序背后的内幕,最好的方法就是分析源代码!)此时出现了以下赋值语句: TNotifyIconData = TNotifyIconDataA,这个意思很明显,就是说TNotifyIconData和TNotifyIconDataA是同种数据类型,接着往下看有: TNotifyIconDataA = _NOTIFYICONDATAA,意思与刚才的一样,再往下看: type _NOTIFYICONDATAA = record cbSize: DWORD; Wnd: HWND; uID: UINT; uFlags: UINT; uCallbackMessage: UINT; hIcon: HICON; szTip: array [0..63] of AnsiChar; end; 这可真是“千呼万唤始出来,犹抱琵琶半遮面”。
现在大家很清楚了,我们刚才定义的全局变量NotifyIcon其实是一个包含有7个成分的记录类型变量,就相当于C/C++中的结构体变量(C/C++的程序员应该是再熟悉不过了)。
下面我们逐个来解释记录类型中的7个部分各有什么功能。
1> cbSize就是你定义的NotifyIcon变量的大小,用SizeOf(TNotifyIconData可以取得,如果你是一个熟练的C/C++程序员,你应该不会陌生。
trayicon 句柄
trayicon句柄在Windows操作系统中,系统托盘图标(System Tray Icon)是应用程序以图标形式显示在任务栏通知区域(也称为系统托盘)的一种方式。
每个托盘图标都有一个与之相关的窗口句柄(Handle),开发者可以使用这个句柄与该图标进行交互操作。
在Windows平台上,要获取系统托盘图标的句柄,通常需要使用一些编程语言(如C++、C#等)和相关的系统调用来实现。
下面是一个使用C#获取系统托盘图标句柄的示例:using System;using System.Runtime.InteropServices;class Program{[DllImport("user32.dll",SetLastError=true)]private static extern IntPtr FindWindow(string lpClassName,string lpWindowName);[DllImport("user32.dll",CharSet=CharSet.Auto)]private static extern IntPtr SendMessage(IntPtr hWnd,uint Msg,IntPtr wParam,IntPtr lParam);private const int WM_GETICON=0x7F;private const int ICON_SMALL=0;private const int ICON_BIG=1;static void Main(){IntPtr taskBarHandle=FindWindow("Shell_TrayWnd",null);if(taskBarHandle!=IntPtr.Zero){IntPtrsysTrayHandle=FindWindowEx(taskBarHandle,IntPtr.Zero,"TrayNotifyWnd", null);if(sysTrayHandle!=IntPtr.Zero){获取系统托盘中小图标的句柄IntPtriconHandle=SendMessage(sysTrayHandle,WM_GETICON,(IntPtr)ICON_SMALL,In tPtr.Zero);Console.WriteLine("SystemTrayIconHandle:"+iconHandle.ToString()); }}}}这段代码使用了FindWindow和SendMessage等函数来定位系统托盘窗口及其子窗口(包括托盘图标),并获取小图标的句柄。
DELPHI常用控件属性设置说明
常用DELPHI控件属性设置说明目录TForm Class (1)TPanel组件 (4)TToolBar Class (5)TToolButton Class (8)TTimer Class (8)TADOConnection Class (8)TADOQuery Class (10)TADODataSet Class (10)TDBGrid Class (11)TADOStoredProc Class (12)TButton Class (13)TBitBtn Class (13)TComboBox Class (13)TStaticText Class (14)TLabel Class (14)TEdit Class (15)TGroupBox Class (15)TRadioGroup Class (15)TListbox Class (15)TTreeView Class (16)TDataModule Class (17)VC++使用串口 (17)I. Open (18)II. Configuration (19)III. Read (20)IV. Write (21)V. Close (22)Conclusion (22)License (22)TForm ClassTForm代表一个标准的应用程序窗口。
在设计阶段,当你在窗体设计器内创建窗体时,他们作为窗体类的子节点被执行。
窗体能代表应用程序的主窗口,或者对话框,或MDI的children。
一个窗体能包含其它对象,如TButton, TCheckBox和TComboBox对象等。
ArrangeIcons:安排最小化MDI子窗体的图标;Cascade:排列MDI子窗体,使他们重叠;Next:激活在窗体队列中的下一个子窗体;Previous:激活在窗体队列中的前一个MDI子窗体;Title:排列MDI子窗体,使他们都是一样的大小。
Action:指定与控件有关的活动;ActiveControl:指定以窗体为焦点的控件;Align:控件如何停靠在容器(父控件)中;AlphaBlend:指定窗体是否透明;AlphaBlendValue:指定一个透明窗体的半透明度;Anchors:指定控件如何固定到其父控件上;AutoScroll:如果窗口不足以显示它内部的所有控件时,滚动条是否自动显示在滚动窗口控件中;AutoSize:指定控件是否自动调节其大小去容纳自身内容;BiDiMode:指定控件的双向风格;BorderIcons:指定显示在窗体标题栏的图标;BorderStyle:指定窗体边框的外表和行为;BorderWidth:指定控件边框的宽度;Caption:指定用户辨别控件的文本字符串;ClientHeight:指定窗体客户区域的高度(像素);ClientWidth:指定窗体客户区域的宽度(像素);Clore:指定控件的背景色;Constraints:指定控件的尺寸约束。
在DELPHI中实现系统托盘图标
p o eu e cn n 1 c v r e sg r c d r I o O C i k( a m s a e: T s a e : m s a e Me s g ) e sg
我们知道 ,W d w i o s是基于消息处理机制的操作系统 。任何一个动 n
作都是通过对 消息的处理来实现的 ,而该动作 的接 收者是一个控件,例
责任奠羹 ,陈康宁
来稿请寄:d v lp r c ir u .o e e oe O b go p cr n
如 鼠 单击 ,按钮按下等等 ,一个动作就产 生一条或者多条消息 ,通过 标
f to  ̄c inS id ( n 呻 } :埘 : h 呷 :Itgr :B O ;sda l 澌试 } n ee) OL tcl ;
M C N VN ; II [E E T I
/ 响应图标上的鼠标事件 /
该函数的声明指 出,该过程是 一个事件 ,当产 生事件 的发生者 是图标 时,就调 用该 函数来处理 事件 。
T o iy cn a a = rc r N t f I o D tA eo d
c Si e : I R b z  ̄O D: V d :H N h l W D: uD :UN : I I T u lg :UN : Fas I T
e nd:
不足的是 ,在状态指示区显示应用程序图标 的同时,任务切
换区也存在此应用程序的按钮,怎么让它不出现在任务切换
区上呢 ?这里又要提到一个系统调用 So W n o ,它的说明 h w id w
如下 ( 自D lh 的 S u c \T \ I \ idw .a 文件 ) 摘 ep i o r e RL W Nw n o sp s :
delphi托盘窗体编程
在Delphi 7下要制作系统托盘,只能制作一个比较简单的系统托盘,因为ShellAPI 文件定义的TNotifyIconData 结构体是比较早的版本。
定义如下:123456789 _NOTIFYICONDATAA = record cbSize: DWORD; Wnd: HWND; uID: UINT; uFlags: UINT; uCallbackMessage: UINT; hIcon: HICON; szTip: array [0..63] of AnsiChar; end ;下面开始实现下最小化到系统托盘功能:1.新建应用程序,然后在“菜单栏”→“Project”→“Options”→”Application“为程序设定下标题和图标,一定得设置图标,不让显示系统托盘的时候就会空白;2.在窗体上放置一个右键菜单,添加两个菜单项,如下图所示:3.窗体单元文件代码如下:010203040506070809101112131415 unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, ShellAPI, Menus; const WM_TRAYMSG = WM_USER + 101; //自定义托盘消息 type TForm1 = class (TForm) pm1: TPopupMenu; mniN1: TMenuItem; mniwo1: TMenuItem;16171819202122232425262728293031323334353637383940414243444546474849505152535455565758procedure FormCreate(Sender: TObject);procedure FormDestroy(Sender: TObject);procedure mniN1Click(Sender: TObject);privateprocedure WMTrayMsg(var Msg: TMessage);message WM_TRAYMSG; //声明托盘消息procedure WMSysCommand(var Msg: TMessage);message WM_SYSCOMMAND;public{ Public declarations }end;varForm1: TForm1;NotifyIcon: TNotifyIconData; //定义托盘图标结构体implementation{$R *.dfm}{------------------------------------------------------------------------------- Description: 窗体创建时,即创建托盘-------------------------------------------------------------------------------} procedure TForm1.FormCreate(Sender: TObject);beginwith NotifyIcon dobegincbSize := SizeOf(TNotifyIconData);Wnd := Self.Handle;uID := 1;uFlags := NIF_ICON + NIF_MESSAGE + NIF_TIP; //图标、消息、提示信息uCallbackMessage := WM_TRAYMSG;hIcon := Application.Icon.Handle;szTip := '托盘测试';end;Shell_NotifyIcon(NIM_ADD,@NotifyIcon);end;{------------------------------------------------------------------------------- Description: 窗体销毁时,卸载托盘-------------------------------------------------------------------------------} procedure TForm1.FormDestroy(Sender: TObject);beginShell_NotifyIcon(NIM_DELETE,@NotifyIcon);end;{------------------------------------------------------------------------------- Description: 截获窗体最小化消息,最小化到托盘-------------------------------------------------------------------------------}596061626364656667686970717273747576777879808182838485868788899091 procedure TForm1.WMSysCommand(var Msg: TMessage);beginif Msg.WParam = SC_ICON thenSelf.Visible := FalseelseDefWindowProc(Self.Handle,Msg.Msg,Msg.WParam,Msg.LParam);end;{------------------------------------------------------------------------------- Description: 自定义的托盘消息-------------------------------------------------------------------------------} procedure TForm1.WMTrayMsg(var Msg: TMessage);varp: TPoint;begincase Msg.LParam ofWM_LBUTTONDOWN: Self.Visible := True; //显示窗体WM_RBUTTONDOWN:beginSetForegroundWindow(Self.Handle); //把窗口提前GetCursorPos(p);pm1.Popup(p.X,p.Y);end;end;end;{------------------------------------------------------------------------------- Description: 测试菜单项-------------------------------------------------------------------------------} procedure TForm1.mniN1Click(Sender: TObject);beginShowMessage('One');end;end.4.运行结果如下:参考MSDN(/en-us/library/bb773352(VS.85).aspx)对NOTIFYICONDATA结构体的介绍却是:typedef struct _NOTIFYICONDATA {DWORD cbSize; //结构体的大小,以字节为单位HWND hWnd; //窗口的句柄UINT uID; //应用程序定义的任务栏图标的标识符UINT uFlags; //此成员表明具体哪些其他成员为合法数据UINT uCallbackMessage; //应用程序定义的消息标示HICON hIcon; //增加、修改或删除的图标的句柄TCHAR szTip[64]; //指向一个以/0结束的字符串的指针DWORD dwState; //Version 5.0,图标的状态DWORD dwStateMask; //Version 5.0. 指明dwState成员的那些位可以被设置或者访问TCHAR szInfo[256]; //指向一个以/0结束的字符串的指针,字符串的内容为气球提示内容union {UINT uTimeout; //表示气球提示超时的时间,单位为毫秒,此时间后气球提示将消失UINT uVersion; //用来设置使用Windows 95 还是 Windows 2000风格的图标消息接口};TCHAR szInfoTitle[64]; //指向一个以/0结束的字符串的指针。
Delphi常用技巧帮助
Delphi常用技巧帮助| 留言交流| 登录Delphi常用技巧在网上行走时,经常会看到弹出的桌面小窗体,有时做广告,有时向你致以节日的问候;人们称其为桌面小精灵;有的桌面小精灵会自动移动,有的固定在屏幕的某一角落,动画闪烁,煞是迷人。
本人用Delphi制作了一款桌面小精灵,愿与大家共享。
桌面小精灵的实现功能:当运行时,在屏幕的左下角显示一无边框、无标题栏的小窗体,并自动向屏幕的右上角移动,窗体上的小精灵——可爱的马先生,一会跃起,高呼“马到成功!”,一会含情脉脉地向你招手“再见”;同时,还不断地闪烁显示当前时间,时刻提醒你抓紧时间呦!当你嫌它碍事时,你可以按下鼠标左键,将它拖到任意位置。
如果你厌烦它不停移动,你可以双击鼠标左键,它会老老实实地呆在原地不动,只要你用鼠标轻轻一点,它又会高高兴兴地上路,当你单击“再见”时,桌面小精灵就会消失,你不想一试身手吗?请跟我来!运行后效果图生成一窗体,设置窗体属性如下:Name属性为Form1,BorderStyle属性为bsNone,FormStyle 属性为StyOnTop,Height属性值240,Width属性值209。
窗体上分别添加组件,设置属性如下:(1)添加两个Image组件,Name属性分别设为Image1、Image2,Align属性均设为alClient(以使Image组件充满整个窗体),Image1的Enabled为False,Image2的Enabled为True,然后通过Picture属性为Image1、Image2添加图片(适合的图片格式:BMP、JPG )。
(2)在Image上再添加两个Timer组件,Name属性分别为Timer1、Timer2,Enabled属性均为True,Interval属性均为1000毫秒。
(3)在Image上再添加一个Label组件,Name:=Label1,Caption:=“马到成功!”,Enabled:=True,Font属性为“华文行楷,粗斜体,三号字,红色”(根据你的图片设置适当的字体、字号、字体颜色)。
利用Delphi全面控制Windows任务栏
利用Delphi全面控制Windows任务栏使用Windows95/NT/98操作系统的用户知道:Windows正常启动后,在电脑屏幕下方出现一块任务栏。
从系统功能角度而言,整个任务栏包括几个不同的子区域,从左至右依次是:开始按钮、应用程序切换区(Application Switch Bar)、任务栏通知区(Notification Area)以及任务栏时钟。
与其它Windows应用程序相同,任务栏程序()由几个不同的窗体组成,这些窗体是具有各自的窗口类名、显示方式等信息。
因此,只要得到有关窗口信息,即可通过编程全面控制Windows任务栏的不同区域。
编程思想任务栏窗体的窗口信息为:任务栏的窗口类名是:ShellTrayWnd。
开始按钮的窗口类名是:Button。
应用程序切换区的窗口类名是:ReBarWindow32。
任务栏通知区的窗口类名是:TrayNotifyWnd。
任务栏时钟的窗口类名是:TrayClockWClass。
调用FindWindow函数得到任务栏的窗口句柄。
调用FindWindowEx函数得到任务栏各子区域的窗口句柄。
根据窗口句柄,调用ShowWindow函数控制任务栏各区域显示或隐藏(show/hide);调用En ableWindow函数控制任务栏各区域有效或无效(enabled/disabled)。
编程方法在 IDE中新建工程Project1, Project1中包含Form1, 窗体如下图所示(2)定义窗口句柄数组:Wnd:array[0..4]过程代码得到Tray Bar 的窗口句柄;[0]:=FindWindow(′ShellTrayWnd′,ni 得到开始按钮的窗口句柄;[1]:=FindWindow(′ShellTrayWnd′,ni[1]:=FindWindowEx(Wnd[1]得到应用程序切换区的窗口句柄;[2]:=F indWindow(′ShellTrayWnd′,ni[2]]:=FindWindowEx(Wnd[2],HWND(0),′ReBarWindow32′,nil);得到任务栏通知区的窗口句柄;[3]:=FindWindow(′ShellTrayWnd′,ni [3]:=FindWindowEx(Wnd [3],HWND(0),′TrayNotifyWnd′,nil);得到任务栏时钟的窗口句柄;[4]:=FindWindow(′ShellTrayWnd′,n i [4]:=FindWindowEx(Wnd [4],HWND(0),′TrayNotifyWnd′,nil);[4]:=FindWindowEx(Wnd[4],HWND(0),′TrayCLockWClass′,nil ;过程代码EnableWindow(Wnd[0]EnableWindow(Wnd[1]EnableWindow(Wnd[2]EnableWindow(Wnd[3]EnableWindow(Wnd[4][0]EnableWindow(Wnd[1]EnableWindow(Wnd[2]EnableWindow(Wnd[3]EnableWindow(Wnd[4],过程代码ShowWindow(Wnd[0]ShowWindow(Wnd[1]ShowWindow(Wnd[2]ShowWindow(Wnd[3]ShowWindow(Wnd[4]ShowWindow(Wnd[0]ShowWindow(Wnd[1]ShowWindow(Wnd[2]ShowWindow(Wnd[3]ShowWindow(Wnd[4](6)FormClose事件代码//将Windows任务栏恢复到正常状态;(Sender:TObject; var Action:[i]wWindow(Wnd[i]按F9运行程序。
Delphi中TApplication详解
Delphi中TApplication详解TApplication是用于Delphi应用程序的类型,该类在单元forms中声明。
TApplication是Delphi构造Windows应用程序所需的类型,其方法和属性集中包括了Windows操作系统中创建、运行和销毁应用程序等既定的基本操作和属性,因此在用Delphi 编写Windows应用程序时简化了用户和Windows环境之间的接口。
TApplication封装了以下功能:1、Windows消息处理。
2、上下文联机帮助。
3、菜单加速和键盘处理。
4、异常处理。
5、管理由Windows操作系统为应用程序定义的基本部分,如主窗口、窗口类等。
每个Delphi应用程序自动声明一个Application变量作为应用程序的实例。
如果Delphi应用程序不是一个Web服务器应用程序,那么该变量一定是TApplication类型。
因此TApplication 不需要出现在组件选择板(component palette)中,并在窗体设计器(form designer)中也不能对其进行可视化操作,故TApplication不具有发布属性(published properties)。
不过,TApplication的公共属性(public properites)在设计时(design-time)是可以设置或修改的,如在Project|Options对话框的Forms和Application页面中。
下面就向大家介绍TApplication中的大部分属性、方法和事件。
1、属性Active指明了应用程序是否处于活动状态且拥有焦点。
定义如下:property Active: Boolean;Active是只读属性。
当应用程序是活动状态时Active为True,否则为False。
TApplication的构造器(constructor) 置Active为True。
如果窗口或应用程序拥有焦点,那么该应用程序是活动的。
Delphi中TApplication类的巧用
Delphi中TApplication类的巧⽤---- Delphi是⼀种⾯向对象的编程语⾔,由于它采⽤完全集成OOP的优点,因此使它成为⽬前⼗分流⾏的Windows开发⼯具。
在Delphi包含的众多类中,TApplication是⼀个有着⼗分重要作⽤的类。
TApplication类是⽤于描述Delphi编制的应⽤程序的⼀个类。
通过对这个类的灵活应⽤可以编制许多有特点的程序。
下⾯我们就举⼏个这⽅⾯的例⼦。
---- 1 检测当前Windows程序是否被激活:---- Tapplication类有⼀个属性——Active,这个属性就可以描述当前运⾏的程序是否被激活,成为Windows的焦点。
检测的代码如下:If Application.Active=False thenShowMessage(’当前窗⼝没有被激活’);---- 2 取得当前程序的名称:---- Tapplication类的EXEName属性可以返回这个可执⾏程序的完整⽂件名(包含路径)。
实现的代码如下所⽰:---- ShowMessage(Application.ExeName);---- 3 改变程序极⼩化时的标题---- 如果您细⼼观察可以发现,⼀些程序的标题和程序的名称并不⼀致,尤其是⼀些英⽂程序,窗体的标题栏⽐较长,可以容纳⽐较多的⽂字,⽽在最⼩化时,往往变成了很少的⼏个字母。
这中间起作⽤的就是Tapplication类的Title属性。
这个属性决定了程序最⼩化时的标题,⽽窗⼝中标题栏的标题是由Form的Caption属性来决定的。
其代码如下:Form1.Caption:=’ 窗⼝的标题’;Application.Title:=’程序的标题’;---- 其实我们也可以在在程序设计时指定Tapplication类的Title属性值。
操作的⽅法是在开发环境中拉下Project菜单,选择Options菜单时弹出如图1 (略)的对话框。
delphi常用属性说明和使用方法
常用【属性】Action:该属性是与组件关联的行为,允许应用程序集中响应用户命令Anchors:与组件连接的窗体的位置点Align:确定组件的对齐方式AutoSize:确定组件是否自动调整其大小BiDiMode:(所有组件)为从右向左写的语言提供支持BoundsRect:定义组件边框矩形(只适用于运行时)Borderwidth:(窗口化组件)边框的宽度BorberStyle:设置组件边框形状(样式)Brush:可确定组件的风格和颜色Caption:使用该属性可指定标注组件的文本字符串ClassName:该方法可得到对象的类名,我一直用它来得到数据库中字段的类型,在其它的方面还没有用到ClientHeight:可读取和设置组件客户区域的像素高度ClientRect:可返回组件客户区的大小,为一个矩形ClientWidth:可读取和设置组件客户区域的像素宽度Color:组件的背景颜色Components:列出了该组件中所有的子组件,并可以对它们进行访问ComponentIndex:(所有组件)当前组件在其主组件所有的从组件列表中的位置(只适用于运行时) ComponentCount:显示该组件拥有的子组件数 (只适用于运行时)Constraints:(所有组件)在改变大小操作期间限定组件)的最大与最小尺寸ConstrolCount:(所有组件)当前组件的子组件数目(只适用于运行时)Controls:(所有组件)当前组件的子组件数组(只适用于运行时)Create:构造一个对象实例,分配内存,并不初始化Ctrl3D:设置组件边框是否为3D模式,若BORDERSTYLE设置为BSNONE则此属性无效Cursor:指定指针的图像(鼠标经过组件时光标所显示的形状)Destroy:销毁一个对象实例DragCursor:拖动时,鼠标的形状DragKing:可获取或设置组件是拖动还是停靠操作,分别对应Drag和DockDragMode:设置组件拖动模式。
Delphi使用控件的技巧
Delphi使用控件的技巧最新Delphi 使用控件的技巧以下是三零网为大家整理的最新Delphi 使用控件的技巧的文章,希望大家能够喜欢!丰富多彩的标签。
我们已经不满足于Delphi提供的简单的标签,能不能在标签中有不同的字体,有不同的颜色,以此来丰富我们的表现能力。
回答是肯定的,并且用不着第三方提供的控件,我们只要巧妙的利用Delphi自己提供的TRichEdit就可以了。
首先将TRichEdit控件的边框去除:RichEd it1.BorderStyle:ΚbsNone;同时设置只读属性为真:RichEd it1.ReadOnly:ΚTrue;然后,你利用write之类的软件制作好RichText格式的文本,通过以下语句就可以显示出来了:RichEdit1.PlainText:ΚFalse;RichEdit1.Lines.LoadFromFile(′c:ιtest.rtf′);在Delphi中实现类似VB中的控件数组。
你可以通过设置一组相应控件的TAG属性来实现这一功能。
首先在窗体中放置3个BUTTON控件,然后分别设置这三个控件的TAG属性为1、2、3。
接下来双击任意一个按钮,在其代码部分输入如下代码:procedureTForm1.Button1Click(Sender:TObject);varcap:string;begincaseTButton(sender).Tagof1:ShowMessage(′1stButtonPressed′);2:ShowMessage(′2ndButtonPressed′);3:ShowMessage(′3rdButtonPressed′);end;end;最后在其他两个按钮的ONCLICK事件中选择已经编好的代码。
这样一来就可以实现以上功能了。
在Delphi中实现不同风格的SPEED BUTTON。
在许多常用的软件(如WORD)中经常会遇到这样的快捷按钮(SPEEDBUTTON):若干个按钮做为一组来工作,同一时刻只能有一个按钮处于按下状态,比如WORD中的四个段落排版按钮。
DELPHI基础教程:Delphi拖放编程[3]
DELPHI基础教程:Delphi拖放编程[3]在TabSet拖放中我们用下面的MouseDown事件处理过程来开始一个标签的拖动首先判断按下的是否是左键而后再判断项目是否合法procedure TForm TabSet MouseDown(Sender: TObject; Button: TMouseButton;Shift: TShiftState; X Y: Integer)varDragItem: Integer;beginif Button = mbLeft thenbeginDragItem := TabSet ItemAtPos(Point(X Y))if (DragItem > ) and (DragItem < TabSet Tabs Count)thenTabSet BeginDrag(False)end;end;接收拖动项目一个控件能否接收拖动项目是由该控件的OnDragOver事件决定的在TabSet拖动中主要是利用鼠标的位置进行判断procedure TForm TabSet DragOver(Sender Source: TObject; X Y: Integer;State: TDragState; var Accept: Boolean)varDropPos: Integer;beginif Source = TabSet thenbeginDropPos := TabSet ItemAtPos(Point(X Y))Accept := (DropPos > )and (DropPos <> T abSet TabIndex) and(DropPos < TabSet Tabs Count)end;elseAccept := False;end;放下拖动项目当OnDragOver事件处理过程返回的Accept为True且项目被放下时由OnDragDrop事件处理过程来完成拖动放下后的响应在TabSet拖放实例中是改变标签的位置procedure TForm T abSet DragDrop(Sender Source: TObject; X Y: Integer)varOldPos: Integer;NewPos: Integer;beginif Source = TabSet thenbeginOldPos := TabSet T abIndex;NewPos := TabSet ItemAtPos(Point(X Y))if (NewPos > ) and (NewPos <> OldPos) thenTabSet Tabs Move(OldPos NewPos)end;end;结束拖动操作结束拖动操作的方式有两种或者是用户释放了鼠标键或者是程序用EndDrag *** 强行中止拖动结束拖动操作的后果有两种放下被接受或放下被忽略拖动操作结束后源控件都要收到一条消息响应拖动结束事件OnEndDrag拖放应用实例文件管理器的拖放支持在第六章最后开发的文件管理器应用实例虽然功能上已初具规模但在操作上与Windows的文件管理器相比还有很大不足其中最大的缺陷是它不支持文件的拖放移动和拖放拷贝在这一章结束的时候我们可以来弥补这一缺陷了文件拖放移动指的是当用户把一个文件拖动到目录树下的某一目录并放下时文件将自动移动到该目录中文件拖放拷贝指的是当用户把一个文件拖动到某个驱动器标签上并放下时文件将自动拷贝到该驱动器的当前目录下作为源控件的文件列表框和作为目标控件的目录树驱动器标签可以位于不同的子窗口驱动器的当前目录是任一子窗口的最新操作结果而不论这一子窗口与拖动源拖动目标是否有关系为了实现上述功能有两个问题必须首先解决如何记录每一驱动器的当前目录?为此我们定义了一个全局变量varCurentDirList: Array[ … ] of strin g[ ];在DirectoryOutline的OnChange事件中procedure TFMForm DirectoryOutlineChange(Sender: TObject)beginCreateCaption;FileList clear;FileList Directory := DirectoryOutline Directory;FileList Update;CurrentDirList[DriveTabSet TabIndex] := DirectoryOutline Directory;FileManager DirectoryPanel Caption := DirectoryOutline Directory;end;由于DriveTabSet在响应OnDragDrop事件前先响应OnClick事件并由该事件激发DirectoryOutline的Onchange事件因而可保证在任何时候OnDragDrop事件中用到的CurrentDirList数组项不为空字符串如何保证移动拷贝与子窗口的无关性?在这里一个关键问题是我们判断源控件时是用is操作符进行类型检查If Source is TFileList then…如果我们用下面的语句If Source = FileList then…则移动拷贝操作将限制在本子窗口范围内当解决了上述问题后我们的工作就只是遵循拖放的一般开发步骤按步就班来完成了FileList开始拖动操作procedure TFMForm FileListMouseDown(Sender: TObject; Button: TMouseButton;Shift: TShiftState; X Y: Integer)beginif Button = mbLeft thenwith Sender as TFileListBox dobeginif ItemAtPos(Point(X Y) True) >= thenBeginDrag(False)end;end;ItemAtPos用来检查当前是否有文件存在而BeginDrag *** 传递参数False 允许FileList单独处理鼠标事件而并不开始拖动事实上这种情况是大量存在的lishixinzhi/Article/program/Delphi/201311/25211。
delphi常用组件的使用
它是一个可视化及灵活性都比较好的分组框组件, 可作为放置组件的容器,在播放视频多媒体时我们用 它作为播放的屏幕。它与GroupBox组件的不同之处是 它没有标题,不过Panel组件有丰富的边框风格,这是 GroupBox组件所不具有的,可通过设置BevelInner属 性和BevelOuter属性来改变Panel组件的边框样式。
Bitbtn组件
Bitbtn组件也称为位图组件,它位 于组件面板的Additional标签页,与 Button组件很相似,只是多了一个位图 符号在按钮上。该组件用于创建一个其 上带有位图的按钮(例如:带有对号的 OK按钮,带有错号的Cancel按钮,带有 问号的Help按钮等)。
Bitbtn组件的常用属性
Kind Kind属性的值就是位图按钮组件上所显示的图 标。在对象监视器的Properties页中,单击Kind属性 后的下拉三角按钮,从弹出的下拉列表中,列出了一 组默认图标的属性值,有:bkAbort、bkAll、 bkCancel、bkClose、bkCustom、bkHelp、bkIgnore、 bkNo、bkOK、bkRetry、bkYes。从中选择一个值后, 你就可以从位图按钮中的图标上直观、清晰地看出该 按钮的功能。
Flat 用于设置在鼠标移动到该按钮上时,按钮 是否出现三维效果。若设置为FALSE,则不会 出现三维效果。
GroupIndex 用于将数个加速按钮设置成一组, 只需将其值设置成不等于0的数值即可。
RadioButton组件
RadioButton组件也称为单选框按钮, 它位于组件面板的Standard标签页。此 类组件通常会被组成一组,并且在同一 组中,同一时刻只能选择一个单选按钮, 其余按钮都处于非选中状态。
Delphi 托盘相关代码
最小化到托盘
procedure WMSysCommand(var Msg: TWMSysCommand); message WM_SYSCOMMAND;
procedure TForm1.WMSysCommand(var Msg: TWMSysCommand);
begin
if Msg.CmdType = SC_MINIMIZE then
GetWindowRect(hwndChild, rcTray);
//点击用于最大化/最小化,并切换起始/结束
if AOperation = zaMinimize then
begin
rcStart := AForm.BoundsRect;
rcEnd := rcTray;
end
else begin
if not ShowOnTop then
SetWindowPos(Self.Handle , HWND_NOTOPMOST, 0,0,0,0, SWP_NOMOVE + SWP_NOSIZE) //普通窗口
else
SetWindowPos(Self.Handle, HWND_TOPMOST, 0,0, 0,0, SWP_NOMOVE + SWP_NOSIZE); //最上面
rcEnd := AForm.BoundsRect;
rcStart := rcTray;
end;
DrawAnimatedRects(AForm.Handle, IDANI_CAPTION, rcStart, rcEnd);
end;
再分别在OnCloseQuery中添加
ZoomEffect(Self, zaMinimize);
delphi2007第三方控件安装收藏
首先获取要修改的行号,InserRow在插入一行后,会返回当前行的行号。下面再使用ItemProps属性修改“行”的属性:
with ValueListEditor1.ItemProps[Index - 1].PickList do begin
托盘显示
(1)“气泡提示”的制作
第一步:在窗体中放置TrayIcon控件(Additional面板中可以找到)。
第二步:设置TrayIcon的Icon图标,载入一个ICO文件。
第三步:设置TrayIcon的BalloonHint为“ Delphi 2006高级控件应用”,设置BalloonTitle为“电脑报2005年合订本”。设置Visible为True。
BalloonTitle气泡提示标题。
Hint托盘图标提示。
当鼠标移动到托盘中的图标时显示。
Icon设置托盘图标。
IconIndex图标索引。
Icons图标集合。一般使用ImageList控件包含图标集合。
Visible是否在托盘中显示。
四、界面控件
1.XPMenu
XPMenu控件可以帮助我们轻松制作XP样式的菜单。这是一个第三方控件,其讲解“单个PAS文件的安装”中,就是以XPMenu为例讲解的。首先我们先使用TMainMenu或者TPopupMenu制作好菜单,然后在XP面板中将TXPMenu控件拖动到窗体中,将XPMenu的Active和AutoDetect属性设置为True就可以了。如果我们想自己定义菜单的背景色、边框颜色,甚至是字体的大小及颜色,也是很容易的。下表是修改菜单、字体颜色的属性:属性说明SelectBorderColor选中菜单时边框颜色SelectColor选中菜单时的背景颜色SelectFontColor选中菜单时文字的颜色Separator Color分隔线的颜色Font设置字体、大小、颜色2.FlatStyle FlatStyle是一套平面控件。如果想你的界面与众不同,那么使用FlatStyle是最佳选择。TFlatTitleBar TFlatTitleBar模拟标题栏控件。效果如下图所示:模拟标题栏控件将FlatTitlebar放置到窗体上,然后将Align属性设置为alTop,由于窗体中有默认的标题栏,因此我们需要将窗体的BorderStyle设置为None去掉标题栏。TFlatHint FlatHint改变了Windows的标准提示信息框样式。其效果如下:
delphi 实现 rect location的方法 -回复
delphi 实现rect location的方法-回复Delphi是一种强大的编程语言,常用于开发Windows应用程序。
在Delphi中,我们可以使用TLocationRect类来处理矩形区域的操作。
本文将详细介绍如何在Delphi中实现矩形位置的方法。
第一步:创建一个新项目首先,在Delphi IDE中创建一个新项目。
选择“文件”菜单中的“新建”选项,然后选择“应用程序”项目类型。
在弹出的对话框中,选择一个合适的项目名称和保存位置,然后点击“确定”。
第二步:添加TLocationRect组件接下来,在窗体上添加一个TLocationRect组件。
在工具箱中选择“Win32”选项卡,然后在控件列表中找到TLocationRect组件。
将该组件拖放到窗体上。
第三步:设置矩形的位置和大小一旦TLocationRect组件添加到了窗体上,我们可以通过设置它的属性来控制矩形的位置和大小。
选择TLocationRect组件,在属性浏览器中找到“Location”属性。
该属性是一个TPointF类型,它包含了矩形的左上角坐标。
我们可以直接修改该属性的值或通过代码来设置矩形的位置。
另外,还可以设置“Width”和“Height”属性来确定矩形的大小。
这两个属性分别表示矩形的宽度和高度。
我们可以直接设置这两个属性的值,也可以通过代码来改变矩形的大小。
第四步:界面交互要让用户能够通过界面来操作矩形的位置和大小,我们可以添加一些控件来实现交互。
例如,可以添加两个TTrackBar控件来控制矩形的横向和纵向位置,以及两个TEdit控件来显示矩形的宽度和高度。
将这些控件添加到窗体上,并设置它们的属性以实现相应的功能。
当用户通过拖动TrackBar来改变矩形的位置时,我们可以通过代码将TrackBar的值赋给TLocationRect的Location属性。
类似地,当用户在Edit控件中输入新的宽度和高度时,我们可以通过代码将这些值赋给TLocationRect的Width和Height属性。
trayicon 句柄
trayicon 句柄(原创实用版)目录1.引言2.什么是句柄3.句柄的作用4.句柄的类型5.句柄的使用方法6.句柄的优点与局限性7.结论正文1.引言在计算机编程中,句柄(trayicon)是一个非常重要的概念。
它涉及到计算机操作系统、编程语言以及各种软件应用的运行和管理。
了解句柄的定义、作用和用法,对于编程工作者来说具有很大的实际意义。
2.什么是句柄句柄(handle)是一个内存地址,用于标识计算机中的一个资源,如文件、窗口或设备等。
操作系统和编程语言通常通过句柄来实现对这些资源的操作和控制。
3.句柄的作用句柄的主要作用有以下几点:(1)方便编程。
通过使用句柄,程序员可以简化对资源的操作,无需关心底层的实现细节。
(2)提高效率。
句柄可以减少系统调用的次数,提高程序的执行效率。
(3)便于管理。
句柄可以帮助操作系统对资源进行有效的管理,如内存分配、释放和回收等。
4.句柄的类型根据资源的不同,句柄可以分为以下几种类型:(1)文件句柄:用于表示文件的句柄,如 Windows 系统中的 HANDLE 类型。
(2)窗口句柄:用于表示窗口的句柄,如 Windows 系统中的 HWND 类型。
(3)设备句柄:用于表示设备的句柄,如 Linux 系统中的 fd 类型。
5.句柄的使用方法要使用句柄,程序员需要进行以下操作:(1)创建句柄:通过系统调用或库函数,为资源分配一个句柄。
(2)操作句柄:通过系统调用或库函数,使用句柄对资源进行操作,如打开、关闭、读取、写入等。
(3)销毁句柄:在资源不再需要时,通过系统调用或库函数,释放句柄所占用的内存。
6.句柄的优点与局限性句柄的优点包括:简化编程、提高效率、便于管理等。
然而,句柄也存在一定的局限性,如:句柄可能导致资源泄露、句柄的使用具有一定的平台依赖性等。
7.结论总之,句柄是计算机编程中一个重要的概念,它为程序员提供了一种简便、高效的方式来操作和管理资源。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
Delphi是一种强大的编程语言,用于开发Windows应用程序。
其中,TrayIcon是Delphi中用于在系统托盘中添加图标的组件。
使用TrayIcon组件可以让应用程序在最小化时仍然在系统托盘中显示图标,并可以向用户发送通知和消息。
以下是如何在Delphi中使用TrayIcon组件的步骤:
1.添加TrayIcon组件在Delphi中,首先需要在表单上添加TrayIcon组件。
可以通过拖拽
工具箱中的TrayIcon组件到表单上,或者使用代码动态创建。
2.配置TrayIcon属性添加完TrayIcon组件后,需要设置其属性,例如:
3.Icon:设置要在系统托盘中显示的图标。
可以是一个图像资源或一个外部文件的路径。
4.PopupMenu:设置右键单击图标时要显示的快捷菜单。
可以自定义一个弹出菜单,也可
以使用系统默认的弹出菜单。
5.ShowInfoWnd:设置是否显示一个消息窗口,当用户将鼠标悬停在图标上时显示有关应
用程序的信息。
6.编写事件处理程序当用户与TrayIcon交互时,例如单击图标或右键单击弹出菜单时,
需要编写事件处理程序来响应用户的操作。
例如,当用户单击图标时,可以最小化应用程序窗口并将其添加到系统托盘中。
当用户右键单击弹出菜单时,可以显示一个自定义的上下文菜单。
7.显示和隐藏TrayIcon 在应用程序启动时,需要显示TrayIcon。
当应用程序最小化或关闭
时,需要隐藏TrayIcon。
可以使用以下代码来显示和隐藏TrayIcon:
显示TrayIcon:TrayIcon1.Visible := True;
隐藏TrayIcon:TrayIcon1.Visible := False;
以上是使用Delphi中的TrayIcon组件的基本步骤。
通过这些步骤,您可以轻松地将应用程序添加到系统托盘中,并使用弹出菜单和消息窗口与用户进行交互。