📄 jclborlandtools.pas
字号:
if RADToolKind = brDelphi then
begin
if VersionNumber <= 6 then
S := 'delphi'
else
S := 'd';
end
else
S := 'bcb';
Result := Format(FormatName, [RootDir, S, VersionNumber]);
end;
end;
function TJclBorlandOpenHelp.RemoveHelpFile(const HelpFileName, IndexName: string): Boolean;
var
CntFileName, HelpName, CntName: string;
List: TStringList;
procedure RemoveFromList(const FileName, Text: string);
var
I, Attr: Integer;
Found: Boolean;
begin
List.LoadFromFile(FileName);
Found := False;
for I := 0 to List.Count - 1 do
if AnsiSameText(Trim(List[I]), Text) then
begin
Found := True;
List.Delete(I);
Break;
end;
if Found then
begin
Attr := FileGetAttr(FileName);
FileSetAttr(FileName, faArchive);
List.SaveToFile(FileName);
FileSetAttr(FileName, Attr);
end;
end;
begin
CntFileName := ChangeFileExt(HelpFileName, '.cnt');
Result := FileExists(HelpFileName) and FileExists(CntFileName);
if Result then
begin
HelpName := ExtractFileName(HelpFileName);
CntName := ExtractFileName(CntFileName);
//RegDeleteEntry(HKEY_LOCAL_MACHINE, MSHelpSystemKeyName, HelpName);
//RegDeleteEntry(HKEY_LOCAL_MACHINE, MSHelpSystemKeyName, CntName);
List := TStringList.Create;
try
RemoveFromList(ContentFileName, Format(':Include %s', [CntName]));
RemoveFromList(LinkFileName, Format(':Link %s', [HelpName]));
RemoveFromList(IndexFileName, Format(':Index %s=%s', [IndexName, HelpName]));
SetFileLastWrite(ProjectFileName, Now);
DeleteFile(GidFileName);
finally
List.Free;
end;
end;
end;
{$ENDIF MSWINDOWS}
//== { TJclBorRADToolIdeTool } ===============================================
constructor TJclBorRADToolIdeTool.Create(AInstallation: TJclBorRADToolInstallation);
begin
inherited Create(AInstallation);
FKey := TransferKeyName;
end;
procedure TJclBorRADToolIdeTool.CheckIndex(Index: Integer);
begin
if (Index < 0) or (Index >= Count) then
raise EJclError.CreateRes(@RsIndexOufOfRange);
end;
function TJclBorRADToolIdeTool.GetCount: Integer;
begin
Result := Installation.ConfigData.ReadInteger(Key, TransferCountValueName, 0);
end;
function TJclBorRADToolIdeTool.GetParameters(Index: Integer): string;
begin
CheckIndex(Index);
Result := Installation.ConfigData.ReadString(Key, Format(TransferParamsValueName, [Index]), '');
end;
function TJclBorRADToolIdeTool.GetPath(Index: Integer): string;
begin
CheckIndex(Index);
Result := Installation.ConfigData.ReadString(Key, Format(TransferPathValueName, [Index]), '');
end;
function TJclBorRADToolIdeTool.GetTitle(Index: Integer): string;
begin
CheckIndex(Index);
Result := Installation.ConfigData.ReadString(Key, Format(TransferTitleValueName, [Index]), '');
end;
function TJclBorRADToolIdeTool.GetWorkingDir(Index: Integer): string;
begin
CheckIndex(Index);
Result := Installation.ConfigData.ReadString(Key, Format(TransferWorkDirValueName, [Index]), '');
end;
function TJclBorRADToolIdeTool.IndexOfPath(const Value: string): Integer;
var
I: Integer;
begin
Result := -1;
for I := 0 to Count - 1 do
if AnsiSameText(Title[I], Value) then
begin
Result := I;
Break;
end;
end;
function TJclBorRADToolIdeTool.IndexOfTitle(const Value: string): Integer;
var
I: Integer;
begin
Result := -1;
for I := 0 to Count - 1 do
if Title[I] = Value then
begin
Result := I;
Break;
end;
end;
procedure TJclBorRADToolIdeTool.SetCount(const Value: Integer);
begin
if Value > Count then
Installation.ConfigData.WriteInteger(Key, TransferCountValueName, Value);
end;
procedure TJclBorRADToolIdeTool.SetParameters(Index: Integer; const Value: string);
begin
CheckIndex(Index);
Installation.ConfigData.WriteString(Key, Format(TransferParamsValueName, [Index]), Value);
end;
procedure TJclBorRADToolIdeTool.SetPath(Index: Integer; const Value: string);
begin
CheckIndex(Index);
Installation.ConfigData.WriteString(Key, Format(TransferPathValueName, [Index]), Value);
end;
procedure TJclBorRADToolIdeTool.SetTitle(Index: Integer; const Value: string);
begin
CheckIndex(Index);
Installation.ConfigData.WriteString(Key, Format(TransferTitleValueName, [Index]), Value);
end;
procedure TJclBorRADToolIdeTool.SetWorkingDir(Index: Integer; const Value: string);
begin
CheckIndex(Index);
Installation.ConfigData.WriteString(Key, Format(TransferWorkDirValueName, [Index]), Value);
end;
//=== { TJclBorRADToolIdePackages } ==========================================
constructor TJclBorRADToolIdePackages.Create(AInstallation: TJclBorRADToolInstallation);
begin
inherited Create(AInstallation);
FDisabledPackages := TStringList.Create;
FDisabledPackages.Sorted := True;
FDisabledPackages.Duplicates := dupIgnore;
FKnownPackages := TStringList.Create;
FKnownPackages.Sorted := True;
FKnownPackages.Duplicates := dupIgnore;
ReadPackages;
end;
destructor TJclBorRADToolIdePackages.Destroy;
begin
FreeAndNil(FDisabledPackages);
FreeAndNil(FKnownPackages);
inherited Destroy;
end;
function TJclBorRADToolIdePackages.AddPackage(const FileName, Description: string): Boolean;
begin
Result := True;
RemoveDisabled(FileName);
Installation.ConfigData.WriteString(KnownPackagesKeyName, FileName, Description);
ReadPackages;
end;
function TJclBorRADToolIdePackages.GetCount: Integer;
begin
Result := FKnownPackages.Count;
end;
function TJclBorRADToolIdePackages.GetPackageDescriptions(Index: Integer): string;
begin
Result := FKnownPackages.Values[FKnownPackages.Names[Index]];
end;
function TJclBorRADToolIdePackages.GetPackageDisabled(Index: Integer): Boolean;
begin
Result := Boolean(FKnownPackages.Objects[Index]);
end;
function TJclBorRADToolIdePackages.GetPackageFileNames(Index: Integer): string;
begin
Result := PackageEntryToFileName(FKnownPackages.Names[Index]);
end;
function TJclBorRADToolIdePackages.PackageEntryToFileName(const Entry: string): string;
begin
Result := {$IFDEF MSWINDOWS} PathGetLongName {$ENDIF} (Installation.SubstitutePath(Entry));
end;
procedure TJclBorRADToolIdePackages.ReadPackages;
procedure ReadPackageList(const Name: string; List: TStringList);
var
ListIsSorted: Boolean;
begin
ListIsSorted := List.Sorted;
List.Sorted := False;
List.Clear;
Installation.ConfigData.ReadSectionValues(Name, List);
List.Sorted := ListIsSorted;
end;
var
I: Integer;
begin
ReadPackageList(KnownPackagesKeyName, FKnownPackages);
ReadPackageList(DisabledPackagesKeyName, FDisabledPackages);
for I := 0 to Count - 1 do
if FDisabledPackages.IndexOfName(FKnownPackages.Names[I]) <> -1 then
FKnownPackages.Objects[I] := Pointer(True);
end;
procedure TJclBorRADToolIdePackages.RemoveDisabled(const FileName: string);
var
I: Integer;
begin
for I := 0 to FDisabledPackages.Count - 1 do
if AnsiSameText(FileName, PackageEntryToFileName(FDisabledPackages.Names[I])) then
begin
Installation.ConfigData.DeleteKey(DisabledPackagesKeyName, FDisabledPackages.Names[I]);
ReadPackages;
Break;
end;
end;
function TJclBorRADToolIdePackages.RemovePackage(const FileName: string): Boolean;
begin
Result := Installation.ConfigData.ValueExists(KnownPackagesKeyName, FileName);
if Result then
begin
RemoveDisabled(FileName);
Installation.ConfigData.DeleteKey(KnownPackagesKeyName, FileName);
ReadPackages;
end;
end;
//=== { TJclBorlandCommandLineTool } =========================================
constructor TJclBorlandCommandLineTool.Create(AInstallation: TJclBorRADToolInstallation);
begin
inherited Create(AInstallation);
FOptions := TStringList.Create;
end;
destructor TJclBorlandCommandLineTool.Destroy;
begin
FreeAndNil(FOptions);
inherited Destroy;
end;
procedure TJclBorlandCommandLineTool.AddPathOption(const Option, Path: string);
var
S: string;
begin
S := PathRemoveSeparator(Path);
{$IFDEF MSWINDOWS}
S := LowerCase(S); // file names are case insensitive
{$ENDIF MSWINDOWS}
{ TODO : If we were sure that options are always case-insensitive
for Borland tools, we could use UpperCase(Option) below. }
S := Format('-%s"%s"', [Option, S]);
// avoid duplicate entries
if Options.IndexOf(S) = -1 then
Options.Add(S);
end;
procedure TJclBorlandCommandLineTool.CheckOutputValid;
begin
if Assigned(FOutputCallback) then
raise EJclCommandLineToolError.CreateResFmt(@RsCmdLineToolOutputInvalid, [GetExeName]);
end;
function TJclBorlandCommandLineTool.Execute(const CommandLine: string): Boolean;
begin
if Assigned(FOutputCallback) then
Result := JclSysUtils.Execute(Format('%s %s', [FileName, CommandLine]), FOutputCallback) = 0
else
Result := JclSysUtils.Execute(Format('%s %s', [FileName, CommandLine]), FOutput) = 0;
end;
function TJclBorlandCommandLineTool.GetExeName: string;
begin
Result := '';
{$IFDEF MSWINDOWS}
raise EAbstractError.CreateResFmt(@SAbstractError, ['']); // BCB doesn't support abstract keyword
{$ENDIF MSWINDOWS}
end;
function TJclBorlandCommandLineTool.GetFileName: string;
begin
Result := Installation.BinFolderName + GetExeName;
if Pos(' ', Result) > 0 then
Result := AnsiQuotedStr(Result, '"');
end;
function TJclBorlandCommandLineTool.GetOptions: TStrings;
begin
Result := FOptions;
end;
function TJclBorlandCommandLineTool.GetOutput: string;
begin
CheckOutputValid;
Result := FOutput;
end;
function TJclBorlandCommandLineTool.GetOutputCallback: TTextHandler;
begin
Result := FOutputCallback;
end;
procedure TJclBorlandCommandLineTool.SetOutputCallback(const CallbackMethod: TTextHandler);
begin
FOutputCallback := CallbackMethod;
end;
//=== { TJclDCC } ============================================================
constructor TJclDCC.Create(AInstallation: TJclBorRADToolInstallation);
begin
inherited Create(AInstallation);
SetDefaultOptions; // in case $(DELPHI)\bin\dcc32.cfg (replace as appropriate) is invalid
end;
function TJclDCC.Execute(const CommandLine: string): Boolean;
const
{$IFDEF WIN32}
ConfFileName = 'DCC32.CFG';
{$ENDIF WIN32}
{$IFDEF KYLIX}
ConfFileName = 'dcc.conf';
{$ENDIF KYLIX}
begin
FOutput := '';
FOptions.SaveToFile(ConfFileName);
Result := inherited Execute(CommandLine);
DeleteFile(ConfFileName);
end;
function TJclDCC.GetExeName: string;
begin
Result := DCCExeName;
end;
function TJclDCC.MakePackage(const PackageName, BPLPath, DCPPath: string): Boolean;
const
DOFDirectoriesSection = 'Directories';
UnitOutputDirName = 'UnitOutputDir';
SearchPathName = 'SearchPath';
var
SaveDir, S: string;
OptionsFile: TIniFile;
begin
SaveDir := GetCurrentDir;
SetCurrentDir(ExtractFilePath(PackageName) + '.');
try
OptionsFile := TIniFile.Create(ChangeFileExt(PackageName, DelphiOptionsFileExtension));
try
Options.Clear;
S := OptionsFile.ReadString(DOFDirectoriesSection, SearchPathName, '');
AddPathOption('N', OptionsFile.ReadString(DOFDirectoriesSection, UnitOutputDirName, ''));
AddPathOption('I', S);
AddPathOption('R', S);
AddPathOption('LE', BPLPath);
AddPathOption('LN', DCPPath);
AddPathOption('U', StrEnsureSuffix(PathSep, DCPPath) + S);
finally
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -