Initial
Исходный код версии 2.0
This commit is contained in:
		
							
								
								
									
										250
									
								
								sources/cdejecter_gui/data/__history/kernel.pas;66
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										250
									
								
								sources/cdejecter_gui/data/__history/kernel.pas;66
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,250 @@ | ||||
| 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. | ||||
		Reference in New Issue
	
	Block a user