



Fala galera do Show Delphi, tudo beleza?
Vocês já conheciam a variaveis LongMonthNames, ShortMonthNames, LongDayNames e ShortDayNames?
Elas representam vetores (arrays) de string que contém os nomes dos meses e dias da semana escritos por extenso.
Como segue a lista a baixo:
LongMonthNames: Nomes de Mês completos.
ShortMonthNames: Nomes de Mês abreviados;
LongDayNames: Nomes de dia da semana completos;
ShortDayNames: Nomes de dia da semana abreviados;
O mais interessante é que os nomes já vem na mesma linguagem do sistema operacional, assim não precisamos nos preocupar em casos de aplicativos multi linguagens.
Vejamos como ela funciona:
SysUtils.FormatSettings.LongMonthNames[10] equivale a “outubro” – no caso do sistema operacional em português.
SysUtils.FormatSettings.ShortMonthNames[11] – retorna “nov”
SysUtils.FormatSettings.LongDayNames[1] – retorna “domingo”
SysUtils.FormatSettings.ShortDayNames[6] – retorna “sex”
Ou seja, são arrays que já possuem as informações dos nomes dos meses e dias da semana.
Agora vamos ver na prática!
Exemplo em Lazarus e Delphi até a versão 2010
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 | unit Unit1; {$mode objfpc}{$H+} interface uses Classes, SysUtils, Forms, Controls, Graphics, Dialogs, StdCtrls; type { TForm1 } TForm1 = class(TForm) Button1: TButton; procedure Button1Click(Sender: TObject); private public end; var Form1: TForm1; implementation {$R *.lfm} { TForm1 } procedure TForm1.Button1Click(Sender: TObject); var I : Integer; vTexto : string; begin { Nomes de Mês completos } vTexto := ''; for I := 1 to 12 do begin vTexto := vTexto + SysUtils.FormatSettings.LongMonthNames[i] + ^M; end; ShowMessage(vTexto); { Nomes de Mês abreviados } vTexto := ''; for I := 1 to 12 do begin vTexto := vTexto + SysUtils.FormatSettings.ShortMonthNames[i] + ^M; end; ShowMessage(vTexto); { Nomes de dia da semana completos } vTexto := ''; for I := 1 to 7 do begin vTexto := vTexto + SysUtils.FormatSettings.LongDayNames[i] + ^M; end; ShowMessage(vTexto); { Nomes de dia da semana abreviados } vTexto := ''; for I := 1 to 7 do begin vTexto := vTexto + SysUtils.FormatSettings.ShortDayNames[i] + ^M; end; ShowMessage(vTexto); end; end. |
Em “Delphis” novos, muda um pouquinho.
Exemplo em versões do Delphi a partir do XE, testado até o Delphi 10.3 Rio
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 | unit Unit1; interface uses Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics, Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls; type TForm1 = class(TForm) Button1: TButton; procedure Button1Click(Sender: TObject); private { Private declarations } public { Public declarations } end; var Form1: TForm1; implementation {$R *.dfm} procedure TForm1.Button1Click(Sender: TObject); var I: Integer; vTexto: string; Fmt: TFormatSettings; begin Fmt := TFormatSettings.Create; { Nomes de Mês completos } vTexto := ''; for I := 1 to 12 do begin vTexto := vTexto + Fmt.LongMonthNames[I] + ^M; end; ShowMessage(vTexto); { Nomes de Mês abreviados } vTexto := ''; for I := 1 to 12 do begin vTexto := vTexto + Fmt.ShortMonthNames[i] + ^M; end; ShowMessage(vTexto); { Nomes de dia da semana completos } vTexto := ''; for I := 1 to 7 do begin vTexto := vTexto + Fmt.LongDayNames[i] + ^M; end; ShowMessage(vTexto); { Nomes de dia da semana abreviados } vTexto := ''; for I := 1 to 7 do begin vTexto := vTexto + Fmt.ShortDayNames[i] + ^M; end; ShowMessage(vTexto); end; end. |
Em ambos os casos, precisamos declarar SysUtils na seção uses.
Nos exemplos acima, o resultado da mensagem para um sistema operacional em português será:
Com LongMonthNames
janeiro
fevereiro
março
abril
maio
junho
julho
agosto
setembro
outubro
novembro
dezembro
Com ShortMonthNames
jan
fev
mar
abr
mai
jun
jul
ago
set
out
nov
dez
Com LongDayNames
domingo
segunda-feira
terça-feira
quarta-feira
quinta-feira
sexta-feira
sábado
E por fim, com ShortDayNames
dom
seg
ter
qua
qui
se
sab
Como de costume também criamos uma vídeo aula para ajudar no entendimento do post.
Utilizamos como pesquisa o seguinte post:
https://stackoverflow.com/questions/27358545/longmonthnames-usage-in-delphi-xe2-and-delphi-xe7
Certo pessoal, acredito que tenha ficado bem detalhado u funcionamento destas variáveis e espero que seja útil a todos.
Dúvidas ou sugestões? Deixe o seu comentário!
Uma abraço e até a próxima. Valeu!
Você precisa fazer o login para publicar um comentário.
Atualmente, em RAD Studio 10.3.3, ou desde edition XE ou XE7, nao tenho estas versions instaladas no momento, eu uso o seguinte:
var
lFS : TFormatSettings;
lTexto: string;
begin
Memo1.Clear;
//
// Esta classe não precisa liberar memoria (FREE)
lFS := TFormatSettings.Create(‘pt-BR’); // ou qualquer outro país siglas ou através do seu “TLocaleID” veja no Help!
//
for lTexto in lFS.ShortMonthNames do
Memo1.Lines.Add(‘Mês – nomes curtos = ‘ + lTexto);
//
for lTexto in lFS.LongMonthNames do
Memo1.Lines.Add(‘Mês – nomes longos = ‘ + lTexto);
//
for lTexto in lFS.ShortDayNames do
Memo1.Lines.Add(‘Dias – nomes curtos = ‘ + lTexto);
//
for lTexto in lFS.LongDayNames do
Memo1.Lines.Add(‘Dias – nomes longos = ‘ + lTexto);
//
// aqui, usando a propriedade “Invariant” para exemplos acima
// você pode obter o “default” para as definições do idioma English, quando não alterado!!!
// caso contrário, você obterá os valores de acordo com o seu MSWindows
// configurações do seu país
//
// Outra coisa, por padrão, “o primeiro dia da semana” é definido pelo MSWindows,
// então você pode definir manualmente e temporariamente esta definição ou
// alterar no seu MSWindows de forma mais “definitiva” se é que me entende!
//
for lTexto in lFS.Invariant.ShortMonthNames do
Memo1.Lines.Add(‘Mês – nomes curtos = ‘ + lTexto);
//
// o Texto estará em seu idioma, naturalmente!!!
//
lFS.ShortDayNames[1] := ‘Mon’;
//
Memo1.Lines.Add(lfs.Invariant.ShortDayNames[1]); // Domingo é o primeiro dia padrão “invariante” em Inglês
//
Memo1.Lines.Add(lfs.ShortDayNames[1]); // Segunda
end;