Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   OOP (https://www.clubdelphi.com/foros/forumdisplay.php?f=5)
-   -   Error de la funcion ShortMonthNames() en XE10 (https://www.clubdelphi.com/foros/showthread.php?t=90068)

darkamerico 31-03-2016 05:34:46

Error de la funcion ShortMonthNames() en XE10
 
Saludos amigos, tengo la clase siguiente:

Código Delphi [-]
uses System.SysUtils, VCL.Dialogs, System.DateUtils;

type
  TDate = class
    mes, dia, anio: integer;

    procedure setFecha(m, d, a: Integer);
    function getFecha():string; overload;
    function getFecha(formato:char):string; overload;
    function esBisiesto():boolean;
    function queDiaEs():string;
  end;

...

function TDate.getFecha:string;
begin
  getFecha:=IntToStr(dia)+'/'+IntToStr(mes)+'/'+IntToStr(anio);
end;

function TDate.getFecha(formato:char):string;
begin
  getFecha:='Hoy es ' + queDiaEs + ', ' + IntToStr(dia) +
            ' de ' + ShortMonthNames[mes] +
            ' del ' + IntToStr(anio);
end;

...

begin
  try
    fecha:=TDate.Create();
    fecha.setFecha(3,30,2016);
    ShowMessage('Fecha Ingresada:' + fecha.getFecha());
    ShowMessage(fecha.queDiaEs);
  finally
    fecha.Free;
  end;
end.

El error aparece en la linea ShortMonthNames[mes], dice E2003 Undeclared identifier: 'ShortMonthNames'
Pero según la bibliografia esa función esta dentro de System.SysUtils...


Ayuda pleaseee


Americo:eek:

egostar 31-03-2016 07:53:22

Hola

Cita:

Empezado por darkamerico (Mensaje 503875)
.....El error aparece en la linea ShortMonthNames[mes], dice E2003 Undeclared identifier: 'ShortMonthNames'
Pero según la bibliografia esa función esta dentro de System.SysUtils...

En versiones anteriores el arreglo ShortMonthNames era una variable global, ahora la han encapsulado dentro de TFormatSettings, por lo que ahora se tiene que crear primero el record y después ya podrás utilizar el arreglo de meses cortos.


Código Delphi [-]
procedure TForm1.Button1Click(Sender: TObject);
var
  Mes  : string;
  FS: TFormatSettings;
begin
  FS := TFormatSettings.Create;
  Mes  := FS.ShortMonthNames[12];
  ShowMessage('Mes 12 = ' + Mes);
end;

Saludos

AgustinOrtu 31-03-2016 11:49:04

Por otro lado ten en cuenta que llamaste a tu clase TDate, yo le cambiaria el nombre porque colisiona con el tipo primitivo TDate que ya viene con Delphi

Es simplemente para ahorrarse problemas en el futuro :)

A menos claro, que lo estes haciendo de forma consciente y quieras ocultar el tipo primitivo con la clase

darkamerico 31-03-2016 17:26:11

Gracias chicos
 
Fue de mucha utilidad esta informacion, gracias a ambos


La franja horaria es GMT +2. Ahora son las 20:10:45.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi