Buscar

Funçao que traduz o messagedlg (aprimorado)

Código

{Dando creditos a Klerysson, autor primario da base desse codigo encontrado na dica
"funçao que traduz o messagedlg", acabei tendo a idéia de aprimora-la e envia-la mais completa,
espero que seja de bom proveito}


//Declarar em public

    function MsgDlg(Frase: String; Tipo: TMsgDlgType; Botoes: TMsgDlgButtons): Integer;


function TForm1.MsgDlg(Frase: String; Tipo: TMsgDlgType; Botoes: TMsgDlgButtons): Integer;
var
Mensagem: TForm;
I, CheckModForm, TamBtn, H_Left, Y_T_A_Left, N_T_A_Left: Integer;

//Arrays para a tradução dos botoes, o array em ingles está disposto em ordem alfabetica
const Button: array [1..11] of String = ('ABORT', 'ALL', 'CANCEL', 'HELP', 'IGNORE', 'NO',
'NOTOALL', 'OK', 'RETRY', 'YES', 'YESTOALL');
const Botao: array [1..11] of String = ('A&bortar', '&Todos', '&Cancelar', '&Ajuda',
'&Ignorar', '&Não', 'Não à To&dos', '&OK', '&Repetir', '&Sim', 'S&im à Todos');

//Arrays para a tradução dos tipos de msg, o array em ingles está disposto em ordem alfabetica
const TypeMsg: array [1..4] of String = ('Confirm', 'Error', 'Information', 'Warning');
const TipoMsg: array [1..4] of String = ('Confirma', 'Erro', 'Informação', 'Cuidado');
begin
    //Criando a mensagem...
    Mensagem := CreateMessageDialog('' + Frase + '', Tipo, Botoes);

    //Esse For verifica e aplica a tradução do estilo da msg, de acordo com a ordem dos arrays
    for I := 1 to 4 do
    begin
        if Mensagem.Caption = TypeMsg[I] then
          Mensagem.Caption := TipoMsg[I]
    end;

    //Como a tradução de "Yes to all" e "No to All" não cabem direto no botao padrao, pode-se
    //fazer algumas adaptações de tamanho nos botoes e no MessageDlg, onde entram as variaveis
    //TamBtn que guarda a Tamanho dos botoes, Y_T_A_Left que guarda o left do botao "Yes to All",
    //N_T_A_Left que guarda o left do Botao "No to All" e H_Left que guarda o left do botao "Help",
    //MAS CASO ACHEM DESNECESSARIO ESSAS ADAPTAÇÕES PODEM ENXUGAR O CODIGO ABAIXO APAGANDO ELE E TODAS
    //AS VARIAVEIS DO TIPO INTEIRO COM EXCEÇÃO DO "I" DOS ARRAYS ATÉ O PROXIMO "FOR" QUE ELE CONTINUARÁ
    //TRADUZINDO CORRETAMENTE
    CheckModForm := 0;
    if (Mensagem.FindComponent('YESTOALL') as TButton).Caption = 'Yes to &All' then
    begin
       Mensagem.Width := Mensagem.Width + 20;
       TamBtn := (Mensagem.FindComponent('YESTOALL') as TButton).Width;
       Y_T_A_Left := (Mensagem.FindComponent('YESTOALL') as TButton).Left;
       (Mensagem.FindComponent('YESTOALL') as TButton).Width := TamBtn + 20;
       CheckModForm := CheckModForm + 1;

       //Como o posicionamento do botap "Help" é sempre no fim é feito mais adaptações em relação a ele
       if (Mensagem.FindComponent('HELP') as TButton).Caption = '&Help' then
       begin
           H_Left := (Mensagem.FindComponent('HELP') as TButton).Left;
           (Mensagem.FindComponent('HELP') as TButton).Left := TamBtn + Y_T_A_Left + 25;
       end;
    end;
    if (Mensagem.FindComponent('NOTOALL') as TButton).Caption = 'N&o to All' then
    begin
       Mensagem.Width := Mensagem.Width + 20;
       TamBtn := (Mensagem.FindComponent('NOTOALL') as TButton).Width;
       N_T_A_Left := (Mensagem.FindComponent('NOTOALL') as TButton).Left;
       (Mensagem.FindComponent('NOTOALL') as TButton).Width := TamBtn + 20;
       CheckModForm := CheckModForm + 1;
       if (Mensagem.FindComponent('HELP') as TButton).Caption = '&Help' then
       begin
           H_Left := (Mensagem.FindComponent('HELP') as TButton).Left;
           (Mensagem.FindComponent('HELP') as TButton).Left := TamBtn + N_T_A_Left + 25;
       end;
    end;

    //Essa variavel verifica se os botoes "Yes to All" e "No to All" estão juntos
    if CheckModForm = 2 then
    begin
        (Mensagem.FindComponent('NOTOALL') as TButton).Left := N_T_A_Left;
        (Mensagem.FindComponent('YESTOALL') as TButton).Left := Y_T_A_Left + 20;
        if (Mensagem.FindComponent('HELP') as TButton).Caption = '&Help' then
          (Mensagem.FindComponent('HELP') as TButton).Left := TamBtn + Y_T_A_Left + 45;
    end;

    //Esse For verifica e aplica a tradução dos botoes, de acordo com os arrays                                                                               //
    for I := 1 to 11 do
      (Mensagem.FindComponent(Button[I]) as TButton).Caption := Botao[I];

    //Mostra o MessageDlg traduzido
    Result := Mensagem.ShowModal;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
    //Chamando a função
    //OBS: Para criar o MessageDlg com botoes à escolha, utilize os colchetes, caso não
    //os utilize terão alguns grupos padroes de botoes da função padrao

    MsgDlg('Deseja deletar esse registro ?', mtConfirmation, mbAbortRetryIgnore);
end;

Publicidade

Vote na dica




Quantidade de votos: 0 votos
Aceitação: 0%


Detalhes da dica

Categoria: Forms
Adicionada dia: 03/11/07
Por: Davi Winter
Visualizada: 6391 vezes

Planeta Delphi - Tudo sobre programação Delphi Planeta Delphi - www.planetadelphi.com.br - Todos os direitos reservados | Copyright 2001-2009