调用Messagedlg函数后,如何使对话框中显示的英文按钮变为中文!(100分)

  • 主题发起人 主题发起人 wjfgm
  • 开始时间 开始时间
W

wjfgm

Unregistered / Unconfirmed
GUEST, unregistred user!
如“OK”显示为“确定”,“NO”显示为“取消”等,请大家指教!
 
1.可更改系统文件的参数;
2.可以用MessageBox函数
 
主要是由一个Delphi单元控制的,好象是const,在delphi的source目录下有一个源
文件,然后随便建一个工程,将这个单元包含进来,修改这个单元中定义的一些常量
为中文字符,然后编译,编译后会找到const.dcu文件,我们要的就是这个文件,将这个
文件拷贝到Delphi的Lib 目录下,就可以了,用这个方法可汉化好多Delphi的东西,
好好看看吧!
 
是Consts.pas文件
 
用windows api
The MessageBox function creates, displays, and operates a message box. The message box contains an application-defined message and title, plus any combination of predefined icons and push buttons.

int MessageBox(

HWND hWnd, // handle of owner window
LPCTSTR lpText, // address of text in message box
LPCTSTR lpCaption, // address of title of message box
UINT uType // style of message box
);


Parameters

hWnd

Identifies the owner window of the message box to be created. If this parameter is NULL, the message box has no owner window.

lpText

Points to a null-terminated string containing the message to be displayed.

lpCaption

Points to a null-terminated string used for the dialog box title. If this parameter is NULL, the default title Error is used.

uType

Specifies a set of bit flags that determine the contents and behavior of the dialog box. This parameter can be a combination of flags from the following groups of flags.
Specify one of the following flags to indicate the buttons contained in the message box:

Flag Meaning
MB_ABORTRETRYIGNORE The message box contains three push buttons: Abort, Retry, and Ignore.
MB_OK The message box contains one push button: OK. This is the default.
MB_OKCANCEL The message box contains two push buttons: OK and Cancel.
MB_RETRYCANCEL The message box contains two push buttons: Retry and Cancel.
MB_YESNO The message box contains two push buttons: Yes and No.
MB_YESNOCANCEL The message box contains three push buttons: Yes, No, and Cancel.


Specify one of the following flags to display an icon in the message box:

Flag Meaning
MB_ICONEXCLAMATION,
MB_ICONWARNING
An exclamation-point icon appears in the message box.
MB_ICONINFORMATION, MB_ICONASTERISK
An icon consisting of a lowercase letter i in a circle appears in the message box.
MB_ICONQUESTION A question-mark icon appears in the message box.
MB_ICONSTOP,
MB_ICONERROR,
MB_ICONHAND
A stop-sign icon appears in the message box.


Specify one of the following flags to indicate the default button:

Flag Meaning
MB_DEFBUTTON1 The first button is the default button. MB_DEFBUTTON1 is the default unless MB_DEFBUTTON2, MB_DEFBUTTON3, or MB_DEFBUTTON4 is specified.
MB_DEFBUTTON2 The second button is the default button.
MB_DEFBUTTON3 The third button is the default button.
MB_DEFBUTTON4 The fourth button is the default button.


Specify one of the following flags to indicate the modality of the dialog box:

Flag Meaning
MB_APPLMODAL The user must respond to the message box before continuing work in the window identified by the hWnd parameter. However, the user can move to the windows of other applications and work in those windows. Depending on the hierarchy of windows in the application, the user may be able to move to other windows within the application. All child windows of the parent of the message box are automatically disabled, but popup windows are not.MB_APPLMODAL is the default if neither MB_SYSTEMMODAL nor MB_TASKMODAL is specified.
MB_SYSTEMMODAL Same as MB_APPLMODAL except that the message box has the WS_EX_TOPMOST style. Use system-modal message boxes to notify the user of serious, potentially damaging errors that require immediate attention (for example, running out of memory). This flag has no effect on the user's ability to interact with windows other than those associated with hWnd.
MB_TASKMODAL Same as MB_APPLMODAL except that all the top-level windows belonging to the current task are disabled if the hWnd parameter is NULL. Use this flag when the calling application or library does not have a window handle available but still needs to prevent input to other windows in the current application without suspending other applications.


In addition, you can specify the following flags:

MB_DEFAULT_DESKTOP_ONLY

The desktop currently receiving input must be a default desktop; otherwise, the function fails. A default desktop is one an application runs on after the user has logged on.

MB_HELP

Adds a Help button to the message box. Choosing the Help button or pressing F1 generates a Help event.

MB_RIGHT

The text is right-justified.

MB_RTLREADING

Displays message and caption text using right-to-left reading order on Hebrew and Arabic systems.

MB_SETFOREGROUND

The message box becomes the foreground window. Internally, Windows calls the SetForegroundWindow function for the message box.

MB_TOPMOST

The message box is created with the WS_EX_TOPMOST window style.

MB_SERVICE_NOTIFICATION

Windows NT only: The caller is a service notifying the user of an event. The function displays a message box on the current active desktop, even if there is no user logged on to the computer.
If this flag is set, the hWnd parameter must be NULL. This is so the message box can appear on a desktop other than the desktop corresponding to the hWnd.
For Windows NT version 4.0, the value of MB_SERVICE_NOTIFICATION has changed. See WINUSER.H for the old and new values. Windows NT 4.0 provides backward compatibility for pre-existing services by mapping the old value to the new value in the implementation of MessageBox and MessageBoxEx. This mapping is only done for executables that have a version number, as set by the linker, less than 4.0.

To build a service that uses MB_SERVICE_NOTIFICATION, and can run on both Windows NT 3.x and Windows NT 4.0, you have two choices.

1. At link-time, specify a version number less than 4.0; or
2. At link-time, specify version 4.0. At run-time, use the GetVersionEx function to check the system version. Then when running on Windows NT 3.x, use MB_SERVICE_NOTIFICATION_NT3X; and on Windows NT 4.0, use MB_SERVICE_NOTIFICATION.


MB_SERVICE_NOTIFICATION_NT3X

Windows NT only: This value corresponds to the value defined for MB_SERVICE_NOTIFICATION for Windows NT version 3.51.



Return Values

The return value is zero if there is not enough memory to create the message box.
If the function succeeds, the return value is one of the following menu-item values returned by the dialog box:

Value Meaning
IDABORT Abort button was selected.
IDCANCEL Cancel button was selected.
IDIGNORE Ignore button was selected.
IDNO No button was selected.
IDOK OK button was selected.
IDRETRY Retry button was selected.
IDYES Yes button was selected.


If a message box has a Cancel button, the function returns the IDCANCEL value if either the ESC key is pressed or the Cancel button is selected. If the message box has no Cancel button, pressing ESC has no effect.

Remarks

When you use a system-modal message box to indicate that the system is low on memory, the strings pointed to by the lpText and lpCaption parameters should not be taken from a resource file, because an attempt to load the resource may fail.
When an application calls MessageBox and specifies the MB_ICONHAND and MB_SYSTEMMODAL flags for the uType parameter, Windows displays the resulting message box regardless of available memory. When these flags are specified, Windows limits the length of the message box text to three lines. Windows does not automatically break the lines to fit in the message box, however, so the message string must contain carriage returns to break the lines at the appropriate places.

If you create a message box while a dialog box is present, use the handle of the dialog box as the hWnd parameter. The hWnd
parameter should not identify a child window, such as a control in a dialog box.
Windows 95: The system can support a maximum of 16,364 window handles.
 
我是一个菜鸟,有没有简单一点的?谢谢!
 
MessageBox(form1.WindowHandle,'1pText','1pCaption',MB_YESNO+MB_ICONQUESTION+DefaultButton2)
 
用MessageBox,注意它是Application的一个方法
 
1.用MessageBox()比较好。
2.如果非要用MessageDlg(),可以这样:
procedure TForm1.Button1Click(Sender: TObject);
var
MsgDialog: TForm;
pt: TPoint;
btns: array[0..2] of TButton;
c: integer;
begin
MsgDialog := CreateMessageDialog('Hi', mtInformation, [mbYes,mbYesToAll, mbNo]);
c := MsgDialog.ControlCount;

btns[0] := TButton(MsgDialog.Controls[c-1]);
btns[1] := TButton(MsgDialog.Controls[c-2]);
btns[2] := TButton(MsgDialog.Controls[c-3]);

pt := Point(btns[0].Left,btns[0].Top);

btns[0].SetBounds(btns[1].Left, btns[1].Top, btns[0].Width,btns[0].Height);
btns[1].SetBounds(btns[2].Left, btns[2].Top, btns[1].Width,btns[1].Height);
btns[2].SetBounds(pt.X, pt.Y, btns[2].Width, btns[2].Height);
btns[0].Caption := '我是第一个';
btns[1].Caption := '我是第二个';
btns[2].Caption := '我是第三个';
MsgDialog.Caption := '我是标题';
MsgDialog.ShowModal;
end;
 
用MessageBox
 
如果你非要汉化MessageDlg的话,就去修改consts.pas,它存放Dephi的一些常量
在consts.pas中查找以下内容:
"SMsgDlgWarning"

