Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2005.08.07;
Скачать: CL | DM;

Вниз

Стандартные диалоги   Найти похожие ветки 

 
Viktop   (2005-05-01 08:54) [0]

Если я в своей программе использую диалоговое окно для открытия файла, то в зависимости от языка Windows надписи будут отображаться на соответствующем языке (если я ничего не перепутал smile.gif ). Откуда берётся эта информация?
Мне это нужно для создания многоязычного компонента


 
Ученик   (2005-05-01 11:21) [1]

Было в конференции по WinAPI

The CDM_SETCONTROLTEXT message sets the text for the specified control in an Explorer-style Open or Save As dialog box. The dialog box must have been created with the OFN_EXPLORER flag; otherwise, the message fails.


 
Ярослав   (2005-05-01 16:48) [2]

Вот код программы:
OpenDialog1.Title:="Открыть файл";
     if OpenDialog1.Execute then
     begin
     RichEdit1.Lines.LoadFromFile(OpenDialog1.FileName);
     end;


 
Ярослав   (2005-05-01 16:50) [3]

Или ещё один код уже для открытия конкретного файла:
begin
OpenDialog1.Title:="Открыть файл";
if OpenDialog1.Execute then
ShellExecute(Handle,"open",PChar(OpenDialog1.FileName),nil,nil,SW_Restore);
end;


 
Viktop   (2005-05-01 17:32) [4]

to Ярослав
Надо чтобы в зависимости от языка винды отображалось, а не писать самому на все языки.


 
Floppy ©   (2005-05-01 17:51) [5]

Страно, что для Viktop   (01.05.05 08:54), необходимо писать на все языки. Тебе предложили решения только для русского языка. Если нужны еще какие-либо другие языки, уточняй вопрос


 
Viktop   (2005-05-02 13:19) [6]

to Floppy
Я же писал, что мне это надо для создания многоязычного компонента.  В компоненте есть аналоги OpenDialog. Вот эти то окна и надо, чтобы они автоматом из винды брались, как OpenDialog


 
alpet ©   (2005-05-03 12:02) [7]

Причем здесь WinAPI ? Интернациональные строки для CommDlg32 диалогов получать стандартными средствами нельзя, покрайней мере это не документировано в MSDN.


 
Viktop   (2005-05-03 13:55) [8]

to aplet
Я создал эту тему в Основной ветке. А её сюда переместили


 
alpet ©   (2005-05-03 14:14) [9]

В commdlg32 (WinAPI) есть такие функции GetOpenFileName и GetSaveFileName которые и показывают диалоги для выбора файла. В качестве обертки к ним в Delphi есть компоненты TSaveDialog, TOpenDialog. В общем вам не мешает посмотреть справку к этим функциям. Вот к примеру о элементе структуры которая передается как параметр GetOpenFileName:

lpstrTitle
Pointer to a string to be placed in the title bar of the dialog box. If this member is NULL, the system uses the default title (that is, Save As or Open).

Надо понимать что заголовок по умолчанию выводится на языке принятым в системе по умолчанию.


 
Viktop   (2005-05-05 07:30) [10]

to aplet
А мне не только заголовок надо изменять, но и ещё такие строки как File type


 
alpet ©   (2005-05-05 10:41) [11]

Я посмотрел ресурсы commdlg32.dll с помощью редактора ресурсов Borland C  ++5.0 - диалог #1552 имеет все строки переведнными на текущий язык.

Вот часть .RC файла:

