便捷应用管理源代码[开源]
Tofloor
poster avatar
gaochong
deepin
2011-08-16 18:43
Author
源代码我打包上传到了网盘,有需要的朋友可以下载BS 一下; ;)

http://u.115.com/file/clqhpeea#

appmenu_code.tar.gz


lazarus 的TForm 类里有一个方法,是可以响应文件拖入事件的;DropFiles

procedure FormDropFiles(Sender: TObject; const FileNames: array of String);

我们只需要实现这个方法,就能捕获到拖入到窗口中的文件名列表  FileNames ,文件可能不止一个,因为用户有可能会同时拖入多个文件,这个用个循环处理一下就可以把文件名都取出,FileNames 本身就一个数组;

listview 控件,是一种最常见的窗件上的列表控件,lazarus 有现成的类(可视化的VCL),直接放到窗体上就能使用;

我把获取到文件名(含路径),添加到 listview 中,配上一个图标,就能实现添加了;

鼠标双击这个事件,只从windows 时代开始被广泛支持的,这里也只需要实现一下就行了,
当鼠标双击事件发生时,执行我们实现过的响应事件代码;

比如:

  ExecuteProcess(
           UTF8ToSys( '/usr/bin/gnome-display-properties')
                 ,'');





主要代码如下:
  1. unit Unit1;
  2. {$mode objfpc}{$H+}
  3. interface
  4. uses
  5.   Classes, SysUtils, FileUtil, LResources, Forms, Controls, Graphics, Dialogs,
  6.   ComCtrls, Menus, StdCtrls, ExtCtrls, IpHtml, Ipfilebroker,IniFiles;
  7. type
  8.    ShellFiles= record
  9.      fileName:string;
  10.      filePath:string;
  11.      filecode:string;
  12.      fileIMG:Integer;
  13.    end;
  14. type
  15.   { TForm1 }
  16.   TForm1 = class(TForm)
  17.     ImageList1: TImageList;
  18.     ListView1: TListView;
  19.     MenuItem1: TMenuItem;
  20.     MenuItem2: TMenuItem;
  21.     MenuItem3: TMenuItem;
  22.     MenuItem4: TMenuItem;
  23.     PageControl1: TPageControl;
  24.     PopupMenu1: TPopupMenu;
  25.     StatusBar1: TStatusBar;
  26.     TabSheet1: TTabSheet;
  27. //    procedure Button1Click(Sender: TObject);
  28.     procedure Button1Click(Sender: TObject);
  29.     procedure FormCreate(Sender: TObject);
  30.     procedure FormDropFiles(Sender: TObject; const FileNames: array of String);
  31. //    procedure IdleTimer1Timer(Sender: TObject);
  32.     procedure ListView1DblClick(Sender: TObject);
  33.     procedure MenuItem1Click(Sender: TObject);
  34.     procedure MenuItem2Click(Sender: TObject);
  35.     procedure MenuItem3Click(Sender: TObject);
  36.     procedure MenuItem4Click(Sender: TObject);
  37.     procedure MenuItem5Click(Sender: TObject);
  38.     procedure ScrollBox1Click(Sender: TObject);
  39.     procedure TrayIcon1Click(Sender: TObject);
  40.   private
  41.     { private declarations }
  42.   public
  43.     { public declarations }
  44.     procedure ListShow;
  45.     procedure ListAdd(addfile:ShellFiles);
  46.     procedure MButtonFalse( Byn:Boolean  );
  47.   end;
  48. var
  49.   Form1: TForm1;
  50.   sedit:Boolean;
  51. implementation
  52. uses unit2,unit3,Unit4;
  53. { TForm1 }
  54. procedure TForm1.MButtonFalse( Byn:Boolean  );
  55. begin
  56. if  not byn then
  57. begin
  58.   MenuItem1.Enabled:=False;
  59.   MenuItem2.Enabled:=False;
  60.   MenuItem3.Enabled:=False;
  61.   Form1.AllowDropFiles:=False;
  62. end else
  63. begin
  64.   MenuItem1.Enabled:=true;
  65.   MenuItem2.Enabled:=true;
  66.   MenuItem3.Enabled:=true;
  67.   Form1.AllowDropFiles:=true;
  68. end;
  69. end;
  70. procedure TForm1.ListAdd(addfile:ShellFiles);
  71. var
  72.   addini:TIniFile;
  73. begin
  74.   addini:=TIniFile.Create(ExtractFilePath(Application.ExeName)+'app.ini');
  75.   if sedit then
  76.   begin
  77.     addini.EraseSection(ListView1.Selected.Caption);
  78.     ListView1.Selected.Caption:= addfile.fileName;
  79.     ListView1.Selected.SubItems[0]:= addfile.filePath;
  80.     ListView1.Selected.SubItems[1]:= addfile.filecode;
  81.     ListView1.Selected.SubItems[2]:= inttostr( addfile.fileIMG );
  82.     ListView1.Selected.ImageIndex:=  addfile.fileIMG ;
  83.    // ShowMessage(addfile.fileName);
  84.   end else
  85.   begin
  86.     with ListView1.Items.Add do
  87.     begin
  88.       Caption:= addfile.fileName;
  89.       SubItems.Add(addfile.filePath);
  90.       SubItems.Add(addfile.filecode);
  91.       ImageIndex:=addfile.fileIMG;
  92.     end;
  93.   end;
  94.   addini.WriteString(addfile.fileName,'APPName',addfile.fileName);
  95.   addini.WriteString(addfile.fileName,'APPpath',addfile.filePath);
  96.   addini.WriteString(addfile.fileName,'APPcode',addfile.filecode);
  97.   addini.WriteInteger(addfile.fileName,'imgindex',addfile.fileIMG);
  98.   addini.Free;
  99. // ListShow;
  100. end;
  101. procedure TForm1.ListShow;
  102. var
  103.   i:Integer;
  104.   test1F:TIniFile;
  105.   zdName:TStringList;
  106. begin
  107. ListView1.Clear;
  108. test1F:=TIniFile.Create(ExtractFilePath(Application.ExeName)+'app.ini');
  109. zdName:=TStringList.Create;
  110. test1F.ReadSections(zdName);
  111. for i:=0 to zdName.Count -1 do
  112. begin
  113.     with ListView1.Items.Add do
  114.     begin
  115.       Caption:= test1F.ReadString(zdName[i],'APPName','' )  ;
  116.       SubItems.Add( test1F.ReadString(zdName[i],'APPpath','') );
  117.       SubItems.Add( test1F.ReadString(zdName[i],'APPcode','') );
  118.       SubItems.Add( test1F.ReadString(zdName[i],'imgindex','') );
  119.       ImageIndex:=  test1F.ReadInteger(zdName[i],'imgindex',0);
  120.     end;
  121. end;
  122. test1F.Free;
  123. end;
  124. procedure TForm1.FormCreate(Sender: TObject);
  125. begin
  126.   //
  127.   MButtonFalse(false);
  128.   ListShow;
  129. end;
  130. procedure TForm1.FormDropFiles(Sender: TObject; const FileNames: array of String
  131.   );
  132. var
  133.   i:Integer;
  134.   add:ShellFiles;
  135. begin
  136.   sedit:=False;
  137.   for i:=0 to Length(FileNames) -1 do
  138.   begin
  139.      add.fileName:=ExtractFileName(FileNames[i]);
  140.      add.filePath:=FileNames[i];
  141.      add.filecode:='';
  142.      add.fileIMG:=1;
  143.      ListAdd(add);
  144.   end;
  145. end;
  146. procedure TForm1.Button1Click(Sender: TObject);
  147. begin
  148.   //gnome-accessibility-keyboard-properties
  149.   ExecuteProcess(
  150.            UTF8ToSys( '/usr/bin/gnome-display-properties')
  151.                  ,'');
  152. end;
  153. procedure TForm1.ListView1DblClick(Sender: TObject);
  154. var
  155.    commanstr:Pcommanstr;
  156. begin
  157. if ListView1.Selected<>nil then
  158. begin
  159.     commanstr.pathstr:= ListView1.Selected.SubItems[0];
  160.     commanstr.codestr:= ListView1.Selected.SubItems[1];
  161.     try
  162.       ExecuteProcess(
  163.            UTF8ToSys( commanstr.pathstr)
  164.                  ,commanstr.codestr);
  165.     except
  166.       Application.MessageBox('您调用不是一个有效的可以执行文件!','提示',32);
  167.       Close;
  168.     end;
  169. end;
  170. end;
  171. //
  172. procedure TForm1.MenuItem1Click(Sender: TObject);
  173. begin
  174.    Form2.Caption:='添加应用';
  175.    Form2.Edit1.Text:='';
  176.    Form2.Edit2.Text:='';
  177.    Form2.ComboBox1.ItemIndex:=1;
  178.    ImageList1.GetBitmap(1,Form2.Image1.Picture.Bitmap);
  179.    sedit := False;
  180.    Form2.ShowModal;
  181. end;
  182. procedure TForm1.MenuItem2Click(Sender: TObject);
  183. var
  184.   delini:TIniFile;
  185. begin
  186.   if ListView1.Selected<>nil then
  187.   begin
  188.     delini:=TIniFile.Create(ExtractFilePath(Application.ExeName)+'app.ini');
  189.     delini.EraseSection(ListView1.Selected.Caption);
  190.     delini.Free;
  191.     ListView1.Selected.Delete;
  192.   end;
  193. end;
  194. procedure TForm1.MenuItem3Click(Sender: TObject);
  195. var
  196.   imgindex:Integer;
  197. begin
  198. if ListView1.Selected <> nil then
  199. begin
  200.    Form2.Caption:='修改应用设置';
  201.    Form2.Edit1.Text:= ListView1.Selected.Caption;
  202.    Form2.Edit2.Text:= ListView1.Selected.SubItems[0];
  203.    Form2.Edit3.Text:= ListView1.Selected.SubItems[1];
  204.    imgindex:=  strtoint( ListView1.Selected.SubItems[2] );
  205.    Form2.ComboBox1.ItemIndex:= imgindex;
  206.    ImageList1.GetBitmap( imgindex , Form2.Image1.Picture.Bitmap );
  207.    sedit:=True;
  208.    Form2.ShowModal;
  209. end;
  210. end;
  211. procedure TForm1.MenuItem4Click(Sender: TObject);
  212. begin
  213.   Form4.ShowModal;
  214. end;
  215. procedure TForm1.MenuItem5Click(Sender: TObject);
  216. begin
  217. end;
  218. procedure TForm1.ScrollBox1Click(Sender: TObject);
  219. begin
  220. end;
  221. procedure TForm1.TrayIcon1Click(Sender: TObject);
  222. begin
  223. end;
  224. initialization
  225.   {$I unit1.lrs}
  226. end.
Copy the Code
Reply Favorite View the author
All Replies

No replies yet