📄 jclborlandtools.pas
字号:
Path := StrEnsureSuffix(PathSep, Path) + Folder;
Result := True;
end;
end;
finally
PathItems.Free;
NewItems.Free;
end;
end;
function TJclBorRADToolInstallation.RemoveFromPath(var Path: string; const ItemsToRemove: string): Boolean;
var
PathItems, RemoveItems: TStringList;
Folder: string;
I, J: Integer;
begin
Result := False;
PathItems := nil;
RemoveItems := nil;
try
PathItems := TStringList.Create;
RemoveItems := TStringList.Create;
ExtractPaths(Path, PathItems);
ExtractPaths(ItemsToRemove, RemoveItems);
for I := 0 to RemoveItems.Count - 1 do
begin
Folder := RemoveItems[I];
J := FindFolderInPath(Folder, PathItems);
if J <> -1 then
begin
PathItems.Delete(J);
Result := True;
end;
end;
Path := StringsToStr(PathItems, PathSep, False);
finally
PathItems.Free;
RemoveItems.Free;
end;
end;
function TJclBorRADToolInstallation.FindFolderInPath(Folder: string; List: TStrings): Integer;
var
I: Integer;
begin
Result := -1;
Folder := PathRemoveSeparator(Folder);
for I := 0 to List.Count - 1 do
if AnsiSameText(Folder, PathRemoveSeparator(SubstitutePath(List[I]))) then
begin
Result := I;
Break;
end;
end;
{ TODO -cHelp : Donator: Adreas Hausladen }
{$IFDEF MSWINDOWS}
function TJclBorRADToolInstallation.GetBorlandStudioProjectsDir: string;
var
h: HMODULE;
LocaleName: array[0..4] of Char;
Filename: string;
begin
if IsBDSPersonality then
begin
Result := 'Borland Studio Projects'; // do not localize
FillChar(LocaleName, SizeOf(LocaleName[0]), 0);
GetLocaleInfo(GetThreadLocale, LOCALE_SABBREVLANGNAME, LocaleName, SizeOf(LocaleName));
if LocaleName[0] <> #0 then
begin
Filename := RootDir + '\Bin\coreide' + BDSVersions[IDEVersionNumber].CoreIdeVersion + '.';
if FileExists(Filename + LocaleName) then
Filename := Filename + LocaleName
else
begin
LocaleName[2] := #0;
if FileExists(Filename + LocaleName) then
Filename := Filename + LocaleName
else
Filename := '';
end;
if Filename <> '' then
begin
h := LoadLibraryEx(PChar(Filename), 0,
LOAD_LIBRARY_AS_DATAFILE or DONT_RESOLVE_DLL_REFERENCES);
if h <> 0 then
begin
SetLength(Result, 1024);
SetLength(Result, LoadString(h, BDSVersions[IDEVersionNumber].ProjectsDirResId, PChar(Result), Length(Result) - 1));
FreeLibrary(h);
end;
end;
end;
Result := PathAddSeparator(GetPersonalFolder) + Result;
end
else
Result := '';
end;
{$ENDIF MSWINDOWS}
function TJclBorRADToolInstallation.GetBPLOutputPath: string;
begin
Result := SubstitutePath(ConfigData.ReadString(LibraryKeyName, LibraryBPLOutputValueName, ''));
end;
function TJclBorRADToolInstallation.GetDCC: TJclDCC;
begin
if not Assigned(FDCC) then
FDCC := TJclDCC.Create(Self);
Result := FDCC;
end;
function TJclBorRADToolInstallation.GetDCPOutputPath: string;
begin
Result := SubstitutePath(ConfigData.ReadString(LibraryKeyName, LibraryDCPOutputValueName, ''));
end;
function TJclBorRADToolInstallation.GetDebugDCUPath: string;
begin
Result := ConfigData.ReadString(DebuggingKeyName, DebugDCUPathValueName, '');
end;
function TJclBorRADToolInstallation.GetDefaultProjectsDir: string;
begin
{$IFDEF KYLIX}
Result := GetPersonalFolder;
{$ELSE ~KYLIX}
Result := Globals.Values['DefaultProjectsDirectory'];
if Result = '' then
if IsBDSPersonality then
Result := GetBorlandStudioProjectsDir
else
Result := PathAddSeparator(RootDir) + 'Projects';
{$ENDIF ~KYLIX}
end;
function TJclBorRADToolInstallation.GetDescription: string;
begin
Result := Format('%s %s', [Name, EditionAsText]);
if InstalledUpdatePack > 0 then
Result := Result + ' ' + Format(RsUpdatePackName, [InstalledUpdatePack]);
end;
function TJclBorRADToolInstallation.GetEditionAsText: string;
begin
{$IFDEF KYLIX}
case Edition of
deOPEN:
Result := RsOpenEdition;
dePRO:
Result := RsProfessional;
deSVR:
if VersionNumber >= 2 then
Result := RsEnterprise
else
Result := RsServerDeveloper;
end;
{$ELSE}
Result := FEditionStr;
if Length(FEditionStr) = 3 then
case Edition of
deSTD:
if VersionNumber >= 6 then
Result := RsPersonal
else
Result := RsStandard;
dePRO:
Result := RsProfessional;
deCSS:
if VersionNumber >= 5 then
Result := RsEnterprise
else
Result := RsClientServer;
end;
{$ENDIF KYLIX}
end;
function TJclBorRADToolInstallation.GetEnvironmentVariables: TStrings;
const
ToolNames: array[TJclBorRadToolKind] of string = ('DELPHI', 'BCB');
var
EnvNames: TStringList;
EnvVarKeyName: string;
I: Integer;
begin
if FEnvironmentVariables = nil then
begin
FEnvironmentVariables := TStringList.Create;
if (VersionNumber >= 6) and ConfigData.SectionExists(EnvVariablesKeyName) then
begin
EnvNames := TStringList.Create;
try
ConfigData.ReadSection(EnvVariablesKeyName, EnvNames);
for I := 0 to EnvNames.Count - 1 do
begin
EnvVarKeyName := EnvNames[I];
FEnvironmentVariables.Values[EnvVarKeyName] := ConfigData.ReadString(EnvVariablesKeyName, EnvVarKeyName, '');
end;
finally
EnvNames.Free;
end;
end;
if IsBDSPersonality then
begin
FEnvironmentVariables.Values['BDS'] := PathRemoveSeparator(RootDir);
FEnvironmentVariables.Values['BDSPROJECTSDIR'] := DefaultProjectsDir;
end
else
FEnvironmentVariables.Values[ToolNames[RADToolKind]] := PathRemoveSeparator(RootDir);
end;
Result := FEnvironmentVariables;
end;
function TJclBorRADToolInstallation.GetGlobals: TStrings;
begin
Result := FGlobals;
end;
function TJclBorRADToolInstallation.GetIdeExeFileName: string;
{$IFDEF KYLIX}
const
IdeFileNames: array [TJclBorRADToolKind] of string = (DelphiIdeExeName, BCBIdeExeName);
begin
Result := FBinFolderName + IdeFileNames[RADToolKind];
end;
{$ENDIF KYLIX}
{$IFDEF MSWINDOWS}
begin
Result := Globals.Values['App'];
end;
{$ENDIF MSWINDOWS}
function TJclBorRADToolInstallation.GetIdeExeBuildNumber: string;
begin
{$IFDEF KYLIX}
{ TODO : determine Kylix IDE build # }
Result := '?';
{$ELSE}
Result := VersionFixedFileInfoString(IdeExeFileName, vfFull);
{$ENDIF KYLIX}
end;
function TJclBorRADToolInstallation.GetIdePackages: TJclBorRADToolIdePackages;
begin
if not Assigned(FIdePackages) then
FIdePackages := TJclBorRADToolIdePackages.Create(Self);
Result := FIdePackages;
end;
function TJclBorRADToolInstallation.GetLatestUpdatePack: Integer;
begin
Result := GetLatestUpdatePackForVersion(VersionNumber);
end;
class function TJclBorRADToolInstallation.GetLatestUpdatePackForVersion(Version: Integer): Integer;
begin
// dummy; BCB doesn't like abstract class functions
Result := 0;
end;
function TJclBorRADToolInstallation.GetLibrarySearchPath: TJclBorRADToolPath;
begin
Result := ConfigData.ReadString(LibraryKeyName, LibrarySearchPathValueName, '');
end;
function TJclBorRADToolInstallation.GetLibraryBrowsingPath: TJclBorRADToolPath;
begin
Result := ConfigData.ReadString(LibraryKeyName, LibraryBrowsingPathValueName, '');
end;
function TJclBorRADToolInstallation.GetName: string;
begin
{$IFDEF KYLIX}
Result := Format(RsKylixVersionName, [VersionNumber, RADToolName]);
{$ELSE ~KYLIX}
Result := Format('%s %d', [RADToolName, VersionNumber]);
{$ENDIF ~KYLIX}
end;
function TJclBorRADToolInstallation.GetPalette: TJclBorRADToolPalette;
begin
if not Assigned(FPalette) then
FPalette := TJclBorRADToolPalette.Create(Self);
Result := FPalette;
end;
function TJclBorRADToolInstallation.GetRepository: TJclBorRADToolRepository;
begin
if not Assigned(FRepository) then
FRepository := TJclBorRADToolRepository.Create(Self);
Result := FRepository;
end;
function TJclBorRADToolInstallation.GetUpdateNeeded: Boolean;
begin
Result := InstalledUpdatePack < LatestUpdatePack;
end;
function TJclBorRADToolInstallation.GetValid: Boolean;
begin
Result := (ConfigData.FileName <> '') and (RootDir <> '') and FileExists(IdeExeFileName);
end;
function TJclBorRADToolInstallation.InstallPackage(const PackageName, BPLPath, DCPPath: string): Boolean;
var
BPLFileName, Description, LibSuffix: string;
RunOnly: Boolean;
begin
Result := DCC.MakePackage(PackageName, BPLPath, DCPPath);
if Result then
begin
GetDPKFileInfo(PackageName, RunOnly, @LibSuffix, @Description);
if not RunOnly then
begin
BPLFileName := PathAddSeparator(BPLPath) + PathExtractFileNameNoExt(PackageName) + LibSuffix + '.bpl';
Result := IdePackages.AddPackage(BPLFileName, Description);
end;
end;
end;
function TJclBorRADToolInstallation.UninstallPackage(const PackageName, BPLPath, DCPPath: string): Boolean;
var
BPLFileName, DCPFileName: string;
BaseName, LibSuffix: string;
RunOnly, Success: Boolean;
begin
GetDPKFileInfo(PackageName, RunOnly, @LibSuffix);
BaseName := PathExtractFileNameNoExt(PackageName);
BPLFileName := PathAddSeparator(BPLPath) + BaseName + LibSuffix + '.bpl';
DCPFileName := PathAddSeparator(DCPPath) + BaseName + '.dcp';
Result := FileDelete(BPLFileName) and FileDelete(DCPFileName);
if not RunOnly then
begin
Success := IdePackages.RemovePackage(BPLFileName);
Result := Result and Success;
end;
end;
function TJclBorRADToolInstallation.IsBDSPersonality: Boolean;
begin
{$IFDEF MSWINDOWS}
Result := Pos('bds.exe', Globals.Values['App']) > 0;
{$ELSE}
Result := False;
{$ENDIF MSWINDOWS}
end;
function TJclBorRADToolInstallation.LibFolderName: string;
begin
Result := PathAddSeparator(RootDir) + PathAddSeparator('lib');
end;
function TJclBorRADToolInstallation.RemoveFromDebugDCUPath(const Path: string): Boolean;
var
TempDebugDCUPath: TJclBorRADToolPath;
begin
TempDebugDCUPath := DebugDCUPath;
Result := RemoveFromPath(TempDebugDCUPath, Path);
DebugDCUPath := TempDebugDCUPath;
end;
function TJclBorRADToolInstallation.RemoveFromLibrarySearchPath(const Path: string): Boolean;
var
TempLibraryPath: TJclBorRADToolPath;
begin
TempLibraryPath := LibrarySearchPath;
Result := RemoveFromPath(TempLibraryPath, Path);
LibrarySearchPath := TempLibraryPath;
end;
function TJclBorRADToolInstallation.RemoveFromLibraryBrowsingPath(const Path: string): Boolean;
var
TempLibraryPath: TJclBorRADToolPath;
begin
TempLibraryPath := LibraryBrowsingPath;
Result := RemoveFromPath(TempLibraryPath, Path);
LibraryBrowsingPath := TempLibraryPath;
end;
class function TJclBorRADToolInstallation.PackageSourceFileExtension: string;
begin
Result := '';
{$IFDEF MSWINDOWS}
raise EAbstractError.CreateResFmt(@SAbstractError, ['']); // BCB doesn't support abstract keyword
{$ENDIF MSWINDOWS}
end;
class function TJclBorRADToolInstallation.RADToolKind: TJclBorRADToolKind;
begin
if InheritsFrom(TJclBCBInstall
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -