Ir para conteúdo
Fórum Script Brasil
  • 0

Data (RESOLVIDO)


Paulo Nobre

Pergunta

Tenho um programa, que compara a data do sistema com as datas de aniversário de uma tabela. As datas da tabela estão no formato dd/mm/aaaa.

Onde fiz o programa as configurações regionais estão configuradas de tal maneira que a data do sistema se encontra neste formato, desta forma o programa funciona normalmente.

Para minha surpresa no meu outro computador, quando fui testar (todos com XP) o programa não funcionou direito, desconfiei e vi nas configurações regionais que o formato para a data do sistema estava na forma d/m/aaaa, e portanto incompatível com o que programei. Você já devem estar imaginando a pergunta:

Como posso prever isto na programação?

Tem como alterar isto via programação?

Vi no site do capablanca como alterar as configurações regionais, mas acho que não se aplica ao meu caso. E caso se aplique não enendi como fazê-lo.

Mesmo fazendo não seria um abuso mudar isto no computador de uma pessoa?

O que vocês acham?

Podem me ajudar?

Obrigado

Paulo Nobre

Link para o comentário
Compartilhar em outros sites

2 respostass a esta questão

Posts Recomendados

  • 0

Olá Paulo Nobre,

Você pode alterar a variável global ShortDateFormat, através do Delphi, assim que o seu aplicativo for inicializado. Neste caso, a título de sugestão, coloque no evento OnCreate do seu formulário, o seguinte código:

 ShortDateFormat := 'dd/mm/yyyy';
Desta forma, o seu sistema irá funcionar corretamente. Creio que pode ser considerado um abuso sim, pois, se alguns programas do micro do usuário utilizam outro padrão de data e você altera para o seu padrão, apenas para funcionar o seu aplicativo, os demais poderão não funcionar corretamente. Neste caso, sugiro: 1) Na primeira vez que o usuário executar o programa, compare se a data esta no padrão que você. Se não estiver, mostre uma mensagem para o usuário dizendo que o programa só funcionará corretamente se o formato da data for "dd//mm/yyyy" e não a atual do sistema dele. Em seguida, faça uma pergunta se ele permite alterar este formato ou peça para ele alterá-lo "manualmente". Exemplo (você precisa declarar a unit SysUtils, caso ela não esteja na seção USES):
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs;

type
  TForm1 = class(TForm)
    procedure FormCreate(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;
  MinhaData: TDateTime;
  Mensagem: String;

implementation

{$R *.dfm}

procedure TForm1.FormCreate(Sender: TObject);
var
confirma: integer;
begin
  if ShortDateFormat <> 'dd/mm/yyyy' then
  begin
    beep;
    confirma:= Application.MessageBox('Este aplicativo só funciona corretamente com o padrão de data DDMMYYYY. Seu sistema contém um padrão diferente. Gostaria de alterá-lo para DDMMYYYY?', 'Atenção', Mb_YesNo+Mb_DefButton2+Mb_IconQuestion);

    if confirma = IDYes then
    begin
      ShortDateFormat := 'dd/mm/yyyy';
    end;

    if confirma = IDNo then
    begin
      mensagem:= 'O sistema não funcionará corretamente. ';
      Application.MessageBox(PChar(mensagem), 'Informação', Mb_Ok+Mb_IconInformation);
    end;
  end;
end;

end.
2) Você também pode usar o formato que você quer apenas no momento em que seu programa estiver sendo executado. Assim, quando ele for finalizado, você poderia deixar as configurações da data no formato antigo (em outras palavras, o formato da data só ficaria "dd/mm/yyyy" enquanto seu programa estiver aberto. Assim que ele for encerrado, o formato volta a ser o padrão do sistema do usuário). Dê uma olhada neste exemplo (você precisa declarar a unit SysUtils, caso ela não esteja na seção USES):
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;

type
  TForm1 = class(TForm)
    Button1: TButton;
    procedure Button1Click(Sender: TObject);
    procedure FormCreate(Sender: TObject);
    procedure FormClose(Sender: TObject; var Action: TCloseAction);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;
  FormatoAntigo: String;
  MinhaData: TDateTime;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
begin
 MinhaData := Now;
 ShortDateFormat := 'dd/mm/yyyy';
 Showmessage(DateTimeToStr(MinhaData));
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
  FormatoAntigo:=  ShortDateFormat;
end;

procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
  ShortDateFormat:= FormatoAntigo;
  Showmessage(DateTimeToStr(MinhaData));
end;

end.

Abs.

Link para o comentário
Compartilhar em outros sites

  • 0

Muito Obrigado Capablanca,

Como sempre, suas explicações claras e didáticas.

Para nós que inciamos na programação isto é fundamental.

Seguirei a sua segunda sugestão.

Abs

Paulo Nobre

Link para o comentário
Compartilhar em outros sites

Visitante
Este tópico está impedido de receber novos posts.


  • Estatísticas dos Fóruns

    • Tópicos
      152,3k
    • Posts
      652,4k
×
×
  • Criar Novo...