251 lines
		
	
	
		
			7.9 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
			
		
		
	
	
			251 lines
		
	
	
		
			7.9 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
| unit kernel;
 | |
| {$mode delphi}
 | |
| {$codepage UTF8}
 | |
| interface
 | |
| uses windows, shlobj, comobj, ActiveX, Classes, SysUtils, FileUtil, Forms, LazFileUtils, dynlibs, LazUTF8Classes,
 | |
|      cde_types, Controls, ANBFormatString, cde_lang, ComCtrls, Menus, cde_disc_frame, cde_kernel, InterfaceBase,
 | |
|      VCLEx, LCLVersion;
 | |
| {stdcall}
 | |
| procedure UpdateDL (var DL: TStringListUTF8); STDCALL;
 | |
| function GetDiscInfo (const ADisc: String): TDiscInfo; STDCALL;
 | |
| procedure CreateShortCut(ShortCutName, Parameters, FileName: String); STDCALL;
 | |
| procedure UpdateLanguage; stdcall;
 | |
| procedure CreateDriveRec (const ADiscIndex: Byte); STDCALL;
 | |
| function FormatStrUDI (const AStr: String; const ADiscInfo: TDiscInfo): String; STDCALL;
 | |
| procedure EjectDrive (const ADrive: WideChar); STDCALL;
 | |
| procedure CloseDrive (const ADrive: WideChar); STDCALL;
 | |
| function GetFrame: Tcde_disc_frm; STDCALL;
 | |
| procedure ShowSettings (const APageIndx: Integer = 0); STDCALL;
 | |
| procedure ShowAboutInfo; STDCALL;
 | |
| implementation
 | |
| uses cde_MainForm, cde_SettingsForm, cde_AboutForm;
 | |
| procedure UpdateDL (var DL: TStringListUTF8);
 | |
| var DLL: TLibHandle;
 | |
|     GetCDDiscs: function: PChar;
 | |
| begin
 | |
| DL.Clear;
 | |
| DLL:= SafeLoadLibrary(CDELib);
 | |
| GetCDDiscs:= GetProcAddress(DLL, 'GetCDDiscs');
 | |
| DL.Delimiter:= ';';
 | |
| DL.DelimitedText:= GetCDDiscs;
 | |
| FreeLibrary(DLL);
 | |
| end;
 | |
| function GetDiscInfo (const ADisc: String): TDiscInfo;
 | |
| var DLL: TLibHandle;
 | |
|     GetVolumeInfo: function (const ADisc: WideChar): TDiscInfo;
 | |
| begin
 | |
| DLL:= SafeLoadLibrary(CDELib);
 | |
| GetVolumeInfo:= GetProcAddress(DLL, 'GetVolumeInfo');
 | |
| Result:= GetVolumeInfo(WideChar(ADisc[1]));
 | |
| FreeLibrary(DLL);
 | |
| end;
 | |
| procedure CreateShortCut(ShortCutName, Parameters, FileName: String);
 | |
| var ShellObject: IUnknown;
 | |
|     ShellLink: IShellLink;
 | |
|     PersistFile: IPersistFile;
 | |
|     FName: WideString;
 | |
| begin
 | |
| ShellObject:= CreateComObject(CLSID_ShellLink);
 | |
| ShellLink:= ShellObject as IShellLink;
 | |
| PersistFile:= ShellObject as IPersistFile;
 | |
| with ShellLink do
 | |
|  begin
 | |
|  SetArguments(PChar(Parameters));
 | |
|  SetPath(PChar(FileName));
 | |
|  SetWorkingDirectory(PChar(extractfilepath(FileName)));
 | |
|  FName:= ShortCutName;
 | |
|  PersistFile.Save(PWChar(FName), False);
 | |
|  end;
 | |
| end;
 | |
| procedure UpdateLanguage;
 | |
| begin
 | |
| Application.Title:= GetLocalizedString(cdeg_app_title);
 | |
| with cde_Main do
 | |
|  begin
 | |
|  Caption:= Application.Title;
 | |
|  NoDiscFound.Caption:= GetLocalizedString(cdeg_mainfrm_nodiscsfound);
 | |
|  DiscM.Caption:= GetLocalizedString(cdeg_mainfrm_discsm);
 | |
|  ActionsM.Caption:= GetLocalizedString(cdeg_mainfrm_actionsm);
 | |
|  SettingsM.Caption:= GetLocalizedString(cdeg_mainfrm_settingsm);
 | |
|  HelpM.Caption:= GetLocalizedString(cdeg_mainfrm_helpm);
 | |
|  RefrashM.Caption:= GetLocalizedString(cdeg_mainfrm_refrashm);
 | |
|  BrowseM.Caption:= GetLocalizedString(cdeg_mainfrm_browsem);
 | |
|  CreateLinkM.Caption:= GetLocalizedString(cdeg_mainfrm_createlinkm);
 | |
|  EjectM.Caption:= GetLocalizedString(cdeg_mainfrm_ejectm);
 | |
|  UserGuideM.Caption:= GetLocalizedString(cdeg_mainfrm_userguidem);
 | |
|  ProgramWebM.Caption:= GetLocalizedString(cdeg_mainfrm_webpagem);
 | |
|  AboutM.Caption:= GetLocalizedString(cdeg_mainfrm_aboutm);
 | |
|  end;
 | |
| end;
 | |
| procedure CreateDriveRec (const ADiscIndex: Byte);
 | |
| var DiscFrame: Tcde_disc_frm;
 | |
|     Tab: TTabSheet;
 | |
|     MItem: TMenuItem;
 | |
|     DI: TDiscInfo;
 | |
|     VDrive: WideChar;
 | |
| begin
 | |
| VDrive:= cde_Main.DiscList[ADiscIndex][1];
 | |
| DI:= GetDiscInfo(VDrive);
 | |
| Tab:= cde_Main.DiscPages.AddTabSheet;
 | |
| Tab.Caption:= FormatStrUDI(GetLocalizedString(cdeg_mainfrm_discmenuitem), DI);
 | |
| Tab.Tag:= ADiscIndex;
 | |
| Tab.ImageIndex:= 4;
 | |
| MItem:= TMenuItem.Create(cde_Main.MainMenu);
 | |
| MItem.Caption:= FormatStrUDI(GetLocalizedString(cdeg_mainfrm_discmenuitem), DI);
 | |
| MItem.Tag:= ADiscIndex;
 | |
| MItem.OnClick:= cde_Main.DiscsMenuClick;
 | |
| MItem.ImageIndex:= 4;
 | |
| cde_Main.MainMenu.Items.Items[0].Add(MItem);
 | |
| DiscFrame:= Tcde_disc_frm.Create(cde_Main);
 | |
| with DiscFrame do
 | |
|  begin
 | |
|  Parent:= Tab;
 | |
|  Align:= alClient;
 | |
|  Drive:= VDrive;
 | |
|  Tag:= ADiscIndex;
 | |
|  Name:= 'di' + IntToStr(ADiscIndex);
 | |
|  UpdateDriveInfo;
 | |
|  end;
 | |
| end;
 | |
| function FormatStrUDI (const AStr: String; const ADiscInfo: TDiscInfo): String;
 | |
| begin
 | |
| Result:= FormatStr(AStr, [
 | |
|                           '$letter$',
 | |
|                           '$volumename$',
 | |
|                           '$filesystrem$',
 | |
|                           '$serial$'
 | |
|                          ],
 | |
|                          [
 | |
|                           ADiscInfo.diDrive,
 | |
|                           ADiscInfo.diVolumeName,
 | |
|                           ADiscInfo.diFileSystem,
 | |
|                           IntToStr(ADiscInfo.diSerial)
 | |
|                          ]
 | |
| );
 | |
| end;
 | |
| procedure EjectDrive (const ADrive: WideChar);
 | |
| var DLL: TLibHandle;
 | |
|     EjectCD: function (const ADisc: WideChar): Boolean;
 | |
| begin
 | |
| DLL:= SafeLoadLibrary(CDELib);
 | |
| EjectCD:= GetProcAddress(DLL, 'EjectCD');
 | |
| EjectCD(ADrive);
 | |
| FreeLibrary(DLL);
 | |
| end;
 | |
| procedure CloseDrive (const ADrive: WideChar);
 | |
| var DLL: TLibHandle;
 | |
|     CloseCD: function (const ADisc: WideChar): Boolean;
 | |
| begin
 | |
| DLL:= SafeLoadLibrary(CDELib);
 | |
| CloseCD:= GetProcAddress(DLL, 'CloseCD');
 | |
| CloseCD(ADrive);
 | |
| FreeLibrary(DLL);
 | |
| end;
 | |
| function GetFrame: Tcde_disc_frm;
 | |
| var Indx: Byte;
 | |
|     Frame: Tcde_disc_frm;
 | |
| begin
 | |
| if not cde_Main.DiscPages.Visible then
 | |
|  Abort;
 | |
| Indx:= cde_Main.DiscPages.ActivePage.Tag;
 | |
| Frame:= (cde_Main.FindComponent('di' + IntToStr(Indx))) as Tcde_disc_frm;
 | |
| Result:= Frame;
 | |
| end;
 | |
| procedure ShowSettings (const APageIndx: Integer = 0);
 | |
| var SettingsFrm: Tcde_Settings;
 | |
|     Node: TTreeNode;
 | |
| begin
 | |
| SettingsFrm:= Tcde_Settings.Create(cde_Main);
 | |
| with SettingsFrm do
 | |
|  begin
 | |
|  Node:= SettingsTree.Items.Item[APageIndx];
 | |
|  SettingsTree.Select([Node]);
 | |
