本文着重结合了ini的操作和介绍listview及imagelist控件的使用方法。(最底部附源码下载)
其实本程序就是一个简单的可以无限添加项目的游戏菜单。
程序运行后的界面(里面的信息都可以自己定义,通过配置config.ini文件,右下角的天下网吧图片,为程序没有的,是上传时自动生成的):
设置界面:
使用到的图标在imagelist里面:
完整代码如下:
unit main; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, ComCtrls, ImgList, ShellApi, IniFiles, WinSkinData; type TFrmMain = class(TForm) ImageList1: TImageList; ListView1: TListView; LbTitle: TLabel; procedure ListView1DblClick(Sender: TObject); procedure FormShow(Sender: TObject); procedure FormDestroy(Sender: TObject); procedure FormCreate(Sender: TObject); private ExePath: string; ini: TiniFile; procedure ReadConfig; { Private declarations } public { Public declarations } end; var FrmMain : TFrmMain; implementation {$R *.dfm} procedure TFrmMain.FormCreate(Sender: TObject); begin ExePath := ExtractFilePath(APplication.ExeName); if not FileExists(ExePath + 'config.ini') then begin Showmessage('配置文件config.ini不存在,退出!'); APplication.Terminate; end; ini := TiniFile.Create(Exepath + 'Config.ini'); //创建ini文件类,并让它与配置文件关联 end; procedure TFrmMain.FormDestroy(Sender: TObject); //程序销毁时自动运行的,在这里是是执行销毁ini文件类 begin ini.Free; end; procedure TFrmMain.ReadConfig; //用ini文件读取配置,里面就是线路配置 var Count, i : Integer; tmpStr : string; begin lbTitle.Caption := ini.ReadString('main', 'LbTitle', '请选择线路:'); Count := ini.ReadInteger('main', 'LineCout', 0); if Count <= 0 then Exit; for i := 1 to Count do begin with ListView1.Items.Add do begin tmpStr := 'line' + inttostr(i); Caption := ini.ReadString(tmpStr, 'Title', '未配置'); SubItems.Add(ini.ReadString(tmpStr, 'batname', tmpStr + '.bat')); ImageIndex := ini.ReadInteger(tmpStr, 'LineSupport', 0); //显示出哪个图标 end; end; end; procedure TFrmMain.FormShow(Sender: TObject); begin ReadConfig; end; procedure TFrmMain.ListView1DblClick(Sender: TObject); //双击ListView1事件 var strExeFile : string; begin if ListView1.Selected = nil then //如果当前没有选定里面任何一个图标就退出 Exit; if ListView1.Selected.Caption = '未配置' then //如果选定的图标是‘未配置’字样,就退出 Exit; strExeFile := ExePath + ListView1.Selected.SubItems[0]; //组合出执行文件的完整路径 if FileExists(strExeFile) then //如果文件存在 begin ShellExeCute(Handle, 'open', Pchar(strExeFile), nil, Pchar(ExtractFilePath(strExeFile)), 1); //执行文件 Close; end else //执行文件并不存在。。显示错误信息 Showmessage('线路未使用中!'); end; end.
本文来源:本站原创 作者:admin