[WinAPI] Как сделать так, чтобы MessageBox показывал "Да/Нет/Отмена"

yolki

на английской винде?
Может, где надо языковые ресурсы покрутить?
Интересует прежде всего в Delphi:

Application.MessageBox('Сообщение','Заголовок',MB_ICONHAND or MB_YESNOCANCEL);

сейчас показывает "Yes/No/Cancel"
На русской - "Да/Нет/Отмена"

asel75

О, кстати, я тоже не смог с этим сбороться.

0000

Для MessageDlg (не MessageBox) - http://www.delphimaster.ru/articles/const_rus/index.html
Локализация встроенных констант
Антон Тюваев aka Max Payne
Введение
Данная статья показывает, как можно перевести на русский язык строки, заголовки которых недоступны для “простого присваивания”, например заголовки окна функции MessageDlg.
Пример
Вы создали свое приложение, форму, в вашей программе все или почти все заголовки строк на русском. И наверняка вы используете такую функцию, как MessageDlg.
Рассмотрим функцию:

MessageDlg('Ошибка чтения файла!'+#13+'Продолжить?',mtWarning,[mbYes,mbNo],0);

Не знаю, как вам, но для меня «Ошибка чтения файла! Продолжить?» на фоне заголовка «Warning» и кнопок «Yes» и «No» смотрится “не по-русски”.
Реализация перевода
Delphi добрую массу строковых констант берёт из модуля Consts. Для реализации перевода соответствующего модуля необходимо сделать следующее:
Открыть через Delphi файл Consts.pas. Лучше всего это сделать так: создайте пустое приложение, в разделе uses пропишите модуль Consts и, удерживая клавишу Ctrl, кликните мышью прямо по слову Consts – откроется файл Consts.pas из папки …BORLAND\DelphiX\Source\Vcl примерно следующего содержания:

Unit Consts;
Interface
Resourcestring
SOpenFileTitle = 'Open';
SCantWriteResourceStreamError = 'Can''t write to a read-only resource stream’;

Implementation
End.

В разделе resourcestring файла Consts.pas перевести на русский язык те строки, которые вам необходимы. Можете перевести все, если хотите.
Сохраните копию Consts.pas и пустое приложение вместе в отдельной папке.
Обязательно подключите модуль Consts.pas(если вы его не подключили) к сохранённому приложению и сохраните приложение ещё раз.
Обратите внимание: приложение должно использовать модуль Consts.pas, сохранённый вами вместе с самим приложением, а не из папки …\DelphiX\Source\Vcl. Чтобы убедиться в этом, закройте страницу Consts.pas, затем, удерживая Ctrl, кликните мышью в разделе модулей по слову Consts – должен открыться файл Consts.pas непосредственно из того места, где вы его сохранили.
Запустите приложение. После того, как вы его запустили, в папке с приложением должен появиться файл Consts.dcu.
В папке с сохранённым приложением у вас помимо прочих файлов типа Unit1.pas или project1.res должны быть следующие: Consts.pas и Consts.dcu.
Если вы хотите, чтобы перевод на русский действовал только в данном приложении, то вам больше ничего делать не нужно, т.е. достаточно одного только их присутствия в папке данного приложения.
Если же вы хотите, чтобы перевод коснулся всех приложений, то:
– файл Consts.pas вам необходимо скопировать поверх уже имеющегося в папку …\BORLAND\DelphiX\Source\Vcl
– файл Consts.dcu в папку …\BORLAND\DelphiX\Lib поверх уже существующего.
Возможно, вышеперечисленный процесс можно и упростить, но так, по крайней мере, делал я. Уже переведённый мною файл Consts.pas вы можете скачать здесь.
Заключение
Если вы хотите, чтобы модули вашего производства использовались всеми приложениями Delphi, то файлы вашего модуля x.pas и x.dcu, где x – название вашего модуля, необходимо сохранить в папках:
…\BORLAND\DelphiX\Source\Vcl
…\BORLAND\DelphiX\Lib
соответственно.
То же, что и с модулем Consts, можно выполнять и с другими модулями. Вот, собственно и всё. В результате вы получите переведённый на русский язык ряд диалоговых заголовков, предупреждений и кнопок, генерируемых самим Delphi.

yolki

ап. нужно для MessageBox

kokoc88

Эта штука зашита в WinAPI, и текст на ней зависит от локализации винды. Простым способом его изменить нельзя, если только Дельфи свой диалог не делает.

stm6005937

можно подвесить хук на создание окна и по предопределенным айдишникам кнопок поменять им текст, но это изврат можешь посмотреть ф-ию SetLocaleInfo может она поможет.. я такой фигней не маялся до этого..
Оставить комментарий
Имя или ник:
Комментарий: