Olá galera, nesta Quick Tips, irei continuar falando de resourcestring.

 

Meu propósito final para esta Quick, não seria mostrar como funciona um resourcestring, mas sim como podemos interagir com as mensagens que temos no Delphi, quando fazemos um sistema em português, e colocamos um MessageDlg, fica sempre os botões Yes / No, e o título Warning ou Error, dependendo do tipo de mensagem, mas o que quero é traduzir estas mensagens. Já vimos por ai que muitos programadores já traduziram as mensagens através do .pas, de cada unit, porém ao mudarmos uma versão do Delphi por exemplo, estes .pas, podem ter sofrido alteração da Embarcadero, e daí não veremos estas por estar utilizando versão antiga do .pas. Sendo assim tive esta idéia para traduzir, porém eu não vou traduzir todas as mensagens, vou mostrar como traduz e ao surgir a necessidade de uma nova tradução fica a critério de vocês a tradução. É a historia de não dar o peixe, mas sim ensinar a pescar.  Então vamos ao final.

 

Vamos criar uma nova unit e salvar com o nome uTraducao.pas, e nela incluiremos dois métodos como mostra abaixo, e suas implementações

 

unit uTraducao;

interface

uses

  Windows, consts;

Type

  TTraducao = Class

  public

    procedure SetResourceString(xOldResourceString: PResStringRec;

                     xValueChanged: PChar);

    procedure ChangeValues;

  End;

Implementation

 

 

{Método utilizado para podermos fazer a conversão em tempo de execução das mensagens do Delphi}

 

procedure TTraducao.SetResourceString(xOldResourceString: PResStringRec;

xValueChanged: PChar);

 

var

  POldProtect: DWORD;

 

begin

VirtualProtect(xOldResourceString, SizeOf(xOldResourceString^),

PAGE_EXECUTE_READWRITE, @POldProtect);

xOldResourceString^.Identifier := Integer(xValueChanged);

VirtualProtect(xOldResourceString, SizeOf(xOldResourceString^), POldProtect,

@POldProtect);

end;

 

{Método utilizado para podemos efetuar a mudança das mensagens}

 

procedure TTraducao.ChangeValues;

begin

  SetResourceString(@SMsgDlgYes, 'Sim');

  SetResourceString(@SMsgDlgWarning,'Atenção');

  SetResourceString(@SMsgDlgError, 'Erro');

  SetResourceString(@SMsgDlgInformation,'Information');

  SetResourceString(@SMsgDlgConfirm , 'Confirm');

  SetResourceString(@SMsgDlgYes , '&Sim');

  SetResourceString(@SMsgDlgNo , '&Não');

  SetResourceString(@SMsgDlgOK , 'OK');

  SetResourceString(@SMsgDlgCancel , 'Cancelar');

  SetResourceString(@SMsgDlgHelp , '&Ajuda');

  SetResourceString(@SMsgDlgHelpHelp , 'Ajuda');

  SetResourceString(@SMsgDlgAbort , '&Abortar');

  SetResourceString(@SMsgDlgRetry , '&Repetir');

  SetResourceString(@SMsgDlgIgnore , '&Ignorar');

  SetResourceString(@SMsgDlgAll , '&Tudo');

  SetResourceString(@SMsgDlgNoToAll , 'N&ao para Tudo');

  SetResourceString(@SMsgDlgYesToAll , 'Sim para &Tudo');

  SetResourceString(@SMsgDlgClose , '&Fechar');

end;

 

End.

 

 

Deste ponto em diante vamos agora testar as mensagens traduzidas, veja que todas as mensagens do método changeValue ao ser executado, será traduzido as suas resourcestrings contidas nele.

 

Vamos então testar este método.

 

Em um formulário, vamos dar uses em uTraducoes.

 

implementation

 

uses uTraducao;

 

{$R *.dfm}

 

procedure TForm2.Button1Click(Sender: TObject);

Var

  Traducao : TTraducao;

begin

  Traducao := TTraducao.Create;

  Traducao.ChangeValues;

  MessageDlg('Minha Mensagem',mtWarning,mbYesNo,0);

end;

 

Veja o resultado ao executar o programa

 



 

Fico por aqui ate à próxima Quick Tips.

 

 

Um abraço

 

Wesley Y

wyamazack@rwsolution.com.br