SMsgDlgWarning = 'Warning';
SMsgDlgError = 'Error';
SMsgDlgInformation = 'Information';
SMsgDlgConfirm = 'Confirm';
SMsgDlgYes = '&Yes';
SMsgDlgNo = '&No';
SMsgDlgOK = 'OK';
SMsgDlgCancel = 'Cancel';
SMsgDlgHelp = '&Help';
SMsgDlgHelpNone = 'No help available';
SMsgDlgHelpHelp = 'Help';
SMsgDlgAbort = '&Abort';
SMsgDlgRetry = '&Retry';
SMsgDlgIgnore = '&Ignore';
SMsgDlgAll = '&All';
SMsgDlgNoToAll = 'N&o to All';
SMsgDlgYesToAll = 'Yes to &All';
改成
SMsgDlgWarning = '警告';
SMsgDlgError = '错误';
SMsgDlgInformation = '提示';
SMsgDlgConfirm = '确认';
SMsgDlgYes = '是(&Y)';
SMsgDlgNo = '不(&N)';
SMsgDlgOK = '确定';
SMsgDlgCancel = '取消';
SMsgDlgHelp = '帮助(&H)';
SMsgDlgHelpNone = '没有该帮助信息';
SMsgDlgHelpHelp = '帮助';
SMsgDlgAbort = '放弃(&A)';
SMsgDlgRetry = '重试(&R)';
SMsgDlgIgnore = '忽略(&I)';
SMsgDlgAll = '全部(&A)';
SMsgDlgNoToAll = '全都不(&O)';
SMsgDlgYesToAll = '全都是(&A)';
然后重新编译Consts.pas,把Consts.duc 拷到delphi的lib子目录下,就完事了。


Delphi中,定义系统资源字符串常量的源文件(.pas)都放在了Delphi安装目录的/Source目录下,并按其类别分布在几个子目录中,而其编译后的单元文件(.dcu)则全部放在Delphi安装目录的/Lib目录中,系统编译链接应用程序时会自动从这些单元文件中找到所需的字符串常量将其替换。因此,我们只要将/Source目录下的源文件中的提示信息字符串汉化后,编译成单元文件,再将该单元文件拷贝到/Lib目录中,覆盖原先的单元文件就可以达到汉化的目的。我们需要汉化某条提示信息时,找到包含该提示信息的源文件,将该提示信息字符串汉化就可以了。
  首先,在Delphi中建立一个新的项目,该项目中会自动包含一个名为Unit1的窗体文件,将其从项目中移去。然后从菜单中选择Project→Options,在弹出的Project Options对话框中,选择Directories/Conditionals标签,其中的Unit output directory文本框可以指定项目编译后单元文件的存放路径,在这里填上/Lib目录的完整路径,在笔者的系统中该路径为C:/Program Files/Borland/Delphi5/lib。最后将该项目文件存盘,并取名为HanHua.dpr。至此,这个用于汉化的项目文件就建立起来了,那么,怎么利用这个项目文件开始工作呢?下面,我就用一个实例来说明其使用的方法。
  在用Delphi编制某应用软件时,软件编译后,在运行时出现提示信息“Delete record?”,其汉化的步骤如下:
  1.在Delphi中打开项目文件HanHua.dpr。
  2.选择菜单Search→Find in Files,在弹出的对话框中,在Text to find:文本框里输入要查找的文本,在这里我们输入“Delete record?”,然后在Where组件框里选中Search in directories,并在Search Directory Options中输入/Source目录的完整路径,在我的系统中该路径为C:/Program Files/Borland/Delphi5/Source,最后别忘了将Include subdirectories选中,单击“OK”按钮开始查找。
  3.在代码编辑器底部会新增一个窗口,显示出所有包含你所要查找的文本的文件,在这个例子中,只找到一个文件,显示“C:/Program Files/Borland/Delphi5/Source/Vcl/dbconsts.pas(100):SDeleteRecordQuestion='Delete record?';”,双击可以打开该文件,系统会自动将光标移到“Delete record?”前面,将其改为“删除记录?”。
  4.选择菜单Project→Add to Project,在弹出的对话框中,系统会自动将当前打开的文件(这里为consts.pas.db 和consts.pas)作为默认打开文件,可以直接单击“打开”按钮将其添加到项目中。
  5.编译项目HanHua.dpr。
  最后,我们只要把前面的应用软件重新编译一次,其提示信息“Delete record?”就变成了“删除记录?”。怎么样,用这种方法进行汉化是不是又快又准?不过,因为我们是直接在系统目录中对源文件进行修改,有两个方面还存在一点问题,其一,如果在修改过程中出现错误,就找不到可以参照的源文件了;其二,重装Delphi后,所有的汉化结果就全部没有了。所以我们还需要对上面的汉化过程作一点改进,其实,我们只要在上面第3步和第4步之间增加下面这个步骤就可以了:
  选择菜单File→Save As,在弹出的对话框中,将文件换名存盘到别的目录中。
  在增加上面这个步骤后,前面提到的两个问题都得到了解决:系统源文件没有被修改,修改后的文件都放在了我们自己的目录中;重装Delphi后,只要重新编译项目HanHua.dpr就可以将以前汉化过的系统提示信息重新汉化。
 
接受答案了.
 
后退
顶部