Olá pessoal, hoje venho mostrar uma curiosidade que temos dentro da unit SysUtils, a classe TLanguages. Ela tem a finalidade de armazenar as linguagens que o sistema operacional suporta. Veja abaixo a sua estrutura.

Listagem 1: Estrutura de languages

{ This stores the languages that the system supports }
  TLanguages = class
  private
    FSysLangs: array of TLangRec;
    class destructor Destroy;
    function LocalesCallback(LocaleID: PChar): Integer; stdcall;
    function GetExt(Index: Integer): string;
    function GetID(Index: Integer): string;
    function GetLCID(Index: Integer): LCID;
    function GetName(Index: Integer): string;
    function GetNameFromLocaleID(ID: LCID): string;
    function GetNameFromLCID(const ID: string): string;
    function GetCount: integer;
  public
    constructor Create;
    function IndexOf(ID: LCID): Integer;
    property Count: Integer read GetCount;
    property Name[Index: Integer]: string read GetName;
    property NameFromLocaleID[ID: LCID]: string read GetNameFromLocaleID;
    property NameFromLCID[const ID: string]: string read GetNameFromLCID;
    property ID[Index: Integer]: string read GetID;
    property LocaleID[Index: Integer]: LCID read GetLCID;
    property Ext[Index: Integer]: string read GetExt;
  end platform;

Agora como podemos usar esta classe? Usando uma maneira bem simples vou ilustrar o seu uso. Iremos precisar de uma aplicação e um formulário, feito isso no seu formulário adicione um TStringGrid, apenas isso e alinhe o mesmo “Align = alClient”, veja como deverá ficar o exemplo:

Layout do Formulário

Figura 1. Layout do Formulário.

Agora no evento onCreate do nosso formulário vamos ver como implementar e utilizar esta classe, veja como é simples. Listagem 2: Usando a classe TLanguages
procedure TForm1.FormCreate(Sender: TObject);
var
  {Observe que foram criadas 2 variáveis} 
  tempL : TLanguages; // Objeto para instanciar a classe
  I : Integer; // Controlador do Loop
Begin
{Instanciando o nosso Objeto}
  tempL := TLanguages.Create;
{Definindo tamanho de cada coluna no StringGrid}
  StringGrid1.ColWidths[0] := 50;
  StringGrid1.ColWidths[1] := 300;
  StringGrid1.ColWidths[2] := 150;
  StringGrid1.ColWidths[3] := 120;
  StringGrid1.ColWidths[4] := 120;
{Definindo a quantidade de LINHAS que teremos +1, pois 
precisamos informar o cabeçalho}
  StringGrid1.RowCount := tempL.Count + 1;
{Definindo a quantidade de COLUNAS}
  StringGrid1.ColCount   := 5;
{Definindo os cabeçalhos das COLUNAS}
  StringGrid1.Cells[0,0] := 'ID';
  StringGrid1.Cells[1,0] := 'Name[I]';
  StringGrid1.Cells[2,0] := 'ID[I]';
  StringGrid1.Cells[3,0] := 'NameFromLocaleID[I]';
  StringGrid1.Cells[4,0] := 'Ext';
{Loop para percorrer a lista com os dados armazenados em tempL }
  for I := 1 to tempL.Count do
  begin
{neste ponto fazemos apenas um loop simples, direcionando cada 
propriedade para uma determinada COLUNA e LINHA do StringGrid }
    StringGrid1.Cells[0,I] := IntToStr(I);
    StringGrid1.Cells[1,I] := tempL.Name[I];
    StringGrid1.Cells[2,I] := tempL.ID[I];
    StringGrid1.Cells[3,I] := tempL.NameFromLocaleID[I];
    StringGrid1.Cells[4,I] := tempL.Ext[I];
  end;
end;
Exemplo funcionando

Figura 2. Exemplo funcionando.

Concluindo então nosso artigo, vimos mais uma classe dentro do Delphi que nos permite extrair informações do nosso Sistema Operacional de maneira, rápida e fácil.

Um abraço e até o próximo artigo.