Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Заголовок сообщения на языке по умолчанию ОСи [D7, WinXP]


FreeAdvisor ©   (2006-02-01 13:17:00) 

Столкнувшись с необходимостью поддержки неск. языков в приложении, решил кнопки и заголовок сообщения выводить на языке ОС, выбранном по умолчанию.
MessageBox для этого прекрасно подходит, однако требует указания задголовка. MessageDlg этого не требует, но в его реализацию "вшиты" английские надписи.

Я вижу два решения проблемы:
 • узнать как получить стандартные строки Винды типа 'Confirm', 'Information', '&Retry' и т.п.
 • хранить собственные диалоговые окна в виде TForm, а на них TButton от 1 до 4 и TLabel. Строковые ресурсы в этом случае будут содержаться в файлах перевода. Частный случай метода бульдозера - крайне нежелателен :(

Прошу Вас открыть мне виды на прочие пути или дать совет в выборе одного из этих двух.

PS: развивая первый путь дошел до функции FormatMessage (возвращает расшифровку по коду, возвращенному GetLastError), перебрал значения до 3000, утомился :) и написал сюда...


FreeAdvisor   (2006-02-03 12:53:00) [1]

Спасибо всем ответившим!

Также отдельное спасибо GuAV!

Пока все ж буду делать ч/з user32 или FormatMessage, надеясь на совместимость, блюдимую :) Microsoft`ом.

Тему, я думаю, можно закрывать.


GuAV   (2006-02-02 13:47:00) [2]


>  Как получить

var S: string; ID: Integer;
begin
 for ID := 800 to 810 do
 begin
   SetLength(S, 100);
   SetLength(S, LoadString(GetModuleHandle(user32),
     ID, PChar(S), Length(S) + 1));
   Memo1.Lines.Add(S);
 end;
end;


Расположение этих ресурсов не документировано. Не факт, однако что в других версиях windows они находятся там же. И не факт что в следующих версиях они вообще будут доступны.

Про ITE - не думаю что обзор нужен. Projects->Languages->Add дальше там всё понятно.

Про свой модуль consts
http://www.delphimaster.ru/articles/const_rus/index.html


FreeAdvisor   (2006-02-02 03:59:00) [3]

Спасибо большое, Мастера, за ответы!

2 Плохиш

> Странно, в немецкой локали выдаёт на немецком языке.

 В MessageDlg вшит язык IDE Delphi; у меня IDE - на английском

2 Игорь Шевченко

> В сторону Intergrated Translation Environment посмотреть ?

 Подскажите, пожалуйста, где дан хороший обзор этой темы.

2 GuAV

> Можно получить из ресурсов user , однако не рекомедуется
> так делать.

 Как получить и почему не рекомендуется?

> кстати, отличия между MessageBox и MessageDlg не ограничены
> этим.

 Я это знаю - пришлось покопаться, однако, имхо, здесь это излишне.


GuAV   (2006-02-01 14:46:00) [4]


>  • узнать как получить стандартные строки Винды типа
> 'Confirm', 'Information', '&Retry' и т.п.

Можно получить из ресурсов user , однако не рекомедуется так делать.


> MessageBox для этого прекрасно подходит, однако
> требует указания задголовка.

кстати, отличия между MessageBox и MessageDlg не ограничены этим.

Самый простой и прямой путь [2].

Можно скопировать модуль consts в папку со своим проектом и поменять в этом модуле константы .

Можно вызывать CreateMessageDialog напрямую, после чего заменять подписи кнопок, находя их по имени, и отобразить этот MessageDialog так же, как это делает MessageDlg.


Игорь Шевченко   (2006-02-01 14:01:00) [5]

В сторону Intergrated Translation Environment посмотреть ?


Плохиш   (2006-02-01 13:48:00) [6]


> MessageDlg этого не требует, но в его реализацию "вшиты"
> английские надписи.

Странно, в немецкой локали выдаёт на немецком языке.


Наверх

Титульная страница Поиск, карта сайта Написать письмо