0:unit setup;
1:
2:interface
3:
4:uses
5: Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
6: StdCtrls;
7:
8:type
9: Tsetup = class(TForm)
10: Label2: TLabel;
11: Label3: TLabel;
12: Label5: TLabel;
13: Label6: TLabel;
14: Label7: TLabel;
15: Label8: TLabel;
16: Label8: TLabel;
17: lblAgentName: TLabel;
18: lblAgentVersion: TLabel;
19: lblLocalLogFileName: TLabel;
20: lblDownloadURL: TLabel;
21: txtURL: TEdit;
22: chkAutoBrowserOpen: TCheckBox;
23: chkCollectionImage: TCheckBox;
24: cmbBrowser: TComboBox;
25: cmdOK: TButton;
26: cmdExit: TButton;
27: cmdJump: TButton;
28: procedure cmdOKClick(Sender: TObject);
29: procedure FormCreate(Sender: TObject);
30: procedure cmdJumpClick(Sender: TObject);
31: procedure cmdExitClick(Sender: TObject);
32: private
33: { Private declarations }
34: public
35: procedure SaveSettings();
36: procedure CopyFileEx(From: string; Dest: string; CheckExists: Boolean);
37: end;
38:
39:var
40: setup: Tsetup;
41: Log: TStringList;
42: Failed: Boolean;
43:
44:implementation
45:
46:{$R *.DFM}
47:procedure Tsetup.CopyFileEx(From: string; Dest: string; CheckExists: Boolean);
48:var
49: Tmp: string;
50:begin
51: Tmp := ': ファイルのコピー ' + From + ' -> ' + Dest;
52: if CheckExists and FileExists(Dest) then begin
53: Log.Add('OK' + Tmp);
54: end else begin
55: if CopyFile(From, Dest, False) then begin
56: Log.Add('OK' + Tmp);
57: end else begin
58: Log.Add('NG' + Tmp);
59: Failed := True;
60: end;
61: end;
62:end;
63:
64:procedure Tsetup.FormCreate(Sender: TObject);
65:var
66: userfile:string;
67: Leg:TLegistry;
68: Auto: Boolean;
69: Base: string;
70: Prefix: string;
71: InstallDir: string;
72:begin
73://Pluginディレクトリィへのファイルコピーの準備
74: Auto := False;
75: Base := ExtractFilePath(Params.Items[0]);
76: Prefix := 'stpl';
77:
78://ADSによるセットアップかどうかの判別
79: InstallDir := PluginDir + '\' + Prefix;
80: if (Params.Count > 1) then DebugText(Params.Items[1]);
81: if (Params.Count > 1) and (LowerCase(Params.Items[1]) = '-auto') then begin
82: Auto := True;
83: end;
84: Failed := False;
85: Log := TStringList.Create;
86:
87://ベースディレクトリィが相対ディレクトリィじゃない時 かつ
88://ベースディレクトリィとインストール先ディレクトリィが違うとき、ファイルのコピーを実行
89: if (Base <> 'stpl\') and (Base <> InstallDir +'\') then begin
90: if not DirectoryExists(InstallDir) then begin
91: if not CreateDir(InstallDir) then begin
92: Log.Add('NG: フォルダ(' + InstallDir + ') が作成できませんでした');
93: Failed := True;
94: end;
95: end;
96:
97: if not Failed then begin
98: CopyFileEx(Base + 'setup.pas' , InstallDir + '\setup.pas' , False);
99: CopyFileEx(Base + 'setup.dfm' , InstallDir + '\setup.dfm' , False);
100: CopyFileEx(Base + 'stplBrowser.dfm', InstallDir + '\stplBrowser.dfm', False);
101: CopyFileEx(Base + 'autostpl.r' , InstallDir + '\autostpl.r' , False);
102: CopyFileEx(Base + 'stplBrowser.pas', InstallDir + '\stplBrowser.pas', False);
103: CopyFileEx(Base + 'download.h' , InstallDir + '\download.h' , False);
104: CopyFileEx(Base + 'stpl.htm' , InstallDir + '\stpl.htm' , False);
105: CopyFileEx(Base + 'autostpl.rx' , InstallDir + '\autostpl.rx' , False);
106: CopyFileEx(Base + 'stpl.ico' , InstallDir + '\stpl.ico' , False);
107: CopyFileEx(Base + 'stplBrowser.ico', InstallDir + '\stplBrowser.ico', False);
108: CopyFileEx(Base + 'stpl.txt' , InstallDir + '\stpl.txt' , False);
109: CopyFileEx(Base + 'stplBrowser.txt', InstallDir + '\stplBrowser.txt', False);
110: end;
111:
112://ファイルコピー失敗時、インストール不成功のログを保存し、設定保存ボタンを無効に
113: if Failed then begin
114: Log.Add('RESULT: FAILED');
115: Log.SaveToFile(Base + 'setup.log');
116: cmdOK.Enabled:=False;
117: ShowMessage('- 『スタパライフ』セットアップ -'#13#10'インストールに失敗しました.');
118: end else begin
119://インストール成功のログを保存
120: Log.Add('NAME: 『スタパライフ』Agent for airWeb');
121: Log.Add('VERSION: 1.20');
122: Log.Add('DIRECTORY: ' + InstallDir);
123: Log.Add('RESULT: SUCCESS');
124: Log.SaveToFile(Base + 'setup.log');
125: Log.Free;
126: end;
127: end;
128:
129://初期値の設定
130: txtURL.Text:='http://www.alt-r.com/di/toc5-0.html';
131: lblLocalLogFileName.Caption:=DataDir +'\'+ 'stpl\stpl.mbx';
132: cmbBrowser.Text:='stpl\stplBrowser.pas';
133: chkAutoBrowserOpen.Checked:=True;
134: chkCollectionImage.Checked:=True;
135:
136://キャビネットにアイテムがあり、レジストリィが存在する場合は設定値の読み込み
137: if Assigned(CabinetManager.Find('diary$stpl')) then
138: begin
139: userfile := DataDir + '\stpl\user.dat';
140: if FileExists(userfile) then
141: begin
142: cmdOK.Caption:='設定を保存する';
143: Leg:=TLegistry.Create(userfile,lmOpenRead,1024,1024,nil);
144: txtURL.Text:=Leg.ReadStringDef('/common/url','');
145: lblLocalLogFileName.Caption:=DataDir +'\'+Leg.ReadStringDef('/common/mbox','');
146: cmbBrowser.Text:=Leg.ReadStringDef('/common/Browser','stpl\stplBrowser.pas');
147: chkAutoBrowserOpen.Checked:=Leg.ReadBoolDef('/common/autobrowseropen',0);
148: chkCollectionImage.Checked:=Leg.ReadBoolDef('/common/CollectionImage',0);
149: Leg.Free;
150:
151: if Auto then begin
152: ShowMessage('『スタパライフ』Agentの新バージョンがダウンロードされました!'#13#10'『設定を保存する』ボタンを押せばセットアップ完了です');
153: end;
154: end else begin
155: if Auto then begin
156: ShowMessage('『スタパライフ』Agentがダウンロードされました!'#13#10'『キャビネットへ登録する』ボタンを押せばセットアップ完了です');
157:// setup.UnLoad;
158: end;
159: end;
160: end else begin
161: if Auto then begin
162: ShowMessage('『スタパライフ』Agentがダウンロードされました!'#13#10'『キャビネットへ登録する』ボタンを押せばセットアップ完了です');
163:// setup.Close;
164: end;
165: end;
166:
167:end;
168:
169:procedure Tsetup.cmdJumpClick(Sender: TObject);
170:begin
171: OpenBrowser(lblDownloadURL.caption);
172: close;
173:end;
174:
175:procedure Tsetup.cmdExitClick(Sender: TObject);
176:begin
177: close;
178:end;
179:
180:procedure Tsetup.cmdOKClick(Sender: TObject);
181:begin
182: SaveSettings;
183: Close;
184:end;
185:
186:procedure Tsetup.SaveSettings();
187:var
188: Item:TCabinetItem;
189: Folder:TCabinetItem;
190: FFolderCreated:Boolean;
191:
192: userfile:string;
193: ItemCreated:Boolean;
194: Leg: TLegistry;
195:begin
196://データ保存用ディレクトリィの作成
197: if not DirectoryExists(DataDir) then begin
198: if not ForceDirectories(DataDir) then begin
199: ShowMessage('ログフォルダ "'+DataDir+'" が作成できませんでした');
200: end;
201: end;
202: CreateDir(DataDir + '\stpl');
203:
204://レジストリィファイルの作成
205: userfile := DataDir + '\stpl\user.dat';
206: if FileExists(userfile) then
207: Leg:=TLegistry.Create(userfile,lmOpenReadWrite,1024,1024,nil)
208: else
209: Leg:=TLegistry.Create(userfile,lmCreate,1024,1024,nil);
210:
211://レジストリィへの設定値の保存
212: Leg.Signature:='STPL_INFO';
213: Leg.CreateKey('/common');
214: Leg.WriteString('/common/url',txtURL.text);
215: Leg.WriteString('/common/mbox','stpl\stpl.mbx');
216: Leg.WriteString('/common/Browser',cmbBrowser.text);
217: Leg.WriteBool('/common/autobrowseropen',chkAutoBrowserOpen.Checked);
218: Leg.WriteBool('/common/CollectionImage',chkCollectionImage.Checked);
219: Leg.Free;
220:
221://キャビネットにフォルダが無い場合は追加
222: Folder:=CabinetManager.Find('diary');
223: if not Assigned(Folder) then begin
224: Folder:=TCabinetItem.Create(CabinetManager);
225: Folder.ItemType:=ctFolder;
226: Folder.Name:='diary';
227: Folder.Caption:='日記';
228: CabinetManager.Add(nil,Folder);
229: FFolderCreated:=True;
230: end else FFolderCreated:=False;
231://キャビネット上のアイテムの存在チェック
232: if not Assigned(CabinetManager.Find('diary$stpl')) then
233: begin
234://キャビネットにアイテムが無い場合は追加
235: Item:=TCabinetItem.Create(CabinetManager);
236: Item.ItemType:=ctPlugin;
237: Item.Name := 'diary$stpl';
238: Item.Caption:='スタパライフ(スタパ斎藤)';
239: Item.PluginExecFileName:=cmbBrowser.text;
240: Item.PluginExecArg:='-H '+ txtURL.text +' -T スタパライフ stpl\stpl.mbx';
241: Item.PluginAutoFileName:='stpl\autostpl.rx';
242: Item.PluginAutoArg:='';
243: Item.PluginSetupFileName:='stpl\setup.pas';
244: Item.PluginSetupArg:='';
245: CabinetManager.AddChild(Folder,Item);
246: Item.Free;
247: end else begin
248://キャビネットにアイテムが有る場合はエージェント呼び出し用プロパティの更新
249: Item:=CabinetManager.Find('diary$stpl');
250: Item.PluginExecFileName:=cmbBrowser.text;
251: Item.PluginExecArg:='-H '+ txtURL.text +' -T スタパライフ stpl\stpl.mbx';
252: Item.PluginAutoFileName:='stpl\autostpl.rx';
253: Item.PluginAutoArg:='';
254: Item.PluginSetupFileName:='stpl\setup.pas';
255: Item.PluginSetupArg:='';
256: end;
257: if FFolderCreated then Folder.Free;
258: CabinetManager.Commit;
259: Close;
260:end;
261:
262:end.
|