|  ShowModal;
 | |
|  Free;
 | |
|  end;
 | |
| end;
 | |
| function FormatAboutText (const AText: string): string;
 | |
| var LCLPlatformDisplayNames: array[TLCLPlatform] of string = ('gtk (deprecated)', 'gtk 2', 'gtk 3', 'win32/win64', 'wince', 'carbon', 'qt', 'fpGUI (alpha)', 'NoGUI', 'cocoa (alpha)', 'customdraw (alpha)');
 | |
|     BuildLCLWidgetType: TLCLPlatform =
 | |
|      {$IFDEF MSWindows}{$DEFINE WidgetSetDefined}
 | |
|       lpWin32;
 | |
|       {$ENDIF}
 | |
|      {$IFDEF darwin}{$DEFINE WidgetSetDefined}
 | |
|       lpCarbon;
 | |
|       {$ENDIF}
 | |
|      {$IFNDEF WidgetSetDefined}
 | |
|       lpGtk2;
 | |
|       {$ENDIF}
 | |
|     Bits: String;
 | |
|  function GetDefaultTargetOS: string;
 | |
|  begin
 | |
|  {$IFDEF FPC}
 | |
|   Result:=lowerCase({$I %FPCTARGETOS%});
 | |
|   {$ENDIF}
 | |
|  end;
 | |
|  function GetDefaultTargetCPU: string;
 | |
|  begin
 | |
|  {$IFDEF FPC}
 | |
|   Result:=lowerCase({$I %FPCTARGETCPU%});
 | |
|   {$ENDIF}
 | |
|   end;
 | |
|  function GetCompiler: string;
 | |
|  begin
 | |
|  {$IFDEF FPC}
 | |
|   Result:= 'Lazarus';
 | |
|   {$ELSE}
 | |
|   Result:= 'Delphi';
 | |
|   {$ENDIF}
 | |
|  end;
 | |
|  function GetCompilerVersion: string;
 | |
|  begin
 | |
|  {$IFDEF FPC}
 | |
|   {$IF declared(lcl_version)}
 | |
|    Result:= lcl_version;
 | |
|    {$ELSE}
 | |
|    Result:= '0.0.0.0';
 | |
|    {$ENDIF}
 | |
|   {$ELSE}
 | |
|   Result:= FloatToStr(CompilerVersion);
 | |
|   {$ENDIF}
 | |
|  end;
 | |
|  function GetDefaultLCLWidgetType: TLCLPlatform;
 | |
|  begin
 | |
|  {$IFDEF FPC}
 | |
|   if (WidgetSet<>nil) and (WidgetSet.LCLPlatform<>lpNoGUI) then
 | |
|    Result:= WidgetSet.LCLPlatform
 | |
|    else
 | |
|    Result:= BuildLCLWidgetType;
 | |
|   {$ENDIF}
 | |
|  end;
 | |
| begin
 | |
| case GetBuildPlatform of
 | |
|  ospUnknown: Bits:= '?';
 | |
|  ospWin32: Bits:= 'x32';
 | |
|  ospWin64: Bits:= 'x64';
 | |
|  end;
 | |
| Result:= FormatStr(
 | |
|                   AText,
 | |
|                   ['$version$', '$copyrights$', '$YEARS$', '$compiler$', '$compversion$', '$compparams$', '$platform$'],
 | |
|                   [GetCDEVerStr('package'), 'Alexander Babaev', YearsDevelopment, GetCompiler, GetCompilerVersion, GetDefaultTargetCPU + '-' + GetDefaultTargetOS + '-' + LCLPlatformDisplayNames[GetDefaultLCLWidgetType], Bits]
 | |
|                   );
 | |
| end;
 | |
| procedure ShowAboutInfo;
 | |
| var AboutFrm: Tcde_AboutFrm;
 | |
| begin
 | |
| AboutFrm:= Tcde_AboutFrm.Create(cde_Main);
 | |
| with AboutFrm do
 | |
|  begin
 | |
|  Caption:= GetLocalizedString(cdeg_about_caption);
 | |
|  VersionLbl.Caption:= FormatAboutText(GetLocalizedString(cdeg_about_version));
 | |
|  PlatformLbl.Caption:= FormatAboutText(GetLocalizedString(cdeg_about_platform));
 | |
|  CopyrightsLbl.Caption:= FormatAboutText(GetLocalizedString(cdeg_about_copyrights));
 | |
|  UsedTechnologiesLbl.Caption:= FormatAboutText(GetLocalizedString(cdeg_about_3rdpartytechno));
 | |
|  BuildAtLbl.Caption:= FormatAboutText(GetLocalizedString(cdeg_about_compiler));
 | |
|  CloseButton.Caption:= FormatAboutText(GetLocalizedString(cdeg_about_close));
 | |
|  ShowModal;
 | |
|  Free;
 | |
|  end;
 | |
| end;
 | |
| end.
 |