⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 delphiutils.iss

📁 East make Tray Icon in delphi
💻 ISS
字号:
const
  DelphiIDEFileName          = 'Bin\delphi32.exe';
  DelphiRepositoryFileName   = 'Bin\delphi32.dro';
  DCC32FileName              = 'Bin\dcc32.exe';
  BRCC32FileName             = 'Bin\brcc32.exe';
  DelphiKeyName              = 'SOFTWARE\Borland\Delphi';
  BCBKeyName                 = 'SOFTWARE\Borland\C++Builder';

  LibraryKeyName             = 'Library';
  LibraryRootDir             = 'RootDir';
  LibrarySearchPathValueName = 'Search Path';
  LibraryBPLOutputValueName  = 'Package DPL Output';
  LibraryDCPOutputValueName  = 'Package DCP Output';
  KnownPackagesKeyName       = 'Known Packages';
  DCC32CFGFileName           = 'DCC32.CFG';

  DelphiHelpContentFileName  = 'Help\%s.ohc';
  DelphiHelpIndexFileName    = 'Help\%s.ohi';
  DelphiHelpLinkFileName     = 'Help\%s.ohl';
  DelphiHelpProjectFileName  = 'Help\%s.ohp';
  DelphiHelpGidFileName      = 'Help\%s.gid';
  MSHelpSystemKeyName        = 'Software\Microsoft\Windows\Help';
  
#define DEBUGOUTPUT
procedure Log(Msg:String);
begin
#if defined DEBUGOUTPUT
  MsgBox(Msg,mbInformation, MB_OK);
#endif  
end;

// utility function for testing the Check: attribute
function ResultFalse:boolean;
begin
  Result := false;
end;

// utility function for testing the Check: attribute
function ResultTrue:boolean;
begin
  Result := true;
end;


function ExtractDOFDirectories(DOFFilename:string;UnitOutputDir:boolean):string;
var
  S:TStringlist;
  i,j:integer;
  AFind:string;
begin
  Result := '';
  DOFFilename := ExpandConstant(DOFFilename);
  if not FileExists(DOFFilename) then Exit;
  if UnitOutputDir then
    AFind := LowerCase('UnitOutputDir=')
  else
    AFind := LowerCase('SearchPath=');

  S := TStringlist.Create;
  try
    S.LoadFromFile(DOFFilename);
    for i := 0 to S.Count - 1 do
    begin
      j := Pos(AFind,LowerCase(S.Strings[i]));
      if j = 1 then
      begin
        j := Pos('=',S.Strings[i]);
        if j > 0 then
          Result := Copy(S.Strings[i],j + 1,Length(S.Strings[I]));
        Exit;
      end;
    end;
  finally
    S.Free;
  end;
end;

function IsVersionEqualOrAbove(S:string;Major, Minor, Release, Build:integer):boolean;
var
  Version:array of integer;i,j:integer;
begin
  SetArrayLength(Version,4);
  for i := 0 to 3 do
  begin
    Version[i] := 0;
    j := Pos('.',S);
    if j > 0 then
    begin
      Version[i] := StrToIntDef(Copy(S,1,j-1),0);
      S := Copy(S,j+1, Length(S));
    end
    else
    begin
      Version[i] := StrToIntDef(S,0);
      S := '';
    end;
  end;
  Result := false;
  if Version[0] < Major then Exit;
  if Version[1] < Minor then Exit;
  if Version[2] < Release then Exit;
  if Version[3] < Build then Exit;
  Result := true;
end;


// folder where DCP files are output. DelphiVersion should be on the form '5.0', '6.0' etc
function DelphiDCPFolder(DelphiVersion:string):string;
var S:string;
begin
  S := AddBackSlash(DelphiKeyName) + AddBackSlash(DelphiVersion) + LibraryKeyName;
  if not RegQueryStringValue(HKCU, S, LibraryDCPOutputValueName,Result) then
    Result := '';