1552 DIALOGEX 0, 0, 370, 237
EXSTYLE WS_EX_DLGMODALFRAME | WS_EX_CONTEXTHELP
STYLE DS_MODALFRAME | DS_3DLOOK | DS_CONTEXTHELP | WS_POPUP | WS_VISIBLE | WS_CLIPCHILDREN | WS_CAPTION | WS_SYSMENU
CAPTION "Открыть"
FONT 8, "MS Shell Dlg"
{
CONTROL "&Папка:", 1091L, "STATIC", SS_LEFT | SS_NOTIFY | WS_CHILD | WS_VISIBLE | WS_GROUP, 4, 7, 57, 8, WS_EX_RIGHT
CONTROL "", 1137L, "COMBOBOX", CBS_DROPDOWNLIST | CBS_OWNERDRAWFIXED | CBS_HASSTRINGS | WS_CHILD | WS_VISIBLE | WS_VSCROLL | WS_TABSTOP, 66, 4, 174, 300
CONTROL "", 1088L, "STATIC", SS_LEFT | WS_CHILD | NOT WS_VISIBLE, 248, 4, 80, 14
CONTROL "", 1184L, "ToolbarWindow32", TBSTYLE_GROUP | TBSTYLE_TOOLTIPS | TBSTYLE_WRAPABLE | CCS_NOPARENTALIGN | CCS_NODIVIDER | 0x2800L | WS_CHILD | WS_VISIBLE | WS_TABSTOP, 4, 22, 58, 208, WS_EX_CLIENTEDGE
CONTROL "", 1120L, "LISTBOX", LBS_NOTIFY | LBS_SORT | LBS_NOINTEGRALHEIGHT | LBS_MULTICOLUMN | WS_CHILD | NOT WS_VISIBLE | WS_BORDER | WS_HSCROLL, 66, 22, 300, 156
CONTROL "&Имя файла:", 1090L, "STATIC", SS_LEFT | SS_NOTIFY | WS_CHILD | WS_VISIBLE | WS_GROUP, 67, 187, 58, 8
CONTROL "", 1152L, "EDIT", ES_LEFT | ES_AUTOHSCROLL | WS_CHILD | WS_VISIBLE | WS_BORDER | WS_TABSTOP, 130, 184, 164, 12
CONTROL "", 1148L, "ComboBoxEx32", 0x42L | WS_CHILD | WS_VISIBLE | WS_VSCROLL | WS_TABSTOP, 130, 184, 164, 150
CONTROL "&Тип файлов:", 1089L, "STATIC", SS_LEFT | SS_NOTIFY | WS_CHILD | WS_VISIBLE | WS_GROUP, 67, 203, 58, 8
CONTROL "", 1136L, "COMBOBOX", CBS_DROPDOWNLIST | WS_CHILD | WS_VISIBLE | WS_VSCROLL | WS_TABSTOP, 130, 201, 164, 100
CONTROL "Только &чтение", 1040L, "BUTTON", BS_AUTOCHECKBOX | WS_CHILD | WS_VISIBLE | WS_TABSTOP, 130, 217, 160, 8
CONTROL "&Открыть", 1L, "BUTTON", BS_DEFPUSHBUTTON | WS_CHILD | WS_VISIBLE | WS_GROUP | WS_TABSTOP, 316, 184, 50, 14
CONTROL "Отмена", 2L, "BUTTON", BS_PUSHBUTTON | WS_CHILD | WS_VISIBLE | WS_GROUP | WS_TABSTOP, 316, 200, 50, 14
CONTROL "&Справка", 1038L, "BUTTON", BS_PUSHBUTTON | WS_CHILD | WS_VISIBLE | WS_GROUP | WS_TABSTOP, 316, 218, 50, 14
}


Так-что надписи диалога зависят от локализации commdlg32.dll


 
SergeVG   (2005-05-05 15:01) [12]

А кто-то знает, как можно вытягивать такие строки из системы?


 
alpet ©   (2005-05-05 16:26) [13]

SergeVG   (05.05.05 15:01) [12]
>
А кто-то знает, как можно вытягивать такие строки из системы?


Это просто - загружать ресурсы из .dll в которой они находятся. Возможно от версии к версии Windows они могут изменятся. Других путей пока не найдено.


 
SergeVG   (2005-05-24 15:51) [14]

Пишу :

 s := GetSystemDir + "\Commdlg.dll";
 hLib := LoadLibrary(PChar(s));

Вызываю это и система выдает :
присоединенное к системе устройство не работает :(
Что-то не так с этой Commdlg.dll?
Может ее нужно открывать как-то иначе?


 
alpet ©   (2005-05-24 16:49) [15]

Эта библиотека 16-битная, загружай comdlg32.dll. Путь можешь не указывать, система сама найдет ее:
hLib := LoadLibrary ("comdlg32.dll");


 
SergeVG   (2005-06-08 16:02) [16]

а если нужно именно commdlg.dll?


 
alpet ©   (2005-06-08 16:09) [17]

Тебе понадобится полная версия, которую можно найти в дистрибутиве Win98 (у нее инсталлер 16-битный). Но загрузить в 32-битный процесс ее не получится, так-что и программу придется писать на Delphi 1.0 :)


 
SergeVG   (2005-06-10 11:39) [18]

Но система ведь эту commdlg.dll юзает как-то...
Ну ладна, надо самому покопаться, может на MSDN что-то найду


 
alpet ©   (2005-06-10 12:31) [19]

SergeVG   (10.06.05 11:39) [18]
В этой библиотеке в разделе экспорта ничего нет, вообще эта библиотека наверное существует только для поддержки ресурсов общих диалогов для 16-битных приложений.
Сначала определись что тебе вообще нужно от нее.



Страницы: 1 вся ветка

Текущий архив: 2005.08.07;
Скачать: CL | DM;

Наверх




Память: 0.51 MB
Время: 0.059 c
1-1121944216
Profik
2005-07-21 15:10
2005.08.07
Обработка нажатия стандартной кнопки Свернуть


4-1118294039
ORMADA
2005-06-09 09:13
2005.08.07
Рисование Bitmap на WinApi


14-1121716018
KOVKA_A
2005-07-18 23:46
2005.08.07
Я знаю как отдохнуть!


5-1092299241
stud
2004-08-12 12:27
2005.08.07
каким образом выполнить метод компанента?


4-1116915457
m52
2005-05-24 10:17
2005.08.07
Запуск программы как службы. Очень нужна помощь.