28 Ağustos 2012 Salı

TMessageDlg Özelleştirme

Bilindiği üzere MessageDlg daki ibareler ingilizce.Nasıl türkçeleştirebiliriz. Forumda da baktığım pas dosyasını düzenleyerek çözüme ulaşanları gördüm.Bu da benim çözümüm. Biraz uğraştırdı ama uğraşmaya değer...Ana Formunuza bir tane TApplicationEvents nesnesi bırakın.
 private
    { Private declarations }
    procedure ConvertToTurkish(H: HWND);

procedure TfrmMain.ConvertToTurkish(H: HWND);
begin
  if FindWindowEx(H, 0, 'TButton', '&Yes') <> 0 then
  begin
    SendMessage(FindWindowEx(H, 0, 'TButton', '&Yes'), WM_SETTEXT, 0,
      Integer(PCHAR('Evet')));
  end;
  if FindWindowEx(H, 0, 'TButton', '&No') <> 0 then
  begin
    SendMessage(FindWindowEx(H, 0, 'TButton', '&No'), WM_SETTEXT, 0,
      Integer(PCHAR('Hayır')));
  end;
  if FindWindowEx(H, 0, 'TButton', 'OK') <> 0 then
  begin
    SendMessage(FindWindowEx(H, 0, 'TButton', 'OK'), WM_SETTEXT, 0,
      Integer(PCHAR('Tamam')));
  end;
  if FindWindowEx(H, 0, 'TButton', 'Cancel') <> 0 then
  begin
    SendMessage(FindWindowEx(H, 0, 'TButton', 'Cancel'), WM_SETTEXT, 0,
      Integer(PCHAR('İptal')));
  end;
  if FindWindowEx(H, 0, 'TButton', 'Abort') <> 0 then
  begin
    SendMessage(FindWindowEx(H, 0, 'TButton', 'Abort'), WM_SETTEXT, 0,
      Integer(PCHAR('Durdur')));
  end;
  if FindWindowEx(H, 0, 'TButton', 'Retry') <> 0 then
  begin
    SendMessage(FindWindowEx(H, 0, 'TButton', 'Retry'), WM_SETTEXT, 0,
      Integer(PCHAR('Tekrar')));
  end;
  if FindWindowEx(H, 0, 'TButton', 'Ignore') <> 0 then
  begin
    SendMessage(FindWindowEx(H, 0, 'TButton', 'Ignore'), WM_SETTEXT, 0,
      Integer(PCHAR('Umursama')));
  end;
  if FindWindowEx(H, 0, 'TButton', 'All') <> 0 then
  begin
    SendMessage(FindWindowEx(H, 0, 'TButton', 'All'), WM_SETTEXT, 0,
      Integer(PCHAR('Hepsi')));
  end;
  if FindWindowEx(H, 0, 'TButton', 'N&o to All') <> 0 then
  begin
    SendMessage(FindWindowEx(H, 0, 'TButton', 'N&o to All'), WM_SETTEXT, 0,
      Integer(PCHAR('Tümünü Hayır')));
  end;
  if FindWindowEx(H, 0, 'TButton', 'Yes To &All') <> 0 then
  begin
    SendMessage(FindWindowEx(H, 0, 'TButton', 'Yes To &All'), WM_SETTEXT, 0,
      Integer(PCHAR('Tümünü Evet')));
  end;
  if FindWindowEx(H, 0, 'TButton', '&Close') <> 0 then
  begin
    SendMessage(FindWindowEx(H, 0, 'TButton', '&Close'), WM_SETTEXT, 0,
      Integer(PCHAR('Kapat')));
  end;

end;
Daha sonra TApplicationEvent nesnesinin OnMessage Eventine.
procedure TfrmMain.ApplicationEventsMessage(var Msg: tagMSG;
  var Handled: Boolean);
var
  H: HWND;
begin
  H := FindWindow('TMessageForm', 'Information');
  if H <> 0 then
  begin
    SendMessage(H, WM_SETTEXT, 0, Integer(PCHAR('Bilgi')));
    ConvertToTurkish(H);
    exit;
  end;
  H := FindWindow('TMessageForm', 'Warning');
  if H <> 0 then
  begin
    SendMessage(H, WM_SETTEXT, 0, Integer(PCHAR('Dikkat')));
    ConvertToTurkish(H);
    exit;
  end;
  H := FindWindow('TMessageForm', 'Error');
  if H <> 0 then
  begin
    SendMessage(H, WM_SETTEXT, 0, Integer(PCHAR('Hata')));
    ConvertToTurkish(H);
    exit;
  end;
  H := FindWindow('TMessageForm', 'Confirm');
  if H <> 0 then
  begin
    SendMessage(H, WM_SETTEXT, 0, Integer(PCHAR('Onay')));
    ConvertToTurkish(H);
    exit;
  end;
end;