ResourceString em Delphi - Parte II
Veja nesta quick como utilizar e implementar ResourceString no Delphi.
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
Artigos relacionados
-
Artigo
-
Artigo
-
Artigo
-
Artigo
-
Artigo