第一次来大富翁,问个问题?(100分)

  • 主题发起人 主题发起人 阿拉宁波人
  • 开始时间 开始时间

阿拉宁波人

Unregistered / Unconfirmed
GUEST, unregistred user!
我发现很多国外写的软件中的对话框(不是MessageBox那种)中的按钮<br>如"确定","取消","应用"等是中文,不知这个怎么做出来的,在Delphi中<br>如何实现!<br>
 
Application.MessageBox('这个可以','估计是你要的',64+mb_YesNoCancel);
 
这个是调用系统的Api函数,应该和系统语言关联的。<br>所以能够自动显示Yes、No或者确定、取消等
 
用API<br>MessageBox保证你的按钮在中文系统时候显示中文,在英文系统里面显示英文<br>procedure TForm1.Button1Click(Sender: TObject);<br>begin<br>&nbsp; messagebox(form1.handle, 'lpText', 'lpCaption', MB_OKCANCEL);<br>end;<br>第四个参数详见帮助,在delphi的unit中按F1(将光标移到messagebox中间)<br><br>在最后一位参数还可以指定对话框要显示什么图标。<br>messagebox(form1.handle, 'lpText', 'lpCaption', MB_OKCANCEL or MB_ICONSTOP);//用X这个图标。<br><br>对话框返回值也看帮助吧。<br>
 
我说了不是MessageBox那种,yzhshi能否细细道来!
 
对对对,就是它!我也刚知道不久。<br>Application.MessageBox<br>
 
呵呵,看一下Application.MessageBox,他实际就是调用Windows的MessageBox函数,两个是一样的。
 
如下:<br>function TApplication.MessageBox(const Text, Caption: PChar; Flags: Longint): Integer;<br>var<br>&nbsp; ActiveWindow: HWnd;<br>&nbsp; WindowList: Pointer;<br>&nbsp; MBMonitor, AppMonitor: HMonitor;<br>&nbsp; MonInfo: TMonitorInfo;<br>&nbsp; Rect: TRect;<br>begin<br>&nbsp; ActiveWindow := GetActiveWindow;<br>&nbsp; MBMonitor := MonitorFromWindow(ActiveWindow, MONITOR_DEFAULTTONEAREST);<br>&nbsp; AppMonitor := MonitorFromWindow(Handle, MONITOR_DEFAULTTONEAREST);<br>&nbsp; if MBMonitor &lt;&gt; AppMonitor then<br>&nbsp; begin<br>&nbsp; &nbsp; MonInfo.cbSize := Sizeof(TMonitorInfo);<br>&nbsp; &nbsp; GetMonitorInfo(MBMonitor, @MonInfo);<br>&nbsp; &nbsp; GetWindowRect(Handle, Rect);<br>&nbsp; &nbsp; SetWindowPos(Handle, 0,<br>&nbsp; &nbsp; &nbsp; MonInfo.rcMonitor.Left + ((MonInfo.rcMonitor.Right - MonInfo.rcMonitor.Left) div 2),<br>&nbsp; &nbsp; &nbsp; MonInfo.rcMonitor.Top + ((MonInfo.rcMonitor.Bottom - MonInfo.rcMonitor.Top) div 2),<br>&nbsp; &nbsp; &nbsp; 0, 0, SWP_NOACTIVATE or SWP_NOREDRAW or SWP_NOSIZE or SWP_NOZORDER);<br>&nbsp; end;<br>&nbsp; WindowList := DisableTaskWindows(0);<br>&nbsp; if UseRightToLeftReading then Flags := Flags or MB_RTLREADING;<br>&nbsp; try<br>&nbsp; &nbsp; Result := Windows.MessageBox(Handle, Text, Caption, Flags);<br>&nbsp; finally<br>&nbsp; &nbsp; if MBMonitor &lt;&gt; AppMonitor then<br>&nbsp; &nbsp; &nbsp; SetWindowPos(Handle, 0,<br>&nbsp; &nbsp; &nbsp; &nbsp; Rect.Left + ((Rect.Right - Rect.Left) div 2),<br>&nbsp; &nbsp; &nbsp; &nbsp; Rect.Top + ((Rect.Bottom - Rect.Top) div 2),<br>&nbsp; &nbsp; &nbsp; &nbsp; 0, 0, SWP_NOACTIVATE or SWP_NOREDRAW or SWP_NOSIZE or SWP_NOZORDER);<br>&nbsp; &nbsp; EnableTaskWindows(WindowList);<br>&nbsp; &nbsp; SetActiveWindow(ActiveWindow);<br>&nbsp; end;<br>end;<br>
 
我要吐血了,这也只能跟踪到这句:<br>Windows.MessageBox(Handle, Text, Caption, Flags);<br>其他都是Windows干的活,继续讨论...<br>
 
1。Application.MessageBox('这个可以','估计是你要的',64+mb_YesNoCancel);<br>2。MessageBox(0,'这个可以','估计是你要的',64+mb_YesNoCancel);<br>效果是完全一样的,你到底需要什么样的呢?<br>
 
错了错了,我要的是比如我写了个多语言的软件,有一选项对话框,我的按钮要是有<br>Ok, Cancel, Apply,则它在中文环境中应是"确定,取消,应用",不是通过字符替换实现.<br>
 
这句话是调用WindowsAPI的,你当然不能继续跟踪了。使用他,没错的。<br>Windows.MessageBox(Handle, Text, Caption, Flags);
 
知道吗Windows.MessageBox(Handle, Text, Caption, Flags);<br>其中作用就是调用windows这个Unit里面的messagebox函数,这个函数就是<br>我在上面所的messagebox,你试试吧。<br>messagebox(form1.handle, 'lpText', 'lpCaption', MB_OKCANCEL);<br>有两个按钮,一个是“确定”,一个是“取消”<br>如果在中文WIN会显示上面,如果到了英文的,它会显示成"OK", "Cancel"
 
可能是我表达的不清楚吧!MessageBox那种三年前我就知道了.我要的是比如我在窗体上<br>放了一个按钮,要让它在中文环境中显示"确定",在英文环境中显示"OK",不是通过字符替换,<br>我想应该能通过某个系统的调用能达到这个目的,ok?
 
补充一下:当然不是所的字符串,应该就是"确定","取消","应用"这几个常用的按钮.
 
API MessageBox所在的那个DLL里或者其他系统DLL里应该有"确定","取消","应用"<br>这几个字符串资源,你找到它们的ID将它们LOAD进来不就可以了?如果是英文的OS,则字符串<br>也是英文的。<br>
 
阿拉宁波人, <br>MessageBox应该是与操作系统的语言环境对应的
 
就是它了,它会随系统的语言改变。
 
我也在宁波呀!<br>找到了consts.pas吧汉化一样好了吗[:D]
 
多人接受答案了。
 
后退
顶部