123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131 |
- unit clientcustomizer;
- {$mode objfpc}{$H+}
- interface
- uses
- Classes, SysUtils, Fileutil, Forms, Controls, Graphics, Dialogs, ExtCtrls,
- EditBtn, StdCtrls;
- type
- { TfrmClientCustomizer }
- TfrmClientCustomizer = class(TForm)
- Btncancel: TButton;
- Btnsave: TButton;
- Checkridefile: Tfilenameedit;
- Lblcheckrideexe: Tlabel;
- SaveCheckride: Tsavedialog;
- Servername: Tlabelededit;
- HelperName: TLabeledEdit;
- Serverport: Tlabelededit;
- procedure Btncancelclick(Sender: TObject);
- procedure Btnsaveclick(Sender: TObject);
- procedure CheckRideFileAcceptFileName(Sender: TObject; var Value: string);
- procedure Checkridefileeditingdone(Sender: TObject);
- private
- procedure FindAndReplace(TextFile, LookFor, ReplaceWith: string);
- procedure UpdateEditControls(SwitchOn: boolean);
- public
- { public declarations }
- end;
- var
- frmClientCustomizer: TfrmClientCustomizer;
- implementation
- uses resourcezipper, checkrideutil;
- {$R *.lfm}
- { TfrmClientCustomizer }
- procedure Tfrmclientcustomizer.Checkridefileeditingdone(Sender: TObject);
- begin
- UpdateEditControls(FileExists(CheckRideFile.Text));
- end;
- procedure TfrmClientCustomizer.FindAndReplace(TextFile, LookFor, ReplaceWith: string);
- var
- slFile: TStringList;
- begin
- slFile := TStringList.Create;
- try
- slFile.LoadFromFile(TextFile);
- slFile.Text := StringReplace(slFile.Text, LookFor, ReplaceWith, [rfReplaceAll]);
- slFile.SaveToFile(TextFile);
- finally
- slFile.Free;
- end;
- end;
- procedure Tfrmclientcustomizer.Btncancelclick(Sender: TObject);
- begin
- UpdateEditControls(False);
- CheckRideFile.Text := '';
- end;
- procedure Tfrmclientcustomizer.Btnsaveclick(Sender: TObject);
- var
- TargetFileName: string;
- Resource: TResourceZipper;
- ResourceDir: string;
- begin
- //Suggestion:
- SaveCheckride.FileName := CheckRideFile.FileName + '_' + Trim(HelperName.Text) + '.exe';
- if SaveCheckride.Execute then
- begin
- Resource := TResourceZipper.Create;
- try
- TargetFileName := SaveCheckride.FileName;
- CopyFile(Checkridefile.FileName, TargetFileName);
- // Extract CheckRide.exe resource into temp dir...
- ResourceDir := ResourceExtract(TargetFileName);
- if ResourceDir = EmptyStr then
- raise Exception.Create('Resource extraction failed.');
- // ...Change contents...
- FindAndReplace(ResourceDir + CheckRideConfigFileName, HelperHostExample,
- ServerName.Text);
- FindAndReplace(ResourceDir + CheckRideConfigFileName, HelperPortExample,
- ServerPort.Text);
- FindAndReplace(ResourceDir + CheckRideConfigFileName, HelperNameExample,
- HelperName.Text);
- //...and overwreite resource in target file
- Resource.Executable := TargetFileName;
- Resource.ZipSourceDir := ResourceDir; //Point to changed resource files
- Resource.WriteCheckRideResource; //Replace existing resource
- //todo: clear out temp files
- ShowMessage('Custom checkride executable has been saved as: ' + TargetFileName);
- finally
- Resource.Free;
- try
- UpdateEditControls(false);
- finally
- //ignore errors
- end;
- end;
- end;
- end;
- procedure TfrmClientCustomizer.CheckRideFileAcceptFileName(Sender: TObject;
- var Value: string);
- begin
- UpdateEditControls(True);
- end;
- procedure Tfrmclientcustomizer.UpdateEditControls(SwitchOn: boolean);
- begin
- ServerPort.Enabled := SwitchOn;
- ServerName.Enabled := SwitchOn;
- HelperName.Enabled := SwitchOn;
- btnSave.Enabled := SwitchOn;
- end;
- end.
|