安装及使用ACDSee5.0英文版时,我注意到它的对话框或向导中的按钮如"确定"、"取消"、"下一步"等中文显示,为什么没显示"Ok","Cancel","Next"等英文?怎样实现这种按钮?如能我们程序中的标准按钮象这样根据操作系统的语言环境显示相应的语言提示,那么国际化你的软件时岂不是省了很多事?
    请高手赐教。

解决方案 »

  1.   

    用messagebox好象就行。
    Application.MessageBox('this is only a test', 'test',  MB_OK);
    在中文系统下,按钮显示的就是确定,英文下好象就是ok
      

  2.   

    使用API就可以实现向导了,这样的话,那些按钮就是Windows自身的,从而就和Windows的语言一样了。但是Delphi和C++Builder都没有对API的向导打包。
      

  3.   


        我关心的倒不是向导的"下一步"按钮,而是软件内部的"Ok","Cancel"等按钮如何自己适应相应的语言环境,messagebox肯定不行,因为我们常常要自定义对话框。望各位多发表意见,谢谢。
        世平兄谈得有点意思,望进一步谈谈。
      

  4.   

    首先声明,我是用BCB的,Delphi的语法不熟,如有错误,自己修改一下。function GetNextStepStr: string;
    var
      hInst: HINSTANCE;
      Buffer: array[0..64] of Char;  function DlgProc(hDlg:HWND, uMsg:UINT, wParam:WPARAM, 
        lParam:LPARAM): BOOL;
      begin
        if uMsg=WM_INITDIALOG then
        begin
           GetWindowText(GetDlgItem(hDlg,
                12324), Buffer, 64);
           EndDialog(hDlg, 0);
        end;
        Result := 0;
      end;begin
      hInst := LoadLibrary('comctl32.dll');
      DialogBoxParam(hInst, LPCSTR(1020), Nil, @DlgProc, 0);
      FreeLibrary(hInst);  Result := Buffer;
    end;
      

  5.   

    说明,上面的代码是模拟弹出一个对话框,comctl32.dll 里面的ID=1020的
    对话框就是向导窗口的对话框,里面有几个按钮,其中对话框里ID=12324的
    控件就是“下一步”这个按钮。函数的目的就是取得这个按钮的文字并返回
    这个文字。
      

  6.   


        世平兄的BCB太对我的路子了,其实我也是用BCB的,考虑到Delphi更普遍,高手更多,才在这里提问的。
        还有哪位有高见?
      

  7.   


        世平兄不如将你的BCB代码贴出来更好。
      

  8.   

    下面是BCB的代码。static char StepStr[64]="";
    BOOL DlgProc(HWND hDlg, UINT uMsg, WPARAM wParam,
        LPARAM lParam)
    {
        if (uMsg==WM_INITDIALOG) {
            GetWindowText(GetDlgItem(hDlg,
                12324), StepStr, 64);
            EndDialog(hDlg, 0);
        }
        return 0;
    }AnsiString GetNextStepStr()
    {
        HINSTANCE hInst;    if (StepStr[0]) return StepStr;    hInst = LoadLibrary("comctl32.dll");
        DialogBoxParam(hInst, LPCSTR(1020),
            NULL, (FARPROC)DlgProc, 0);
        FreeLibrary(hInst);  return StepStr;
    }
      

  9.   


        世平兄,帮人帮到底,送佛送到西,不如给出一个Form的例子,将上述函数应用一下,如何?当然仅须说明制作方法罢了,不必给出详细内容。
      

  10.   

    函数已经提供了,你还要怎么样啊。
    void __fastcall TForm1::Button1Click(TObject *Sender)
    {
        ShowMessage(GetNextStepStr());
        Button2->Caption = GetNextStepStr();
    }
      

  11.   

    自定义Form保存成函数,自己用还是比较方便的。
      

  12.   

    我觉得你在程序中如果全部使用api的话就可以达到这个目的,但是这样的话,生产效率会很低,得不偿失,再说如果使用软件的人连基本的英语都不懂,情况不是大好就是大坏。