2
0

clientcustomizer.pas 3.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131
  1. unit clientcustomizer;
  2. {$mode objfpc}{$H+}
  3. interface
  4. uses
  5. Classes, SysUtils, Fileutil, Forms, Controls, Graphics, Dialogs, ExtCtrls,
  6. EditBtn, StdCtrls;
  7. type
  8. { TfrmClientCustomizer }
  9. TfrmClientCustomizer = class(TForm)
  10. Btncancel: TButton;
  11. Btnsave: TButton;
  12. Checkridefile: Tfilenameedit;
  13. Lblcheckrideexe: Tlabel;
  14. SaveCheckride: Tsavedialog;
  15. Servername: Tlabelededit;
  16. HelperName: TLabeledEdit;
  17. Serverport: Tlabelededit;
  18. procedure Btncancelclick(Sender: TObject);
  19. procedure Btnsaveclick(Sender: TObject);
  20. procedure CheckRideFileAcceptFileName(Sender: TObject; var Value: string);
  21. procedure Checkridefileeditingdone(Sender: TObject);
  22. private
  23. procedure FindAndReplace(TextFile, LookFor, ReplaceWith: string);
  24. procedure UpdateEditControls(SwitchOn: boolean);
  25. public
  26. { public declarations }
  27. end;
  28. var
  29. frmClientCustomizer: TfrmClientCustomizer;
  30. implementation
  31. uses resourcezipper, checkrideutil;
  32. {$R *.lfm}
  33. { TfrmClientCustomizer }
  34. procedure Tfrmclientcustomizer.Checkridefileeditingdone(Sender: TObject);
  35. begin
  36. UpdateEditControls(FileExists(CheckRideFile.Text));
  37. end;
  38. procedure TfrmClientCustomizer.FindAndReplace(TextFile, LookFor, ReplaceWith: string);
  39. var
  40. slFile: TStringList;
  41. begin
  42. slFile := TStringList.Create;
  43. try
  44. slFile.LoadFromFile(TextFile);
  45. slFile.Text := StringReplace(slFile.Text, LookFor, ReplaceWith, [rfReplaceAll]);
  46. slFile.SaveToFile(TextFile);
  47. finally
  48. slFile.Free;
  49. end;
  50. end;
  51. procedure Tfrmclientcustomizer.Btncancelclick(Sender: TObject);
  52. begin
  53. UpdateEditControls(False);
  54. CheckRideFile.Text := '';
  55. end;
  56. procedure Tfrmclientcustomizer.Btnsaveclick(Sender: TObject);
  57. var
  58. TargetFileName: string;
  59. Resource: TResourceZipper;
  60. ResourceDir: string;
  61. begin
  62. //Suggestion:
  63. SaveCheckride.FileName := CheckRideFile.FileName + '_' + Trim(HelperName.Text) + '.exe';
  64. if SaveCheckride.Execute then
  65. begin
  66. Resource := TResourceZipper.Create;
  67. try
  68. TargetFileName := SaveCheckride.FileName;
  69. CopyFile(Checkridefile.FileName, TargetFileName);
  70. // Extract CheckRide.exe resource into temp dir...
  71. ResourceDir := ResourceExtract(TargetFileName);
  72. if ResourceDir = EmptyStr then
  73. raise Exception.Create('Resource extraction failed.');
  74. // ...Change contents...
  75. FindAndReplace(ResourceDir + CheckRideConfigFileName, HelperHostExample,
  76. ServerName.Text);
  77. FindAndReplace(ResourceDir + CheckRideConfigFileName, HelperPortExample,
  78. ServerPort.Text);
  79. FindAndReplace(ResourceDir + CheckRideConfigFileName, HelperNameExample,
  80. HelperName.Text);
  81. //...and overwreite resource in target file
  82. Resource.Executable := TargetFileName;
  83. Resource.ZipSourceDir := ResourceDir; //Point to changed resource files
  84. Resource.WriteCheckRideResource; //Replace existing resource
  85. //todo: clear out temp files
  86. ShowMessage('Custom checkride executable has been saved as: ' + TargetFileName);
  87. finally
  88. Resource.Free;
  89. try
  90. UpdateEditControls(false);
  91. finally
  92. //ignore errors
  93. end;
  94. end;
  95. end;
  96. end;
  97. procedure TfrmClientCustomizer.CheckRideFileAcceptFileName(Sender: TObject;
  98. var Value: string);
  99. begin
  100. UpdateEditControls(True);
  101. end;
  102. procedure Tfrmclientcustomizer.UpdateEditControls(SwitchOn: boolean);
  103. begin
  104. ServerPort.Enabled := SwitchOn;
  105. ServerName.Enabled := SwitchOn;
  106. HelperName.Enabled := SwitchOn;
  107. btnSave.Enabled := SwitchOn;
  108. end;
  109. end.