MainForm.pas 19 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676
  1. { $HDR$}
  2. {**********************************************************************}
  3. { Unit archived using Team Coherence }
  4. { Team Coherence is Copyright 2002 by Quality Software Components }
  5. { }
  6. { For further information / comments, visit our WEB site at }
  7. { http://www.TeamCoherence.com }
  8. {**********************************************************************}
  9. {}
  10. { $Log: 23026: MainForm.pas
  11. {
  12. { Rev 1.3 09/11/2003 3:39:46 PM Jeremy Darling
  13. { Completed front end changes and tested against both local and remote windows
  14. { ftp systems. Still looking for a Linux box to test against.
  15. }
  16. {
  17. { Rev 1.2 09/11/2003 3:21:02 PM Jeremy Darling
  18. { Completed Log Color customization.
  19. }
  20. {
  21. { Rev 1.1 09/11/2003 2:12:02 PM Jeremy Darling
  22. { Updated some of the site configuration stuff and made it so that you can add,
  23. { edit and delete sites from your site list. Also added a Site Name so that
  24. { you don't have to see the address when selecting a site.
  25. }
  26. {
  27. { Rev 1.0 09/11/2003 12:49:20 PM Jeremy Darling
  28. { Project Added to TC
  29. }
  30. unit MainForm;
  31. interface
  32. uses
  33. Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  34. ImgList, StdCtrls, ComCtrls, ToolWin, IdBaseComponent, IdComponent,
  35. IdTCPConnection, IdTCPClient, IdExplicitTLSClientServerBase, IdFTP,
  36. Buttons, ExtCtrls, Commctrl, ActnList, ShellAPI, IniFiles, FTPSiteInfo,
  37. ConfigureApplicationForm, ConfigureSiteForm, ApplicationConfiguration,
  38. Menus, IdFTPCommon;
  39. type
  40. TfrmMain = class(TForm)
  41. FTP: TIdFTP;
  42. sbMain: TStatusBar;
  43. ilNormalImages: TImageList;
  44. ControlBar1: TControlBar;
  45. ToolBar7: TToolBar;
  46. btnConnect: TToolButton;
  47. btnBack: TToolButton;
  48. btnUpAFolder: TToolButton;
  49. btnHome: TToolButton;
  50. ToolBar9: TToolBar;
  51. Panel5: TPanel;
  52. cbFTPAddress: TComboBox;
  53. btnSiteOptions: TToolButton;
  54. ToolBar10: TToolBar;
  55. Panel6: TPanel;
  56. edUserName: TEdit;
  57. ToolBar11: TToolBar;
  58. Panel7: TPanel;
  59. edPassword: TEdit;
  60. ToolBar12: TToolBar;
  61. btnNewFolder: TToolButton;
  62. btnDeleteFolder: TToolButton;
  63. ToolButton20: TToolButton;
  64. btnUploadFile: TToolButton;
  65. btnDownloadFile: TToolButton;
  66. ToolBar13: TToolBar;
  67. btnAbout: TToolButton;
  68. ToolBar14: TToolBar;
  69. btnViewingStyle: TToolButton;
  70. Panel8: TPanel;
  71. edFolder: TEdit;
  72. btnGo: TBitBtn;
  73. ActionList1: TActionList;
  74. actConnectDisconnect: TAction;
  75. lbStatus: TListBox;
  76. pbProgress: TProgressBar;
  77. lbDirectory: TListBox;
  78. Splitter1: TSplitter;
  79. Splitter2: TSplitter;
  80. SaveFile: TSaveDialog;
  81. lvFiles: TListView;
  82. actChangeDirUP: TAction;
  83. actHome: TAction;
  84. actBack: TAction;
  85. actCreateFolder: TAction;
  86. actDeleteFileFolder: TAction;
  87. ToolButton1: TToolButton;
  88. actDownloadFile: TAction;
  89. actUploadFile: TAction;
  90. actAbout: TAction;
  91. actHelp: TAction;
  92. actConfigureSite: TAction;
  93. actConfigureApplication: TAction;
  94. OpenDialog: TOpenDialog;
  95. tvFolders: TTreeView;
  96. puUpload: TPopupMenu;
  97. puDownload: TPopupMenu;
  98. Active1: TMenuItem;
  99. BinaryNottext1: TMenuItem;
  100. ASCIIText1: TMenuItem;
  101. BinaryNottext2: TMenuItem;
  102. procedure FTPAfterClientLogin(Sender: TObject);
  103. procedure FTPDisconnected(Sender: TObject);
  104. procedure FormShow(Sender: TObject);
  105. procedure FTPStatus(ASender: TObject; const AStatus: TIdStatus;
  106. const AStatusText: String);
  107. procedure actConnectDisconnectExecute(Sender: TObject);
  108. procedure FormCreate(Sender: TObject);
  109. procedure btnGoClick(Sender: TObject);
  110. procedure edFolderKeyPress(Sender: TObject; var Key: Char);
  111. procedure lbStatusDrawItem(Control: TWinControl; Index: Integer;
  112. Rect: TRect; State: TOwnerDrawState);
  113. procedure FTPWorkBegin(Sender: TObject; AWorkMode: TWorkMode;
  114. const AWorkCountMax: Integer);
  115. procedure FTPWorkEnd(Sender: TObject; AWorkMode: TWorkMode);
  116. procedure FTPWork(Sender: TObject; AWorkMode: TWorkMode;
  117. const AWorkCount: Integer);
  118. procedure actChangeDirUPExecute(Sender: TObject);
  119. procedure actDownloadFileExecute(Sender: TObject);
  120. procedure lbDirectoryDblClick(Sender: TObject);
  121. procedure actDeleteFileFolderExecute(Sender: TObject);
  122. procedure actCreateFolderExecute(Sender: TObject);
  123. procedure actUploadFileExecute(Sender: TObject);
  124. procedure lbDirectoryKeyPress(Sender: TObject; var Key: Char);
  125. procedure FormDestroy(Sender: TObject);
  126. procedure actBackExecute(Sender: TObject);
  127. procedure actHomeExecute(Sender: TObject);
  128. procedure actHelpExecute(Sender: TObject);
  129. procedure actConfigureSiteExecute(Sender: TObject);
  130. procedure actConfigureApplicationExecute(Sender: TObject);
  131. procedure cbFTPAddressChange(Sender: TObject);
  132. procedure BinaryNottext1Click(Sender: TObject);
  133. private
  134. { Private declarations }
  135. FLastDirStack : TStringList;
  136. FRootDir : String;
  137. FHelpFile : String;
  138. Sites : TFTPSiteList;
  139. ApplicationConfig : TApplicationConfig;
  140. procedure DisplayFTP;
  141. function GetHelpFile: String;
  142. procedure LoadDefaultValues;
  143. procedure StoreDefaultValues;
  144. procedure InitLogColors;
  145. public
  146. { Public declarations }
  147. procedure SetControls;
  148. procedure Log(Msg : String; Color : TColor = clBlack);
  149. procedure ChangeFTPDir(NewDir : String);
  150. property HelpFile : String read GetHelpFile;
  151. end;
  152. var
  153. frmMain: TfrmMain;
  154. Ini : TIniFile;
  155. implementation
  156. uses
  157. AboutForm;
  158. {$R *.DFM}
  159. { TfrmMain }
  160. procedure TfrmMain.SetControls;
  161. begin
  162. if FTP.Connected then
  163. begin
  164. actConnectDisconnect.Caption := 'Disconnect';
  165. sbMain.Panels[0].Text := 'Online';
  166. end
  167. else
  168. begin
  169. actConnectDisconnect.Caption := 'Connect';
  170. sbMain.Panels[0].Text := 'Offline';
  171. end;
  172. actConnectDisconnect.Hint := actConnectDisconnect.Caption;
  173. actConnectDisconnect.Checked := FTP.Connected;
  174. btnGo.Enabled := FTP.Connected;
  175. actChangeDirUP.Enabled := FTP.Connected;
  176. actBack.Enabled := FTP.Connected and (FLastDirStack.Count > 0);
  177. actHome.Enabled := FTP.Connected;
  178. actCreateFolder.Enabled := FTP.Connected;
  179. actDeleteFileFolder.Enabled := FTP.Connected;
  180. actUploadFile.Enabled := FTP.Connected;
  181. actDownloadFile.Enabled := FTP.Connected;
  182. actConfigureSite.Enabled := (not FTP.Connected) and (cbFTPAddress.Text <> '');
  183. edFolder.Enabled := FTP.Connected;
  184. cbFTPAddress.Enabled := not FTP.Connected;
  185. edUserName.Enabled := not FTP.Connected;
  186. edPassword.Enabled := not FTP.Connected;
  187. actConnectDisconnect.Enabled := (cbFTPAddress.Text <> '');
  188. end;
  189. procedure TfrmMain.FTPAfterClientLogin(Sender: TObject);
  190. begin
  191. SetControls;
  192. FLastDirStack.Clear;
  193. if cbFTPAddress.ItemIndex > -1 then
  194. begin
  195. ChangeFTPDir(Sites[cbFTPAddress.ItemIndex].RootDir);
  196. end;
  197. DisplayFtp;
  198. FRootDir := FTP.RetrieveCurrentDir;
  199. end;
  200. procedure TfrmMain.FTPDisconnected(Sender: TObject);
  201. begin
  202. SetControls;
  203. lvFiles.Items.Clear;
  204. tvFolders.Items.Clear;
  205. end;
  206. procedure TfrmMain.FormShow(Sender: TObject);
  207. var
  208. r: TRect;
  209. begin
  210. sbMain.ControlStyle := sbMain.ControlStyle + [csAcceptsControls];
  211. sbMain.Perform(SB_GETRECT, 1, Integer(@R));
  212. pbProgress.Parent := sbMain;
  213. pbProgress.Top := r.Top;
  214. pbProgress.Left := r.Left;
  215. pbProgress.Width := r.Right - r.Left;
  216. pbProgress.Height := r.Bottom - r.Top;
  217. pbProgress.Visible:= false;
  218. end;
  219. procedure TfrmMain.FTPStatus(ASender: TObject; const AStatus: TIdStatus;
  220. const AStatusText: String);
  221. var
  222. Clr : TColor;
  223. begin
  224. sbMain.Panels[2].Text := AStatusText;
  225. clr := ApplicationConfig.LogColors.Colors['Default'];
  226. case AStatus of
  227. hsStatusText : Clr := ApplicationConfig.LogColors.Colors['hsStatusText'];
  228. hsResolving : Clr := ApplicationConfig.LogColors.Colors['hsResolving'];
  229. hsConnecting : Clr := ApplicationConfig.LogColors.Colors['hsConnecting'];
  230. hsDisconnecting : Clr := ApplicationConfig.LogColors.Colors['hsDisconnecting'];
  231. hsConnected : Clr := ApplicationConfig.LogColors.Colors['hsConnected'];
  232. hsDisconnected : Clr := ApplicationConfig.LogColors.Colors['hsDisconnected'];
  233. ftpTransfer : Clr := ApplicationConfig.LogColors.Colors['ftpTransfer'];
  234. ftpReady : Clr := ApplicationConfig.LogColors.Colors['ftpReady'];
  235. ftpAborted : Clr := ApplicationConfig.LogColors.Colors['ftpAborted'];
  236. end;
  237. Log(AStatusText, clr);
  238. end;
  239. procedure TfrmMain.actConnectDisconnectExecute(Sender: TObject);
  240. begin
  241. if FTP.Connected then
  242. begin
  243. FTP.Disconnect;
  244. end
  245. else
  246. begin
  247. lbStatus.Items.Clear;
  248. if cbFTPAddress.ItemIndex = -1 then
  249. FTP.Host := cbFTPAddress.Text
  250. else
  251. FTP.Host := TFTPSiteInfo(cbFTPAddress.Items.Objects[cbFTPAddress.ItemIndex]).Address;
  252. FTP.Username := edUserName.Text;
  253. FTP.Password := edPassword.Text;
  254. FTP.Connect;
  255. end;
  256. end;
  257. procedure TfrmMain.DisplayFTP;
  258. var
  259. i, c : Integer;
  260. s : String;
  261. begin
  262. lbDirectory.Items.Clear;
  263. FTP.List(lbDirectory.Items, '', false);
  264. edFolder.Text := FTP.RetrieveCurrentDir;
  265. tvFolders.Items.Clear;
  266. lvFiles.Items.Clear;
  267. for c := 0 to lbDirectory.Items.Count -1 do
  268. begin
  269. s := lbDirectory.Items[c];
  270. i := FTP.Size(s);
  271. if i = -1 then
  272. begin
  273. // Directory
  274. tvFolders.Items.Add(nil, s);
  275. end
  276. else
  277. begin
  278. // File
  279. lvFiles.Items.Add.Caption := s;
  280. end;
  281. end;
  282. SetControls;
  283. end;
  284. procedure TfrmMain.FormCreate(Sender: TObject);
  285. begin
  286. Ini := TIniFile.Create(ChangeFileExt(ParamStr(0), '.ini'));
  287. ApplicationConfig := TApplicationConfig.Create;
  288. Sites := TFTPSiteList.Create;
  289. LoadDefaultValues;
  290. FLastDirStack := TStringList.Create;
  291. edFolder.Text := '/';
  292. lbDirectory.Visible := false;
  293. SetControls;
  294. actHelp.Enabled := FileExists(HelpFile);
  295. end;
  296. procedure TfrmMain.btnGoClick(Sender: TObject);
  297. begin
  298. if btnGo.Enabled then
  299. begin
  300. ChangeFTPDir(edFolder.Text);
  301. end;
  302. end;
  303. procedure TfrmMain.edFolderKeyPress(Sender: TObject; var Key: Char);
  304. begin
  305. if Key=#13 then
  306. begin
  307. btnGo.Click;
  308. Key := #0;
  309. end;
  310. end;
  311. procedure TfrmMain.Log(Msg: String; Color: TColor);
  312. begin
  313. lbStatus.Items.AddObject(Msg, Pointer(Color));
  314. lbStatus.ItemIndex := lbStatus.Items.Count -1;
  315. end;
  316. procedure TfrmMain.lbStatusDrawItem(Control: TWinControl; Index: Integer;
  317. Rect: TRect; State: TOwnerDrawState);
  318. begin
  319. // This draws the items in the Process Log in colors to allow quick
  320. // visual inspection
  321. with Control as TListBox do
  322. begin
  323. Canvas.Brush.Color := Color;
  324. Canvas.FillRect(Rect);
  325. Canvas.Font.Color := TColor(Items.Objects[Index]);
  326. Canvas.TextOut(Rect.Left + 2, Rect.Top, Items[Index]);
  327. end;
  328. end;
  329. procedure TfrmMain.FTPWorkBegin(Sender: TObject; AWorkMode: TWorkMode;
  330. const AWorkCountMax: Integer);
  331. begin
  332. pbProgress.Max := AWorkCountMax;
  333. pbProgress.Position := 0;
  334. pbProgress.Visible := true;
  335. Log('Work begin ' + IntToStr(AWorkCountMax), clPurple);
  336. end;
  337. procedure TfrmMain.FTPWorkEnd(Sender: TObject; AWorkMode: TWorkMode);
  338. begin
  339. pbProgress.Visible := false;
  340. Log('Work end', clPurple);
  341. end;
  342. procedure TfrmMain.FTPWork(Sender: TObject; AWorkMode: TWorkMode;
  343. const AWorkCount: Integer);
  344. begin
  345. pbProgress.Position := AWorkCount;
  346. Log('Work ' + IntToStr(AWorkCount), clPurple);
  347. end;
  348. procedure TfrmMain.ChangeFTPDir(NewDir: String);
  349. begin
  350. FLastDirStack.Add(FTP.RetrieveCurrentDir);
  351. FTP.ChangeDir(NewDir);
  352. DisplayFTP;
  353. end;
  354. procedure TfrmMain.actChangeDirUPExecute(Sender: TObject);
  355. begin
  356. FTP.ChangeDirUp;
  357. DisplayFTP;
  358. end;
  359. procedure TfrmMain.actDownloadFileExecute(Sender: TObject);
  360. var
  361. i : Integer;
  362. ext,
  363. s : String;
  364. b : boolean;
  365. begin
  366. if lvFiles.Focused then
  367. begin
  368. if Assigned(lvFiles.Selected) then
  369. lbDirectory.ItemIndex := lbDirectory.Items.IndexOf(lvFiles.Selected.Caption)
  370. else
  371. lbDirectory.ItemIndex := -1;
  372. end
  373. else
  374. if Assigned(tvFolders.Selected) then
  375. lbDirectory.ItemIndex := lbDirectory.Items.IndexOf(tvFolders.Selected.Text)
  376. else
  377. lbDirectory.ItemIndex := -1;
  378. i := lbDirectory.ItemIndex;
  379. if i <> -1 then
  380. begin
  381. s := lbDirectory.Items[i];
  382. i := FTP.Size(s);
  383. if i = -1 then
  384. begin
  385. // Directory
  386. ChangeFTPDir(s);
  387. end
  388. else
  389. begin
  390. // File
  391. ext := ExtractFileExt(s);
  392. SaveFile.Filter := ext + ' files|*' + ext + '|All Files|*.*';
  393. SaveFile.FileName := s;
  394. if SaveFile.Execute then
  395. begin
  396. b := true;
  397. if FileExists(SaveFile.FileName) then
  398. if MessageDlg('File exists overwrite?', mtWarning, [mbYes,mbNo], 0) = mrYes then
  399. DeleteFile(SaveFile.FileName);
  400. if ASCIIText1.Checked then
  401. FTP.TransferType := ftASCII
  402. else
  403. FTP.TransferType := ftBinary;
  404. if b then
  405. FTP.Get(s, SaveFile.FileName, True, false);//FTP.ResumeSupported);
  406. end;
  407. end;
  408. end
  409. else
  410. MessageDlg('You must first select a file to download from the site.', mtWarning, [mbOK], 0);
  411. end;
  412. procedure TfrmMain.lbDirectoryDblClick(Sender: TObject);
  413. begin
  414. actDownloadFile.Execute;
  415. end;
  416. procedure TfrmMain.actDeleteFileFolderExecute(Sender: TObject);
  417. var
  418. i : Integer;
  419. s : String;
  420. begin
  421. i := lbDirectory.ItemIndex;
  422. if i <> -1 then
  423. begin
  424. s := lbDirectory.Items[i];
  425. if MessageDlg('Are you sure you want to delete %s?', mtWarning, [mbYes,mbNo], 0) = mrYes then
  426. FTP.Delete(s);
  427. DisplayFTP;
  428. end
  429. else
  430. MessageDlg('You must first select a file or folder to delete from the site.', mtWarning, [mbOK], 0);
  431. end;
  432. procedure TfrmMain.actCreateFolderExecute(Sender: TObject);
  433. var
  434. s : String;
  435. begin
  436. s := 'New Folder';
  437. if InputQuery('New folder', 'New folder name:', s) then
  438. begin
  439. FTP.MakeDir(s);
  440. ChangeFTPDir(s);
  441. end;
  442. end;
  443. procedure TfrmMain.actUploadFileExecute(Sender: TObject);
  444. begin
  445. if OpenDialog.Execute then
  446. begin
  447. if BinaryNottext1.Checked then
  448. FTP.TransferType := ftASCII
  449. else
  450. FTP.TransferType := ftBinary;
  451. FTP.Put(OpenDialog.FileName, ExtractFileName(OpenDialog.FileName));
  452. DisplayFTP;
  453. end;
  454. end;
  455. procedure TfrmMain.lbDirectoryKeyPress(Sender: TObject; var Key: Char);
  456. begin
  457. case Key of
  458. #13:
  459. actDownloadFile.Execute;
  460. #8:
  461. actBack.Execute;
  462. end;
  463. end;
  464. procedure TfrmMain.FormDestroy(Sender: TObject);
  465. begin
  466. FLastDirStack.Free;
  467. StoreDefaultValues;
  468. Ini.Free;
  469. Sites.Free;
  470. ApplicationConfig.Free;
  471. end;
  472. procedure TfrmMain.actBackExecute(Sender: TObject);
  473. var
  474. s : String;
  475. begin
  476. if FLastDirStack.Count > 0 then
  477. begin
  478. s := FLastDirStack[FLastDirStack.Count -1];
  479. ChangeFTPDir(s);
  480. // Delete S
  481. FLastDirStack.Delete(FLastDirStack.Count -1);
  482. // Delete the jump from S
  483. FLastDirStack.Delete(FLastDirStack.Count -1);
  484. SetControls;
  485. end;
  486. end;
  487. procedure TfrmMain.actHomeExecute(Sender: TObject);
  488. begin
  489. ChangeFTPDir(FRootDir);
  490. end;
  491. procedure TfrmMain.actHelpExecute(Sender: TObject);
  492. begin
  493. if actHelp.Enabled then
  494. frmAbout.ShowModal;
  495. //ShellExecute(handle, 'OPEN', PChar(HelpFile), '', '', SW_SHOWNORMAL);
  496. end;
  497. function TfrmMain.GetHelpFile: String;
  498. begin
  499. if FHelpFile = '' then
  500. FHelpFile := ExpandFileName(ExtractFilePath(ParamStr(0)) + '..\Help\index.htm');
  501. Result := FHelpFile;
  502. end;
  503. procedure TfrmMain.LoadDefaultValues;
  504. var
  505. i, c : Integer;
  506. s : String;
  507. site : TFTPSiteInfo;
  508. begin
  509. InitLogColors;
  510. ApplicationConfig.LoadFromIni(Ini);
  511. Sites.Clear;
  512. c := Ini.ReadInteger('SITES', 'Count', 0);
  513. for i := 0 to c -1 do
  514. begin
  515. site := TFTPSiteInfo.Create;
  516. s := 'Site' + IntToStr(i) + '.';
  517. site.Name := Ini.ReadString('SITES', s + 'Name', '');
  518. site.Address := Ini.ReadString('SITES', s + 'Address', '');
  519. site.UserName := Ini.ReadString('SITES', s + 'UserName', '');
  520. site.Password := Ini.ReadString('SITES', s + 'Password', '');
  521. site.RootDir := Ini.ReadString('SITES', s + 'RootDir', '');
  522. Sites.Add(Site);
  523. end;
  524. cbFTPAddress.Items.Clear;
  525. for i := 0 to Sites.Count -1 do
  526. begin
  527. cbFTPAddress.Items.AddObject(Sites[i].Name, Sites[i]);
  528. end;
  529. end;
  530. procedure TfrmMain.StoreDefaultValues;
  531. var
  532. i : Integer;
  533. s : String;
  534. site : TFTPSiteInfo;
  535. begin
  536. for i := 0 to Sites.Count -1 do
  537. begin
  538. site := Sites[i];
  539. s := 'Site' + IntToStr(i) + '.';
  540. Ini.WriteString('SITES', s + 'Name', site.Name);
  541. Ini.WriteString('SITES', s + 'Address', site.Address);
  542. Ini.WriteString('SITES', s + 'UserName', site.UserName);
  543. Ini.WriteString('SITES', s + 'Password', site.Password);
  544. Ini.WriteString('SITES', s + 'RootDir', site.RootDir);
  545. end;
  546. ApplicationConfig.SaveToIni(Ini);
  547. Ini.WriteInteger('SITES', 'Count', Sites.Count);
  548. s := cbFTPAddress.Text;
  549. cbFTPAddress.OnChange := nil;
  550. try
  551. cbFTPAddress.ItemIndex := sites.IndexOfName(s);
  552. if cbFTPAddress.ItemIndex = -1 then
  553. cbFTPAddress.ItemIndex := sites.IndexOfAddress(s);
  554. finally
  555. cbFTPAddress.OnChange := cbFTPAddressChange;
  556. end;
  557. end;
  558. procedure TfrmMain.actConfigureSiteExecute(Sender: TObject);
  559. begin
  560. if ConfigureSite(cbFTPAddress.ItemIndex, Sites) then
  561. begin
  562. StoreDefaultValues;
  563. LoadDefaultValues;
  564. end;
  565. end;
  566. procedure TfrmMain.actConfigureApplicationExecute(Sender: TObject);
  567. begin
  568. if ConfigureApplication(ApplicationConfig) then
  569. StoreDefaultValues;
  570. end;
  571. procedure TfrmMain.cbFTPAddressChange(Sender: TObject);
  572. var
  573. i : Integer;
  574. begin
  575. i := cbFTPAddress.ItemIndex;
  576. if i = -1 then
  577. begin
  578. edUserName.Text := '';
  579. edPassword.Text := '';
  580. end
  581. else
  582. begin
  583. edUserName.Text := TFTPSiteInfo(cbFTPAddress.Items.Objects[i]).UserName;
  584. edPassword.Text := TFTPSiteInfo(cbFTPAddress.Items.Objects[i]).Password;
  585. end;
  586. actConfigureSite.Enabled := (cbFTPAddress.Text <> '');
  587. actConnectDisconnect.Enabled := (cbFTPAddress.Text <> '');
  588. end;
  589. procedure TfrmMain.InitLogColors;
  590. begin
  591. with ApplicationConfig.LogColors do
  592. begin
  593. Colors['Default'] := clBlack;
  594. Colors['hsStatusText'] := clBlack;
  595. Colors['hsResolving'] := clBlack;
  596. Colors['hsConnecting'] := clBlack;
  597. Colors['hsDisconnecting'] := clBlack;
  598. Colors['hsConnected'] := clBlue;
  599. Colors['hsDisconnected'] := clBlue;
  600. Colors['ftpTransfer'] := clBlue;
  601. Colors['ftpReady'] := clGreen;
  602. Colors['ftpAborted'] := clRed;
  603. end;
  604. end;
  605. procedure TfrmMain.BinaryNottext1Click(Sender: TObject);
  606. begin
  607. TMenuItem(Sender).Checked := true;
  608. end;
  609. end.