{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] ofString= ('ABORT', 'ALL', 'CANCEL', 'HELP', 'IGNORE', 'NO',
'NOTOALL', 'OK', 'RETRY', 'YES', 'YESTOALL'); const Botao: array [1..11] ofString= ('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] ofString= ('Confirm', 'Error', 'Information', 'Warning'); const TipoMsg: array [1..4] ofString= ('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;