From bf2adc3e1bf022bd1930ebd696b787ad9f1a9313 Mon Sep 17 00:00:00 2001 From: Chixpy Date: Sun, 28 Apr 2024 15:30:03 +0200 Subject: [PATCH] =?UTF-8?q?A=C3=B1adido=20espacio=20para=20tres=20comentar?= =?UTF-8?q?ios=20al=20terminar=20un=20intento.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Arreglado un pequeño fallo añadido en la versión anterior al grabar el CSV. --- Source/Classes/ucLNSCFEConfig.pas | 5 +- Source/Forms/ufrLNSCompFE.lfm | 14 +- Source/Forms/ufrLNSCompFE.pas | 350 ++++++++++++++-------------- Source/Frames/ufLNSCFEGrabarINP.lfm | 324 +++++++++++++++++++------ Source/Frames/ufLNSCFEGrabarINP.pas | 62 ++++- Source/LNSCompFE.lpi | 6 +- Source/LNSCompFE.res | Bin 198215 -> 198219 bytes 7 files changed, 494 insertions(+), 267 deletions(-) diff --git a/Source/Classes/ucLNSCFEConfig.pas b/Source/Classes/ucLNSCFEConfig.pas index 0dda51f..be4eb23 100644 --- a/Source/Classes/ucLNSCFEConfig.pas +++ b/Source/Classes/ucLNSCFEConfig.pas @@ -140,9 +140,8 @@ procedure cLNSCFEConfig.ResetDefaultConfig; begin Nick := ''; MAMEExe := ''; - AutoMAMEList.CommaText := - 'mamearcade.exe,wolfmame.exe,wolfmame64.exe,' + - 'wolfmame32.exe,mame.exe,mame64.exe,mame32.exe'; + AutoMAMEList.CommaText := 'wolfmame.exe,wolfmame64.exe,' + + 'wolfmame32.exe,mame.exe,mame64.exe,mame32.exe,mamearcade.exe'; ImagesFolder := ''; Juegos.Clear; end; diff --git a/Source/Forms/ufrLNSCompFE.lfm b/Source/Forms/ufrLNSCompFE.lfm index f8b365f..0677a28 100644 --- a/Source/Forms/ufrLNSCompFE.lfm +++ b/Source/Forms/ufrLNSCompFE.lfm @@ -7,7 +7,7 @@ inherited frmLNSCompFE: TfrmLNSCompFE object StatusBar1: TStatusBar[0] Left = 4 Height = 29 - Top = 467 + Top = 567 Width = 792 AutoHint = True Panels = <> @@ -15,7 +15,7 @@ inherited frmLNSCompFE: TfrmLNSCompFE end object Splitter1: TSplitter[1] Left = 445 - Height = 276 + Height = 376 Top = 153 Width = 5 Align = alRight @@ -23,17 +23,17 @@ inherited frmLNSCompFE: TfrmLNSCompFE end object pMain: TPanel[2] Left = 4 - Height = 276 + Height = 376 Top = 153 Width = 437 Align = alClient BevelOuter = bvNone - ClientHeight = 276 + ClientHeight = 376 ClientWidth = 437 TabOrder = 1 object rgbJuegos: TRadioGroup Left = 0 - Height = 276 + Height = 376 Hint = 'Selecciona el juego' Top = 0 Width = 437 @@ -2333,7 +2333,7 @@ inherited frmLNSCompFE: TfrmLNSCompFE object pBottom: TPanel[4] Left = 4 Height = 30 - Top = 433 + Top = 533 Width = 792 Align = alBottom AutoSize = True @@ -2400,7 +2400,7 @@ inherited frmLNSCompFE: TfrmLNSCompFE end object pRight: TPanel[5] Left = 454 - Height = 276 + Height = 376 Top = 153 Width = 342 Align = alRight diff --git a/Source/Forms/ufrLNSCompFE.pas b/Source/Forms/ufrLNSCompFE.pas index 927c9bc..21d193b 100644 --- a/Source/Forms/ufrLNSCompFE.pas +++ b/Source/Forms/ufrLNSCompFE.pas @@ -11,7 +11,7 @@ interface // Misc units uVersionSupport, // CHX units - uCHXStrUtils, uCHXDlgUtils, + uCHXStrUtils, uCHXDlgUtils, uCHXFileUtils, // CHX forms ufrCHXForm, // CHX frames @@ -49,7 +49,6 @@ interface krsBackupExt = '.bak'; krsAVIExt = '.avi'; krsCSVExt = '.csv'; - krsCSVSep = ','; { TODO: WolfMAME .181 tiene un fallo respecto al valor por defecto del @@ -93,118 +92,123 @@ interface { TfrmLNSCompFE } TfrmLNSCompFE = class(TfrmCHXForm) - actEditarConfig: TAction; - actGrabarAVI: TAction; - actGrabarINP: TAction; - actAbrirCarpetaMAME: TAction; - actAbrirCarpetaINP: TAction; - actAbrirCarpetaImages: TAction; - actAbrirCarpetaNVRAM: TAction; - actpuCarpetas: TAction; - actReproducirINP: TAction; - actProbarJuego: TAction; - ActionList: TActionList; - bConfig: TBitBtn; - bGrabarAVI: TBitBtn; - bJugar: TBitBtn; - bOpenFolder: TSpeedButton; - bProbar: TBitBtn; - bReproducir: TBitBtn; - eNick: TEdit; - ilActions: TImageList; - iLogo: TImage; - lMAMEExe: TLabel; - lNick: TLabel; - pmiAbrirNVRAMFolder: TMenuItem; - pmiAbrirImagesFolder: TMenuItem; - pmiAbrirINPFolder: TMenuItem; - pmiAbrirMAMEFolder: TMenuItem; - OpenINP: TOpenDialog; - pBottom: TPanel; - pEjecutable: TPanel; - pMain: TPanel; - pNick: TPanel; - pRight: TPanel; - pTop: TPanel; - pTop2: TPanel; - pumAbrirCarpetas: TPopupMenu; - rgbJuegos: TRadioGroup; - Splitter1: TSplitter; - StatusBar1: TStatusBar; - procedure actAbrirCarpetaImagesExecute(Sender: TObject); - procedure actAbrirCarpetaINPExecute(Sender: TObject); - procedure actAbrirCarpetaMAMEExecute(Sender: TObject); - procedure actAbrirCarpetaNVRAMExecute(Sender: TObject); - procedure actEditarConfigExecute(Sender: TObject); - procedure actGrabarAVIExecute(Sender: TObject); - procedure actGrabarINPExecute(Sender: TObject); - procedure actProbarJuegoExecute(Sender: TObject); - procedure actpuCarpetasExecute(Sender: TObject); - procedure actReproducirINPExecute(Sender: TObject); - procedure FormCreate(Sender: TObject); - procedure FormDestroy(Sender: TObject); - procedure iLogoClick(Sender: TObject); - procedure rgbJuegosResize(Sender: TObject); - procedure rgbJuegosSelectionChanged(Sender: TObject); + actEditarConfig : TAction; + actGrabarAVI : TAction; + actGrabarINP : TAction; + actAbrirCarpetaMAME : TAction; + actAbrirCarpetaINP : TAction; + actAbrirCarpetaImages : TAction; + actAbrirCarpetaNVRAM : TAction; + actpuCarpetas : TAction; + actReproducirINP : TAction; + actProbarJuego : TAction; + ActionList : TActionList; + bConfig : TBitBtn; + bGrabarAVI : TBitBtn; + bJugar : TBitBtn; + bOpenFolder : TSpeedButton; + bProbar : TBitBtn; + bReproducir : TBitBtn; + eNick : TEdit; + ilActions : TImageList; + iLogo : TImage; + lMAMEExe : TLabel; + lNick : TLabel; + pmiAbrirNVRAMFolder : TMenuItem; + pmiAbrirImagesFolder : TMenuItem; + pmiAbrirINPFolder : TMenuItem; + pmiAbrirMAMEFolder : TMenuItem; + OpenINP : TOpenDialog; + pBottom : TPanel; + pEjecutable : TPanel; + pMain : TPanel; + pNick : TPanel; + pRight : TPanel; + pTop : TPanel; + pTop2 : TPanel; + pumAbrirCarpetas : TPopupMenu; + rgbJuegos : TRadioGroup; + Splitter1 : TSplitter; + StatusBar1 : TStatusBar; + procedure actAbrirCarpetaImagesExecute(Sender : TObject); + procedure actAbrirCarpetaINPExecute(Sender : TObject); + procedure actAbrirCarpetaMAMEExecute(Sender : TObject); + procedure actAbrirCarpetaNVRAMExecute(Sender : TObject); + procedure actEditarConfigExecute(Sender : TObject); + procedure actGrabarAVIExecute(Sender : TObject); + procedure actGrabarINPExecute(Sender : TObject); + procedure actProbarJuegoExecute(Sender : TObject); + procedure actpuCarpetasExecute(Sender : TObject); + procedure actReproducirINPExecute(Sender : TObject); + procedure FormCreate(Sender : TObject); + procedure FormDestroy(Sender : TObject); + procedure iLogoClick(Sender : TObject); + procedure rgbJuegosResize(Sender : TObject); + procedure rgbJuegosSelectionChanged(Sender : TObject); private - FConfig: cLNSCFEConfig; - FConfigFile: string; - FDIFFFolder: string; - FHIFolder: string; - FImageExt: TStringList; - FImageList: TStringList; - FImagesFolder: string; - FImpPreview: TfmCHXImgListPreview; - FINPFolder: string; - FJuego: string; - FMAMEExe: string; - FNombreJuegos: TStringList; - FNVRAMFolder: string; + FConfig : cLNSCFEConfig; + FConfigFile : string; + FDIFFFolder : string; + FHIFolder : string; + FImageExt : TStringList; + FImageList : TStringList; + FImagesFolder : string; + FImpPreview : TfmCHXImgListPreview; + FINPFolder : string; + FJuego : string; + FMAMEExe : string; + FNombreJuegos : TStringList; + FNVRAMFolder : string; FRunFromCM : Boolean; - procedure SetConfigFile(const aConfigFile: string); - procedure SetDIFFFolder(const aDIFFFolder: string); - procedure SetHIFolder(const aHIFolder: string); - procedure SetImagesFolder(const aImagesFolder: string); - procedure SetINPFolder(const aINPFolder: string); - procedure SetJuego(const aJuego: string); - procedure SetMAMEExe(const aMAMEExe: string); - procedure SetNVRAMFolder(const aNVRAMFolder: string); + procedure SetConfigFile(const aConfigFile : string); + procedure SetDIFFFolder(const aDIFFFolder : string); + procedure SetHIFolder(const aHIFolder : string); + procedure SetImagesFolder(const aImagesFolder : string); + procedure SetINPFolder(const aINPFolder : string); + procedure SetJuego(const aJuego : string); + procedure SetMAMEExe(const aMAMEExe : string); + procedure SetNVRAMFolder(const aNVRAMFolder : string); procedure SetRunFromCM(const AValue : Boolean); protected - property ConfigFile: string read FConfigFile write SetConfigFile; + DatosGrabarINP : RGrabarINPDatos; + {< Datos para grabar el INP y guardar los comentarios fijados entre + los distintos intentos. + } + + property ConfigFile : string read FConfigFile write SetConfigFile; //< Nombre del fichero de configuración de LNSCompFE - property MAMEExe: string read FMAMEExe write SetMAMEExe; + property MAMEExe : string read FMAMEExe write SetMAMEExe; //< Ruta del ejecutable MAME - property ImagesFolder: string read FImagesFolder write SetImagesFolder; + property ImagesFolder : string read FImagesFolder write SetImagesFolder; //< Carperta de imágenes - property INPFolder: string read FINPFolder write SetINPFolder; + property INPFolder : string read FINPFolder write SetINPFolder; //< Carpeta de INP - property HIFolder: string read FHIFolder write SetHIFolder; + property HIFolder : string read FHIFolder write SetHIFolder; //< Carpeta de Hiscores - property NVRAMFolder: string read FNVRAMFolder write SetNVRAMFolder; + property NVRAMFolder : string read FNVRAMFolder write SetNVRAMFolder; //< Carpeta de NVRAM - property DIFFFolder: string read FDIFFFolder write SetDIFFFolder; + property DIFFFolder : string read FDIFFFolder write SetDIFFFolder; //< Carpeta de DIFF de CHDS - property Config: cLNSCFEConfig read FConfig; + property Config : cLNSCFEConfig read FConfig; //< Configuración de LNSConfig - property Juego: string read FJuego write SetJuego; + property Juego : string read FJuego write SetJuego; //< Clave del juego seleccionado - property NombreJuegos: TStringList read FNombreJuegos; + property NombreJuegos : TStringList read FNombreJuegos; //< Lista con el nombre completo de los juegos - property ImageList: TStringList read FImageList; + property ImageList : TStringList read FImageList; //< Lista de imágenes encontradas - property ImageExt: TStringList read FImageExt; + property ImageExt : TStringList read FImageExt; //< Formatos de imagen soportados - property ImpPreview: TfmCHXImgListPreview read FImpPreview; + property ImpPreview : TfmCHXImgListPreview read FImpPreview; //< Frame para previsualización de imágenes - property RunFromCM: Boolean read FRunFromCM write SetRunFromCM; + property RunFromCM : Boolean read FRunFromCM write SetRunFromCM; {< ¿El juego ha sido ejecutado desde la línea de comandos? Si el juego ha sido ejecutado desde la linea de comandos entonces cualquier @@ -236,7 +240,7 @@ TfrmLNSCompFE = class(TfrmCHXForm) end; var - frmLNSCompFE: TfrmLNSCompFE; + frmLNSCompFE : TfrmLNSCompFE; implementation @@ -244,9 +248,9 @@ implementation { TfrmLNSCompFE } -procedure TfrmLNSCompFE.FormCreate(Sender: TObject); +procedure TfrmLNSCompFE.FormCreate(Sender : TObject); var - Idx : Integer; + Idx : integer; begin Application.Title := Format(krsAppTitleFmt, [Application.Title, GetFileVersion]); @@ -297,12 +301,12 @@ procedure TfrmLNSCompFE.FormCreate(Sender: TObject); Idx := 0; // Quitamos warning Application.CaseSensitiveOptions := False; - Application.CheckOptions('f','file'); + Application.CheckOptions('f', 'file'); - if Application.HasOption('f','file') then + if Application.HasOption('f', 'file') then begin // Añadimos el juego a la lista - Idx := Config.Juegos.Add(Application.GetOptionValue('f','file')); + Idx := Config.Juegos.Add(Application.GetOptionValue('f', 'file')); RunFromCM := True; end; @@ -312,68 +316,69 @@ procedure TfrmLNSCompFE.FormCreate(Sender: TObject); // ejecutarlo directamente if RunFromCM then begin + Self.Show; // TODO: No me gusta esto aquí... rgbJuegos.ItemIndex := Idx; actGrabarINP.Execute; end; end; -procedure TfrmLNSCompFE.actEditarConfigExecute(Sender: TObject); +procedure TfrmLNSCompFE.actEditarConfigExecute(Sender : TObject); begin TfmLNSCFEConfig.SimpleModalForm(Config, ConfigFile, ''); ActualizarConfig; end; -procedure TfrmLNSCompFE.actAbrirCarpetaMAMEExecute(Sender: TObject); +procedure TfrmLNSCompFE.actAbrirCarpetaMAMEExecute(Sender : TObject); begin if DirectoryExistsUTF8(ExtractFilePath(MAMEExe)) then OpenDocument(ExtractFilePath(MAMEExe)); end; -procedure TfrmLNSCompFE.actAbrirCarpetaNVRAMExecute(Sender: TObject); +procedure TfrmLNSCompFE.actAbrirCarpetaNVRAMExecute(Sender : TObject); begin if DirectoryExistsUTF8(NVRAMFolder) then OpenDocument(NVRAMFolder); end; -procedure TfrmLNSCompFE.actAbrirCarpetaINPExecute(Sender: TObject); +procedure TfrmLNSCompFE.actAbrirCarpetaINPExecute(Sender : TObject); begin if DirectoryExistsUTF8(INPFolder) then OpenDocument(INPFolder); end; -procedure TfrmLNSCompFE.actAbrirCarpetaImagesExecute(Sender: TObject); +procedure TfrmLNSCompFE.actAbrirCarpetaImagesExecute(Sender : TObject); begin if DirectoryExistsUTF8(ImagesFolder) then OpenDocument(ImagesFolder); end; -procedure TfrmLNSCompFE.actGrabarAVIExecute(Sender: TObject); +procedure TfrmLNSCompFE.actGrabarAVIExecute(Sender : TObject); begin CrearAVI; end; -procedure TfrmLNSCompFE.actGrabarINPExecute(Sender: TObject); +procedure TfrmLNSCompFE.actGrabarINPExecute(Sender : TObject); begin CrearINP; end; -procedure TfrmLNSCompFE.actProbarJuegoExecute(Sender: TObject); +procedure TfrmLNSCompFE.actProbarJuegoExecute(Sender : TObject); begin ProbarJuego; end; -procedure TfrmLNSCompFE.actpuCarpetasExecute(Sender: TObject); +procedure TfrmLNSCompFE.actpuCarpetasExecute(Sender : TObject); begin pumAbrirCarpetas.PopUp; end; -procedure TfrmLNSCompFE.actReproducirINPExecute(Sender: TObject); +procedure TfrmLNSCompFE.actReproducirINPExecute(Sender : TObject); begin ReproducirINP; end; -procedure TfrmLNSCompFE.FormDestroy(Sender: TObject); +procedure TfrmLNSCompFE.FormDestroy(Sender : TObject); begin // Si se ha ejecutado el juego desde la línea de commandos no se guarda la // configuración modificada. @@ -390,9 +395,9 @@ procedure TfrmLNSCompFE.FormDestroy(Sender: TObject); NombreJuegos.Free; end; -procedure TfrmLNSCompFE.iLogoClick(Sender: TObject); +procedure TfrmLNSCompFE.iLogoClick(Sender : TObject); var - Info: TStringList; + Info : TStringList; begin Info := TStringList.Create; Info.Add('(C) 2018-2024 Chixpy - GNU-GPL 3.0'); @@ -406,13 +411,15 @@ procedure TfrmLNSCompFE.iLogoClick(Sender: TObject); Info.Add(Format('NVRAM: %0:s', [NVRAMFolder])); Info.Add(Format('DIFF: %0:s', [DIFFFolder])); - TfmCHXAbout.SimpleFormAbout(Info,'',''); + TfmCHXAbout.SimpleFormAbout(Info, '', ''); + + Info.Free; end; -procedure TfrmLNSCompFE.rgbJuegosResize(Sender: TObject); +procedure TfrmLNSCompFE.rgbJuegosResize(Sender : TObject); var - FontData: TFontData; - AlturaTexto: integer; + FontData : TFontData; + AlturaTexto : integer; begin // Definimos el número de columnas en base a la cantidad de items, tamaño // del texto y tamaño del RadioGroup. @@ -430,13 +437,14 @@ procedure TfrmLNSCompFE.rgbJuegosResize(Sender: TObject); // - Es positivo: Está expresado en pixeles if AlturaTexto < 0 then - AlturaTexto := abs((AlturaTexto * 72) div (rgbJuegos.Font.PixelsPerInch * 2)); + AlturaTexto := abs((AlturaTexto * 72) div + (rgbJuegos.Font.PixelsPerInch * 2)); rgbJuegos.Columns := (rgbJuegos.Items.Count div ((rgbJuegos.ClientHeight div AlturaTexto) + 1)) + 1; end; -procedure TfrmLNSCompFE.rgbJuegosSelectionChanged(Sender: TObject); +procedure TfrmLNSCompFE.rgbJuegosSelectionChanged(Sender : TObject); begin if rgbJuegos.ItemIndex >= 0 then Juego := Config.Juegos[rgbJuegos.ItemIndex] @@ -446,34 +454,33 @@ procedure TfrmLNSCompFE.rgbJuegosSelectionChanged(Sender: TObject); ActualizarMedia; end; -procedure TfrmLNSCompFE.SetConfigFile(const aConfigFile: string); +procedure TfrmLNSCompFE.SetConfigFile(const aConfigFile : string); begin FConfigFile := SetAsAbsoluteFile(aConfigFile, ProgramDirectory); end; -procedure TfrmLNSCompFE.SetDIFFFolder(const aDIFFFolder: string); +procedure TfrmLNSCompFE.SetDIFFFolder(const aDIFFFolder : string); begin FDIFFFolder := SetAsFolder(aDIFFFolder); end; -procedure TfrmLNSCompFE.SetHIFolder(const aHIFolder: string); +procedure TfrmLNSCompFE.SetHIFolder(const aHIFolder : string); begin FHIFolder := SetAsFolder(aHIFolder); end; - -procedure TfrmLNSCompFE.SetImagesFolder(const aImagesFolder: string); +procedure TfrmLNSCompFE.SetImagesFolder(const aImagesFolder : string); begin FImagesFolder := SetAsFolder(SetAsAbsoluteFile(aImagesFolder, ProgramDirectory)); end; -procedure TfrmLNSCompFE.SetINPFolder(const aINPFolder: string); +procedure TfrmLNSCompFE.SetINPFolder(const aINPFolder : string); begin FINPFolder := SetAsFolder(aINPFolder); end; -procedure TfrmLNSCompFE.SetJuego(const aJuego: string); +procedure TfrmLNSCompFE.SetJuego(const aJuego : string); begin if FJuego = aJuego then Exit; @@ -496,12 +503,12 @@ procedure TfrmLNSCompFE.SetJuego(const aJuego: string); end; end; -procedure TfrmLNSCompFE.SetMAMEExe(const aMAMEExe: string); +procedure TfrmLNSCompFE.SetMAMEExe(const aMAMEExe : string); begin FMAMEExe := SetAsAbsoluteFile(aMAMEExe, ProgramDirectory); end; -procedure TfrmLNSCompFE.SetNVRAMFolder(const aNVRAMFolder: string); +procedure TfrmLNSCompFE.SetNVRAMFolder(const aNVRAMFolder : string); begin FNVRAMFolder := SetAsFolder(aNVRAMFolder); end; @@ -514,9 +521,9 @@ procedure TfrmLNSCompFE.SetRunFromCM(const AValue : Boolean); procedure TfrmLNSCompFE.ActualizarNombreJuegos; var - i: integer; - aJuego: string; - aIni: TMemIniFile; + i : integer; + aJuego : string; + aIni : TMemIniFile; begin NombreJuegos.Clear; @@ -584,10 +591,10 @@ procedure TfrmLNSCompFE.ActualizarNombreJuegos; procedure TfrmLNSCompFE.ActualizarConfig; - function LeeMAMEConfig(aMAMEIni: TStringList; const Key: string): string; + function LeeMAMEConfig(aMAMEIni : TStringList; const Key : string) : string; var - i: integer; - aLine: string; + i : integer; + aLine : string; begin Result := ''; @@ -603,9 +610,9 @@ procedure TfrmLNSCompFE.ActualizarConfig; end; var - i: integer; - MAMEFolder: string; - MAMEIni: TStringList; + i : integer; + MAMEFolder : string; + MAMEIni : TStringList; begin // Limpiamos variables y lista de juegos. Juego := ''; @@ -662,8 +669,10 @@ procedure TfrmLNSCompFE.ActualizarConfig; MAMEIni.LoadFromFile(MAMEFolder + krsMAMEIni); // Si el directorio de imágenes ya está definido, no cambiarlo. if ImagesFolder = '' then + begin ImagesFolder := CreateAbsolutePath(LeeMAMEConfig(MAMEIni, krsMAMEIniKeySnapDir), MAMEFolder); + end; INPFolder := CreateAbsolutePath(LeeMAMEConfig(MAMEIni, krsMAMEIniKeyInpDir), MAMEFolder); NVRAMFolder := CreateAbsolutePath(LeeMAMEConfig(MAMEIni, @@ -702,8 +711,8 @@ procedure TfrmLNSCompFE.ActualizarConfig; procedure TfrmLNSCompFE.ActualizarMedia; var - i: integer; - aFile: string; + i : integer; + aFile : string; begin ImpPreview.FileList := nil; ImageList.Clear; @@ -736,12 +745,12 @@ procedure TfrmLNSCompFE.ActualizarMedia; procedure TfrmLNSCompFE.NVRAMBackup; var - aFile: string; + aFile : string; begin if Juego = '' then Exit; - // Se presupone que hemos la configuración de MAME + // Se presupone que hemos leido la configuración de MAME // Renombramos los archivos aFile := HIFolder + Juego; @@ -768,13 +777,12 @@ procedure TfrmLNSCompFE.NVRAMBackup; procedure TfrmLNSCompFE.CrearINP; var - MAMEFolder, CurrFolder, aFileName: string; - Parametros: string; - HoraInicio: TDateTime; - DatosGrabarINP: RGrabarINPDatos; - aCSV, TempStrLst: TStringList; - TempPts: string; - i: integer; + MAMEFolder, CurrFolder, aFileName : string; + Parametros : string; + HoraInicio : TDateTime; + aCSV, TempStrLst : TStringList; + TempPts : string; + i : integer; begin if Juego = '' then Exit; @@ -798,13 +806,13 @@ procedure TfrmLNSCompFE.CrearINP; RunCommand('"' + MAMEExe + '" ' + Parametros, DatosGrabarINP.OutputMAME); - DatosGrabarINP.Segundos := SecondsBetween(Now, HoraInicio); + DatosGrabarINP.Tiempo := SecondsBetween(Now, HoraInicio); DatosGrabarINP.Conservar := False; NVRAMRestore; // Grabando datos y demás - if DatosGrabarINP.Segundos < 60 then + if DatosGrabarINP.Tiempo < 60 then begin ShowMessage(Format(rsPartidaCorta, [INPFolder, Juego])); end @@ -827,26 +835,22 @@ procedure TfrmLNSCompFE.CrearINP; // Añadiendo la cabecera aCSV.Add(krsStatsHeader); - // Formateando un poco la puntuación para el CSV - TempPts := UTF8QuotedStr(DatosGrabarINP.Puntuacion, '"'); - TempPts := UTF8TextReplace(TempPts, ',', '","'); - TempPts := UTF8TextReplace(TempPts, ' - ', '","'); - - // Una TStringList lo hace mejor que ha mano + // Una TStringList lo hace mejor que a mano... TempStrLst := TStringList.Create; + // DateTimeToStr sin format settings, guarda las fechas igual que lo // hace el DOS ;-D TempStrLst.Add(DateTimeToStr(HoraInicio)); - TempStrLst.Add(IntToStr(DatosGrabarINP.Segundos)); + TempStrLst.Add(IntToStr(DatosGrabarINP.Tiempo)); + TempStrLst.Add(IntToStr(DatosGrabarINP.Puntuacion)); + TempStrLst.Add(CleanFileName(DatosGrabarINP.Comentario[1])); + TempStrLst.Add(CleanFileName(DatosGrabarINP.Comentario[2])); + TempStrLst.Add(CleanFileName(DatosGrabarINP.Comentario[3])); - TempPts := TempStrLst.CommaText + TempPts; - - TempStrLst.Free; - - aCSV.Add(TempPts); + aCSV.Add(TempStrLst.CommaText); aCSV.SaveToFile(aFileName); - finally + TempStrLst.Free; aCSV.Free; end; @@ -854,19 +858,19 @@ procedure TfrmLNSCompFE.CrearINP; if DatosGrabarINP.Conservar then begin aFileName := INPFolder + Juego + ' - ' + eNick.Text + - ' - ' + DatosGrabarINP.Puntuacion + '.inp'; + ' - ' + IntToStr(DatosGrabarINP.Puntuacion); - // Comprobamos que no existe anteriormente - i := 1; - while FileExistsUTF8(aFileName) do - begin - aFileName := INPFolder + Juego + ' - ' + eNick.Text + - ' - ' + DatosGrabarINP.Puntuacion + ' (' + IntToStr(i) + ').inp'; - Inc(i); - end; + if DatosGrabarINP.Comentario[1] <> '' then + aFileName += ' - ' + DatosGrabarINP.Comentario[1]; + if DatosGrabarINP.Comentario[2] <> '' then + aFileName += ' - ' + DatosGrabarINP.Comentario[2]; + if DatosGrabarINP.Comentario[3] <> '' then + aFileName += ' - ' + DatosGrabarINP.Comentario[3]; + + aFileName := CHXCheckFileRename(aFileName + krsMAMEINPExt); // Por el momento no exite CopyFileUTF8... - CopyFile(UTF8ToSys(INPFolder + Juego + '.inp'), + CopyFile(UTF8ToSys(INPFolder + Juego + krsMAMEINPExt), UTF8ToSys(aFileName), True); end; end; @@ -882,7 +886,7 @@ procedure TfrmLNSCompFE.CrearINP; procedure TfrmLNSCompFE.ReproducirINP; var - MAMEFolder, CurrFolder, Parametros, sOutput: string; + MAMEFolder, CurrFolder, Parametros, sOutput : string; begin if Juego = '' then Exit; @@ -930,7 +934,7 @@ procedure TfrmLNSCompFE.ReproducirINP; procedure TfrmLNSCompFE.CrearAVI; var - MAMEFolder, CurrFolder, Parametros, sOutput: string; + MAMEFolder, CurrFolder, Parametros, sOutput : string; begin if Juego = '' then Exit; @@ -976,7 +980,7 @@ procedure TfrmLNSCompFE.CrearAVI; procedure TfrmLNSCompFE.ProbarJuego; var - MAMEFolder, CurrFolder, Parametros, sOutput: string; + MAMEFolder, CurrFolder, Parametros, sOutput : string; begin if Juego = '' then Exit; @@ -1008,7 +1012,7 @@ procedure TfrmLNSCompFE.ProbarJuego; procedure TfrmLNSCompFE.NVRAMRestore; var - aFile: string; + aFile : string; begin if Juego = '' then Exit; diff --git a/Source/Frames/ufLNSCFEGrabarINP.lfm b/Source/Frames/ufLNSCFEGrabarINP.lfm index e65de82..308fae6 100644 --- a/Source/Frames/ufLNSCFEGrabarINP.lfm +++ b/Source/Frames/ufLNSCFEGrabarINP.lfm @@ -1,106 +1,290 @@ inherited fmLNSCFEGrabarINP: TfmLNSCFEGrabarINP - Height = 311 - Width = 376 - ClientHeight = 311 - ClientWidth = 376 + Height = 490 + Width = 640 + ChildSizing.LeftRightSpacing = 4 + ChildSizing.TopBottomSpacing = 4 + ChildSizing.HorizontalSpacing = 8 + ChildSizing.VerticalSpacing = 8 + ClientHeight = 490 + ClientWidth = 640 DesignLeft = 509 DesignTop = 160 inherited pButtons: TPanel - Top = 285 - Width = 376 - ClientWidth = 376 + Left = 4 + Height = 38 + Top = 448 + Width = 632 + ChildSizing.TopBottomSpacing = 4 + ClientHeight = 38 + ClientWidth = 632 TabOrder = 4 inherited chkCloseOnSave: TCheckBox - Left = 46 + Left = 105 + Top = 4 end inherited bSave: TBitBtn - Left = 141 + Left = 267 + Top = 4 Default = True end inherited bCancel: TBitBtn - Left = 249 + Left = 438 + Top = 4 + Cancel = False end end - object rgbConservar: TRadioGroup[1] - Left = 0 - Height = 47 - Top = 124 - Width = 376 - Align = alTop - AutoFill = True - AutoSize = True - Caption = 'Conservar partida' - ChildSizing.LeftRightSpacing = 6 - ChildSizing.TopBottomSpacing = 4 - ChildSizing.HorizontalSpacing = 4 - ChildSizing.EnlargeHorizontal = crsHomogenousChildResize - ChildSizing.EnlargeVertical = crsHomogenousChildResize - ChildSizing.ShrinkHorizontal = crsScaleChilds - ChildSizing.ShrinkVertical = crsScaleChilds - ChildSizing.Layout = cclLeftToRightThenTopToBottom - ChildSizing.ControlsPerLine = 2 - ClientHeight = 27 - ClientWidth = 372 - Columns = 2 - ItemIndex = 0 - Items.Strings = ( - 'Sí' - 'No' - ) - TabOrder = 2 - end - object gbxPuntuacion: TGroupBox[2] - Left = 0 - Height = 66 - Top = 54 - Width = 376 + object gbxPuntuacion: TGroupBox[1] + Left = 4 + Height = 61 + Top = 80 + Width = 632 Align = alTop AutoSize = True Caption = 'Puntuación' ChildSizing.LeftRightSpacing = 4 ChildSizing.TopBottomSpacing = 4 - ClientHeight = 46 - ClientWidth = 372 + ChildSizing.HorizontalSpacing = 8 + ChildSizing.VerticalSpacing = 8 + ClientHeight = 36 + ClientWidth = 628 TabOrder = 1 - object ePuntuacion: TEdit + object sePuntuacion: TSpinEdit Left = 4 - Height = 23 - Top = 19 - Width = 364 - Align = alTop + Height = 28 + Top = 4 + Width = 500 + Align = alClient + Alignment = taRightJustify TabOrder = 0 - TextHint = 'Introduce la puntuación o el tiempo logrado' end object lPuntuacion: TLabel - Left = 4 - Height = 15 + Left = 512 + Height = 28 Top = 4 - Width = 364 - Align = alTop - Caption = 'Puedes dejarlo vacío si has abortado el intento' - ParentColor = False + Width = 112 + Align = alRight + Caption = 'Puntos o Tiempo' + Layout = tlCenter end end - object pEstadisticas: TPanel[3] - Left = 0 - Height = 50 - Top = 0 - Width = 376 + object pEstadisticas: TPanel[2] + Left = 4 + Height = 68 + Top = 4 + Width = 632 Align = alTop + BevelOuter = bvNone ChildSizing.LeftRightSpacing = 4 ChildSizing.TopBottomSpacing = 4 + ChildSizing.HorizontalSpacing = 8 + ChildSizing.VerticalSpacing = 8 + Font.Style = [fsBold] + ParentFont = False TabOrder = 0 Wordwrap = True end - object pInfo: TPanel[4] - Left = 0 - Height = 106 - Top = 175 - Width = 376 - Align = alClient - Caption = 'Independientemente de si la conservas o no, la partida seguirá en .inp hasta que comiences otra.' + object gbxComentarios: TGroupBox[3] + Left = 4 + Height = 163 + Top = 149 + Width = 632 + Align = alTop + AutoSize = True + Caption = 'Comentarios' + ChildSizing.LeftRightSpacing = 4 + ChildSizing.TopBottomSpacing = 4 + ChildSizing.HorizontalSpacing = 8 + ChildSizing.VerticalSpacing = 8 + ClientHeight = 138 + ClientWidth = 628 + TabOrder = 2 + object pComentario1: TPanel + Left = 4 + Height = 38 + Top = 4 + Width = 620 + Align = alTop + AutoSize = True + ChildSizing.LeftRightSpacing = 4 + ChildSizing.TopBottomSpacing = 4 + ChildSizing.HorizontalSpacing = 8 + ChildSizing.VerticalSpacing = 8 + ClientHeight = 38 + ClientWidth = 620 + TabOrder = 0 + object chkComentario1: TCheckBox + Left = 534 + Height = 28 + Hint = 'Recordar este comentario para los distintos intentos.' + Top = 5 + Width = 81 + Align = alRight + Caption = 'Recordar' + TabOrder = 1 + end + object eComentario1: TEdit + Left = 103 + Height = 28 + Top = 5 + Width = 423 + Align = alClient + TabOrder = 0 + TextHint = 'Por ejemplo: Personaje usado' + end + object lComentario1: TLabel + Left = 5 + Height = 28 + Top = 5 + Width = 90 + Align = alLeft + Caption = 'Comentario 1' + Layout = tlCenter + end + end + object pComentario2: TPanel + Left = 4 + Height = 38 + Top = 50 + Width = 620 + Align = alTop + AutoSize = True + ChildSizing.LeftRightSpacing = 4 + ChildSizing.TopBottomSpacing = 4 + ChildSizing.HorizontalSpacing = 8 + ChildSizing.VerticalSpacing = 8 + ClientHeight = 38 + ClientWidth = 620 + TabOrder = 1 + object chkComentario2: TCheckBox + Left = 534 + Height = 28 + Hint = 'Recordar este comentario para los distintos intentos.' + Top = 5 + Width = 81 + Align = alRight + Caption = 'Recordar' + TabOrder = 1 + end + object eComentario2: TEdit + Left = 103 + Height = 28 + Top = 5 + Width = 423 + Align = alClient + TabOrder = 0 + TextHint = 'Por ejemplo: Nivel de dificultad' + end + object lComentario2: TLabel + Left = 5 + Height = 28 + Top = 5 + Width = 90 + Align = alLeft + Caption = 'Comentario 2' + Layout = tlCenter + end + end + object pComentario3: TPanel + Left = 4 + Height = 38 + Top = 96 + Width = 620 + Align = alTop + AutoSize = True + ChildSizing.LeftRightSpacing = 4 + ChildSizing.TopBottomSpacing = 4 + ChildSizing.HorizontalSpacing = 8 + ChildSizing.VerticalSpacing = 8 + ClientHeight = 38 + ClientWidth = 620 + TabOrder = 2 + object chkComentario3: TCheckBox + Left = 534 + Height = 28 + Hint = 'Recordar este comentario para los distintos intentos.' + Top = 5 + Width = 81 + Align = alRight + Caption = 'Recordar' + TabOrder = 1 + end + object eComentario3: TEdit + Left = 103 + Height = 28 + Top = 5 + Width = 423 + Align = alClient + TabOrder = 0 + TextHint = 'O cualquier cosa que se te ocurra' + end + object lComentario3: TLabel + Left = 5 + Height = 28 + Top = 5 + Width = 90 + Align = alLeft + Caption = 'Comentario 3' + Layout = tlCenter + end + end + end + object pConservar: TPanel[4] + Left = 4 + Height = 63 + Top = 320 + Width = 632 + Align = alTop + BevelOuter = bvNone + ChildSizing.HorizontalSpacing = 8 + ChildSizing.VerticalSpacing = 8 + ClientHeight = 63 + ClientWidth = 632 TabOrder = 3 - Wordwrap = True + object rgbConservar: TRadioGroup + Left = 0 + Height = 63 + Top = 0 + Width = 144 + Align = alLeft + AutoFill = True + Caption = 'Conservar partida' + ChildSizing.LeftRightSpacing = 4 + ChildSizing.TopBottomSpacing = 4 + ChildSizing.HorizontalSpacing = 8 + ChildSizing.VerticalSpacing = 8 + ChildSizing.EnlargeHorizontal = crsHomogenousChildResize + ChildSizing.EnlargeVertical = crsHomogenousChildResize + ChildSizing.ShrinkHorizontal = crsScaleChilds + ChildSizing.ShrinkVertical = crsScaleChilds + ChildSizing.Layout = cclLeftToRightThenTopToBottom + ChildSizing.ControlsPerLine = 1 + ClientHeight = 38 + ClientWidth = 140 + ItemIndex = 0 + Items.Strings = ( + 'Sí' + 'No' + ) + TabOrder = 0 + end + object pInfo: TPanel + Left = 152 + Height = 63 + Top = 0 + Width = 480 + Align = alClient + BevelInner = bvLowered + BevelOuter = bvLowered + Caption = 'Independientemente de si la conservas o no, la partida seguirá en .inp hasta que comiences otra.' + ChildSizing.LeftRightSpacing = 4 + ChildSizing.TopBottomSpacing = 4 + ChildSizing.HorizontalSpacing = 8 + ChildSizing.VerticalSpacing = 8 + Font.Style = [fsBold] + ParentFont = False + TabOrder = 1 + Wordwrap = True + end end inherited alPropEditor: TActionList[5] end diff --git a/Source/Frames/ufLNSCFEGrabarINP.pas b/Source/Frames/ufLNSCFEGrabarINP.pas index ac7b199..38853cf 100644 --- a/Source/Frames/ufLNSCFEGrabarINP.pas +++ b/Source/Frames/ufLNSCFEGrabarINP.pas @@ -6,7 +6,7 @@ interface uses Classes, SysUtils, FileUtil, Forms, Controls, Graphics, Dialogs, ExtCtrls, - StdCtrls, Buttons, ActnList, + StdCtrls, Buttons, ActnList, Spin, // CHX frames ufCHXPropEditor; @@ -16,14 +16,15 @@ interface // es excesivo... // Aunque usar un record implica trastear con punteros XD - { TODO : Dividir el campo puntuación al menos en dos: - - Uno para la puntuación numérica en sí (Puntos o tiempo) - - Otro (o más) para añadir comentarios (Por ejemplo, nivel de dificultad, - personaje, etc.) } - RGrabarINPDatos = record - Segundos : integer; - Puntuacion : string; + Tiempo : integer; + //< Tiempo en segundos + Puntuacion : LongInt; + //< Exclusivanmente número: Tiempo o puntos. + Comentario: array[1..3] of string; + //< Tres serán suficiente... por no hacerlo dinámico... + MantComentario: array[1..3] of Boolean; + //< Recordar el comentario N entre intentos. Conservar : Boolean; OutputMAME : string; end; @@ -32,16 +33,31 @@ RGrabarINPDatos = record { TfmLNSCFEGrabarINP } TfmLNSCFEGrabarINP = class(TfmCHXPropEditor) - ePuntuacion : TEdit; + chkComentario1 : TCheckBox; + chkComentario2 : TCheckBox; + chkComentario3 : TCheckBox; + eComentario1 : TEdit; + eComentario2 : TEdit; + eComentario3 : TEdit; + gbxComentarios : TGroupBox; + lComentario1 : TLabel; + lComentario2 : TLabel; + lComentario3 : TLabel; + pComentario1 : TPanel; gbxPuntuacion : TGroupBox; lPuntuacion : TLabel; + pComentario2 : TPanel; + pComentario3 : TPanel; + pConservar : TPanel; pEstadisticas : TPanel; pInfo : TPanel; rgbConservar : TRadioGroup; + sePuntuacion : TSpinEdit; private FDatos : PGrabarINPDatos; procedure SetDatos(const aDatos : PGrabarINPDatos); + public property Datos : PGrabarINPDatos read FDatos write SetDatos; @@ -71,7 +87,24 @@ procedure TfmLNSCFEGrabarINP.SetDatos(const aDatos : PGrabarINPDatos); if Enabled then begin pEstadisticas.Caption := aDatos^.OutputMAME; - // Format('La partida duró %0:d segundos', [aDatos^.Segundos]); + // Format('La partida duró %0:d segundos', [aDatos^.Tiempo]); + end; + + // Restableciendo comentarios que se han querido mantener + if aDatos^.MantComentario[1] then + begin + chkComentario1.Checked := True; + eComentario1.Text := aDatos^.Comentario[1]; + end; + if aDatos^.MantComentario[2] then + begin + chkComentario2.Checked := True; + eComentario2.Text := aDatos^.Comentario[2]; + end; + if aDatos^.MantComentario[3] then + begin + chkComentario3.Checked := True; + eComentario3.Text := aDatos^.Comentario[3]; end; end; @@ -84,6 +117,13 @@ procedure TfmLNSCFEGrabarINP.SaveFrameData; // Sólo conservamos la partida si se pulsa aceptar. Datos^.Conservar := rgbConservar.ItemIndex = 0; + + Datos^.MantComentario[1] := chkComentario1.Checked; + Datos^.Comentario[1] := eComentario1.Text; + Datos^.MantComentario[2] := chkComentario2.Checked; + Datos^.Comentario[2] := eComentario2.Text; + Datos^.MantComentario[3] := chkComentario3.Checked; + Datos^.Comentario[3] := eComentario3.Text; end; class procedure TfmLNSCFEGrabarINP.SimpleForm(const aDatos : PGrabarINPDatos; @@ -112,7 +152,7 @@ constructor TfmLNSCFEGrabarINP.Create(TheOwner : TComponent); destructor TfmLNSCFEGrabarINP.Destroy; begin // Grabamos la puntuación de todas formas, para las estadísticas - Datos^.Puntuacion := ePuntuacion.Text; + Datos^.Puntuacion := sePuntuacion.Value; inherited Destroy; end; diff --git a/Source/LNSCompFE.lpi b/Source/LNSCompFE.lpi index 186a64a..4de839c 100644 --- a/Source/LNSCompFE.lpi +++ b/Source/LNSCompFE.lpi @@ -27,9 +27,9 @@ - - - + + + diff --git a/Source/LNSCompFE.res b/Source/LNSCompFE.res index 84e1c6bc46d991aba1053bce1962a9df2f9cef44..b263d69e4459b5df23df7480fbcb6a2ce9e4ac5f 100644 GIT binary patch delta 109 zcmX@!!*jZaXM+qo0 delta 105 zcmX@z!*jfcXM+qo