end;

// folder where BPL files are output. DelphiVersion should be on the form '5.0', '6.0' etc
function DelphiBPLFolder(DelphiVersion:string):string;
var S:string;
begin
  S := AddBackSlash(DelphiKeyName) + AddBackSlash(DelphiVersion) + LibraryKeyName;
  if not RegQueryStringValue(HKCU, S, LibraryBPLOutputValueName,Result) then
    Result := '';
end;

// root folder where Delphi is installed (without trailing backslash). DelphiVersion should be on the form '5.0', '6.0' etc
function DelphiRootDir(DelphiVersion:string):string;
begin
  if not RegQueryStringValue(HKLM, AddBackSlash(DelphiKeyName) + DelphiVersion, LibraryRootDir, Result) then
    Result := '';
end;

// path and filename of dcc.exe
function DelphiDCC(DelphiVersion:string):string;
begin
  Result := DelphiRootDir(DelphiVersion);
  if Result <> '' then
  begin
    Result := AddBackSlash(Result) + DCC32FileName;
    if not FileExists(Result) then
      Result := '';
  end;
end;

// path and filename of brcc32.exe
function DelphiBRCC(DelphiVersion:string):string;
begin
  Result := DelphiRootDir(DelphiVersion);
  if Result <> '' then
  begin
    Result := AddBackSlash(Result) + BRCC32FileName;
    if not FileExists(Result) then
      Result := '';
  end;
end;

function IsDelphiInstalled(DelphiVersion:string):boolean;
begin
  Result := FileExists(AddBackSlash(DelphiRootDir(DelphiVersion)) + DelphiIDEFileName);
//  Result := RegKeyExists(HKLM, 'Software\Borland\Delphi\' + DelphiVersion);
end;

function IsBCBInstalled(BCBVersion:string):boolean;
begin
  Result := RegKeyExists(HKLM, AddBackSlash(BCBKeyName) + BCBVersion);
end;

function DCCCompile(DelphiVersion, CommandLine, WorkDir:string):boolean;
var S,OldDir:string;ACode:integer;
begin
  Result := false;
  S := DelphiDCC(DelphiVersion);
  if FileExists(S) then
  begin
    OldDir := GetCurrentDir;
    try
      SetCurrentDir(ExpandConstant(WorkDir));
      if FileExists(DCC32CFGFileName) then DeleteFile(DCC32CFGFileName);
//      Log('DCCCompile: ' + #13#10 + S + ' ' + CommandLine + ' (' + WorkDir + ')');
      Result := InstExec(S, CommandLine, WorkDir, true, false, SW_HIDE, ACode);
    finally
      SetCurrentDir(OldDir);
    end;
    if not Result then SysErrorMessage(ACode);
  end;
end;

function InstallDelphiPackage(DelphiVersion, PackageFileName, PackageDescription:string):boolean;
begin
  Result := RegWriteStringValue(HKCU,AddBackSlash(DelphiKeyName) + DelphiVersion + KnownPackagesKeyName,
    ExpandConstant(PackageFileName), PackageDescription);
end;

function BuildDelphiPackage(DelphiVersion, PackageName, PackageDescription:String; Install:boolean):boolean;
var DCC:string;
begin
  Result := false;
  DCC := DelphiDCC(DelphiVersion);
  if DCC = '' then Exit;
  // extract paths from dof, build command-line, call dcc.exe
  if Result and Install then
    Result := InstallDelphiPackage(AddBackSlash(DelphiBPLFolder(DelphiVersion)) + ChangeFileExt(ExtractFileName(PackageName),'.bpl'),
      PackageDescription, DelphiVersion);
end;

// installs the specified help file in the OpenHelp system
// DelphiVersion should be on the form '5.0', '6.0' etc
function InstallDelphiOpenHelpFile(DelphiVersion, HelpFile:string):boolean;
begin
  HelpFile := ExpandConstant(HelpFile);

end;

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -