OSDN Git Service

初めてのコミット
[fmx-launcher/fmx-launcher.git] / Unit1.pas
1 unit Unit1;
2
3 interface
4
5 uses
6   System.SysUtils, System.Types, System.UITypes, System.Classes,
7   System.Variants,
8   FMX.Types, FMX.Controls, FMX.Forms, FMX.Dialogs, FMX.Ani, FMX.Layouts,
9   FMX.Gestures,
10   FMX.StdCtrls, FMX.ListView.Types, FMX.ListView, FMX.Controls.Presentation,
11   FMX.Edit, FMX.EditBox, FMX.SpinBox, ShellAPI, Windows, FMX.Objects,
12   IniFiles, FMX.Graphics;
13
14 type
15   TForm1 = class(TForm)
16     StyleBook1: TStyleBook;
17     ListView1: TListView;
18     SpinBox1: TSpinBox;
19     Button2: TButton;
20     procedure ListView1DragDrop(Sender: TObject; const Data: TDragObject;
21       const Point: TPointF);
22     procedure ListView1DragOver(Sender: TObject; const Data: TDragObject;
23       const Point: TPointF; var Operation: TDragOperation);
24     procedure Button2Click(Sender: TObject);
25     procedure ListView1ButtonClick(const Sender: TObject;
26       const AItem: TListViewItem; const AObject: TListItemSimpleControl);
27     procedure FormCreate(Sender: TObject);
28     procedure FormDestroy(Sender: TObject);
29     procedure FormKeyDown(Sender: TObject; var Key: Word; var KeyChar: Char;
30       Shift: TShiftState);
31     procedure ListView1DblClick(Sender: TObject);
32   private
33     FDir: string;
34     { private \90é\8c¾ }
35     procedure SearchDir(const Path: string);
36     procedure SetDir(const Value: string);
37   public
38     { public \90é\8c¾ }
39     Level: Integer;
40     property Dir: string read FDir write SetDir;
41   end;
42
43 var
44   Form1: TForm1;
45
46 implementation
47
48 {$R *.fmx}
49 {$R *.Windows.fmx MSWINDOWS}
50
51 procedure TForm1.Button2Click(Sender: TObject);
52 begin
53   ListView1.ClearItems;
54   SearchDir(Dir);
55 end;
56
57 procedure TForm1.FormCreate(Sender: TObject);
58 var
59   s: TIniFile;
60 begin
61   s := TIniFile.Create(ChangeFileExt(Application.DefaultTitle, '.ini'));
62   try
63     FDir := s.ReadString('Directory', 'Current', '');
64   finally
65     s.Free;
66   end;
67   SearchDir(Dir);
68 end;
69
70 procedure TForm1.FormDestroy(Sender: TObject);
71 var
72   s: TIniFile;
73 begin
74   s := TIniFile.Create(ChangeFileExt(Application.DefaultTitle, '.ini'));
75   try
76     s.WriteString('Directory', 'Current', Dir);
77   finally
78     s.Free;
79   end;
80 end;
81
82 procedure TForm1.FormKeyDown(Sender: TObject; var Key: Word; var KeyChar: Char;
83   Shift: TShiftState);
84 begin
85   case Key of
86     vkEscape:
87       Close;
88   end;
89 end;
90
91 procedure TForm1.ListView1ButtonClick(const Sender: TObject;
92   const AItem: TListViewItem; const AObject: TListItemSimpleControl);
93 begin
94   ShellExecute(ContextHandle, PChar('OPEN'), PChar(AItem.Detail), nil, nil,
95     SW_SHOWNORMAL);
96 end;
97
98 procedure TForm1.ListView1DblClick(Sender: TObject);
99 begin
100   case WindowState of
101   TWindowState.wsNormal:
102     WindowState := TWindowState.wsMaximized;
103   TWindowState.wsMaximized:
104     WindowState := TWindowState.wsNormal;
105   end;
106 end;
107
108 procedure TForm1.ListView1DragDrop(Sender: TObject; const Data: TDragObject;
109   const Point: TPointF);
110 begin
111   if (Length(Data.Files) > 0)and(System.SysUtils.DirectoryExists(Data.Files[0]) = true) then
112     Dir := Data.Files[0];
113 end;
114
115 procedure TForm1.ListView1DragOver(Sender: TObject; const Data: TDragObject;
116   const Point: TPointF; var Operation: TDragOperation);
117 begin
118   Operation := TDragOperation.Move;
119 end;
120
121 procedure TForm1.SearchDir(const Path: string);
122 var
123   s: TSearchRec;
124   i: Integer;
125   t: TListViewItem;
126 begin
127   i := FindFirst(Path + '\*.exe', faNormal, s);
128   try
129     while i = 0 do
130     begin
131       t := ListView1.Items.Add;
132       t.Text := s.Name+' '+IntToStr(s.Size div 1000000)+'MB';
133       t.Detail := Path + '\' + s.Name;
134       t.ButtonText := '\8bN\93®';
135       // t.Bitmap.Handle:=ExtractAssociatedIcon(hInstance,PChar(t.Detail),0);
136       i := FindNext(s);
137     end;
138   finally
139     System.SysUtils.FindClose(s);
140   end;
141   inc(Level);
142   i := FindFirst(Path + '\*', faDirectory, s);
143   try
144     while (i = 0) and (Level - 1 <= StrToInt(SpinBox1.Text)) do
145     begin
146       if Pos('.', s.Name) = 0 then
147         SearchDir(Path + '\' + s.Name);
148       i := FindNext(s);
149     end;
150   finally
151     dec(Level);
152     System.SysUtils.FindClose(s);
153   end;
154 end;
155
156 procedure TForm1.SetDir(const Value: string);
157 begin
158   FDir := Value;
159   Showmessage('Dir=' + Value);
160   ListView1.ClearItems;
161   SearchDir(Value);
162 end;
163
164 end.