Šta je novo?

Problemi oko lokalizacije MessageDlg

!rabas

Čuven
Učlanjen(a)
09.12.2003
Poruke
630
Poena
619
Dakle, hocu da prevedem jedan moj program na srpski (cirilica je u pitanju). Koristim TNT Unicode komponente umesto standardnih. Ali sada mi je frka oko prevodjenja ShowMessage i MessageDlg. Nasao sam funkciju negde na netu koja sluzi upravo za to i prepravio sam je tako da koristi procedure sa Wide stringovima iz TNT unita (Tnt Dialogs, cini mi se). Sada ona izgleda ovako:
Kod:
function TMainForm.WideMessageDlgTranslated(const Msg: string; DlgType: TMsgDlgType; Buttons: TMsgDlgButtons; DefaultButton: TMsgDlgBtn; HelpCtx: Longint = 0): TModalResult;
begin
  with WideCreateMessageDialog(Msg, DlgType, Buttons) do {WideCreateMessageDialog je iz TntDialogs}
  try
    Position := poMainFormCenter;
    case DlgType of
      mtWarning: Caption := TntListBox1.Items[1];
      mtError: Caption := TntListBox1.Items[2];
      mtInformation: Caption := TntListBox1.Items[3];
      mtConfirmation: Caption := TntListBox1.Items[4];
    end;

    with FindChildControl('Yes') as TButton do
    begin
      Caption := TntListBox1.Items[6];
      if DefaultButton = mbYes then
        TabOrder := 0;
    end;
    with FindChildControl('No') as TButton do
    begin
      Caption := TntListBox1.Items[7];
      if DefaultButton = mbNo then
        TabOrder := 0;
    end;
    with FindChildControl('Cancel') as TButton do
    begin
      Caption := TntListBox1.Items[8];
      if DefaultButton = mbCancel then
        TabOrder := 0;
    end;
    with FindChildControl('OK') as TButton do
    begin
      Caption := TntListBox1.Items[5];
      if DefaultButton = mbOK then
        TabOrder := 0;
    end;
    Result := ShowModal;
  finally
    Free;
  end;
end;
E sve ovo lepo radi, prevede naslov MessageDlg, prevede poruku (sve lepo na cirilici) jedino sto nece nikako da prevede dugmice. Sada me zanima da li je moguce da se i to nekako uradi?
 
Standardni windows dugmici su vezani za lokalna podesavanja...
mada verujem da postoji nacin da se i oni prevedu kroz api, kontam da bi ti brze bilo da si svoje dialoge pravio...
 
Pretpostavio sam to, ali racunam da ako ima veze sa lokalnim podesavanjima, onda ce da napise neke kvake i kuke. Ali mozda sam se i ja pogresno izrazio, trebao sam da dodam da uopste ne menja dugmice, vec da jednostavno ostaju isti.

Pa sacekacu jos malo, cisto da vidim da li neko ima nesto da doda. Mislim da nije to losa ideja u ovoj situaciji praviti nove dialoge, ali mora da postoji neko elegantnije resenje. A nigde ja na raspustu ne zurim;)

E da, zna li neko kako prevesti Open, Save, Print dijalog?
 
Poslednja izmena:
Tako je i u VCL-u - obican TButton koristi API funkciju za kreiranje dugmeta putem CreateWindows funkcije i tada se koristi locale koji je vezan sa verziju sistema - ako imas englesku verziju windowsa, znas sta ces dobiti. Ukoliko koristis nesto sto sto u OnPaint handleru koristi svoj caption&font (tipa TBitBtn ili TSpeedbuttona), onda sa njima mozes da radis sa cirilicom i bez unicoda, tj. ako promenis font.charset property.

Pojedine junite mozes da zamenis sa aliasima. Npr, napravis kopiju od Controls.pas i nazoves je recimo ControlsW.pas; editujes mesta koja su ti potrebna (recimo liniju TCaption = type string --> TCaption = type WideString) i u Project/Options/Directories/Conditionals imas Aliases box, gde dodas za taj zeljeni projekat "Controls=ControlsW", tako da pri kompajliranju biva tvoja verzija pozivana.

S tim da onda i sistemske funkcije naravno zoves u Wide formatu - kad pogledas recimo windows.pas, sasvim je jasan pattern, npr:
function CreateDirectoryA; external kernel32 name 'CreateDirectoryA';
function CreateDirectoryW; external kernel32 name 'CreateDirectoryW';
function CreateDirectory; external kernel32 name 'CreateDirectoryA';

Da bi se sve promenilo - moze, ali ima posla, mozda i previse. Meni je bilo draze i lakse da ne koristim uopste VCL, nego napravim svoju biblioteku "from scratch" po sistemu "CreateWindowEx u ruke" - ne samo zbog unicode podrske, nego i zbog drugih stvari.

Mada, sto se tice dijaloga, zar ti nije lakse da zaboravis Dialogs.pas i koristis Common dialoge koji vec podrzavaju unicode? Zaviri u ...\DelphiX\Source\Rtl\Win\commdlg.pas i zaviri na msdn ukoliko ti trebaju dodatna objasnjenja.
 
Poslednja izmena:
Nazad
Vrh Dno