说三道四技术文摘-感悟人生的经典句子
说三道四 > 文档快照

在按钮中快速启动程序-Delphi资料

HTML文档下载 WORD文档下载 PDF文档下载
在按钮中快速启动程序-Delphi资料

在使用Netscape的navigator时不知你有没有注意到:在它的状态栏有一组按钮,这使我们能很方便地打开另一个窗体,更有效地利用时间(要知道网上冲浪时间就是金钱啊!)。

接下来我要讲的是如何在我们的程序中加入此功能,我们可以用DELPHI很轻易地实现,在DELPHI中我们可以指定某个Twincontrol类(如Ttoolbar)的父级为另一个Twincontrol(这里是Tstatusbar),然后通过动态创建Ttoolbar就可以在Tstarbar上创建TToolbar了,并且为工具条(Toolbar)添加按钮及其事件,通过调用API中的winexec实现对Window的应用程序的调用。下面给出了详细的代码和注释给大家分享。

unit superbar;

interface

uses

Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms,

Dialogs,ComCtrls;

type

TForm1 = class(TForm)

StatusBar1: TStatusBar;{为窗体添加一个状态栏}

procedure FormCreate(Sender: TObject);

private

{声明以下过程}

procedure createsuperbar(sender:Tobject;Imagelist:TImagelist);

{创建工具条}

procedure createbutton(toolbar:TToolbar;Const ButtonCaptions: array of String);

{创建工具条的按钮}

procedure superbuttonclick(sender:Tobject);

{为工具条按钮添加事件}

public

end;

var

Form1: TForm1;

toolbar:TToolbar;

implementation

uses shellapi,commctrl;{注意要加入此句,否则程序运行无法通过}

{$R *.DFM}

procedure TForm1.createsuperbar(sender:Tobject;Imagelist:Timagelist);

begin

toolbar:=TToolbar.Create(self);{动态创建一个工具条}

with toolbar do

begin

parent:=statusbar1;{定义toolbar的父类为状态栏,这样就可以创建出状态栏的工具条了}

top:=1;left:=1;height:=18;

buttonheight:=16;buttonwidth:=16;{定出toolbar和toolbutton的宽度长度};

flat:=true;autosize:=true; {设置toolbutton为浮动形式}

images:=imagelist;{设置toolbutton的图标}

{使工具条可以脱离状态栏.注意:如果你用的是DELPHI3.0需删除此两句,即可用}

dragkind:=dkdock;

dragmode:=dmautomatic;

end;

end;

procedure TForm1.createbutton(Toolbar:TToolbar;Const ButtonCaptions: array of String);

var

I,m: Integer;

begin

m:=0;

for I := 0 to High(ButtonCaptions) do

begin

with TToolButton.Create(ToolBar) do

begin

Parent := ToolBar;

Caption := ButtonCaptions[I];

onclick:=superbuttonclick;{为toolbutton增加鼠标click事件}

if (ButtonCaptions[I]=‘|’) then{判断是不是分隔符}

begin

Style := tbsSeparator;

m:=m+1;

end

else

begin

Style := tbsButton;

imageindex:=i-m;

end;

end;

end;

end;

{这里是响应鼠标事件,实现应用程序的打开}

procedure TForm1.superbuttonclick(sender:Tobject);

begin

winexec(pchar((sender as TToolbutton).caption),SW_ShowNormal);

{打开一个Windows的应用程序}

end;

procedure TForm1.FormCreate(Sender: TObject);

const

ExeList:array[0..2] of String=(

‘winfile.exe’,

‘|’,

‘notepad.exe’);{可以在这里加上其它应用程序的全称,也可以不要分隔符}

var

imagelist:Timagelist;

i:integer;

begin

imagelist:=Timagelist.Create(self);

try{加入安全代码,也可不加}

for i:=0 to high(exelist) do

if exelist[i] <> ‘|’ then

begin

ImageList_AddIcon(ImageList.Handle,ExtractIcon(Handle,PChar(ExeList[i]),0));

{为imagelist添加图标}

end;

createsuperbar(self,imagelist);

createbutton(toolbar,exelist);

finally

end;

end;

end.

以上程序已在Pentium-MMX166 32M Windows 98 DELPHI 4.0 通过

Google I/O 2014前瞻:“令人发指”的Android产品线 福昕熊雨前:PDFium开源项目的背后 Dropbox无法登陆,国内企业网盘横向评测! 如果编程语言是超级英雄…… 谷歌发布Material Design设计语言 如何找出一个目录下的所有*.txt文件??高手请教 结束 BUG,畅通无阻——水晶报表 Service Packs 下载! dos下如何控制串口的RTS,DTR,TXD,RXD為HIGH,LOW呢? 一个这样的问题,不知怎要问,详请请看内容 在水晶报表中怎样实现分栏打印? 如何把一篇Word 文档保存到数据库里? ERP 和 MRP II是什么意思? 是在外资企业做软件工程师,还是到台资企业做系统分析员 怎么来设置应用程序的图标? 如何描述地理位置 什么经线以东是西半球,以西是东半球 关于高的四字词语最少写五个 六个袖珍国的地理位置特征请务必准确,上课要用到的. 主要分布在东半球且被赤道穿过的是? 既有赤道穿过,又位于东半球的大陆? 13.赤道在东半球自东向西依次穿过的大洲是:    既有赤道穿过,又位于东半球的大陆是:A 亚欧大陆 既有赤道穿过,又在东半球的大陆是:( ) 阿根廷法院支持政府打破媒体垄断迪拜宣布禁放孔明灯巴黎中国电影节开幕首条横跨欧亚海底隧道启用 伦敦坐火车范长龙会见马来西亚国防部长新华网:中拉文化走向交融重庆举行渝川黔三省(市)应急力量森林新闻17点:中国自杀率为何10年陡降赵凤桐任国土资源部党组成员 中央纪委南海网赈灾车队两赴青蓝坡村 村民打灯不可思议的末日网游之三国超级领主无限之萝莉攻略星辰判不朽晓港公园旅游十香园旅游海印大桥旅游大元帅府纪念馆旅游大沙头码头旅游
备案号:鲁ICP备13029499号-2 说三道四 www.s3d4.cn 说三道四技术文摘