diff --git a/reactos/dll/win32/oledlg/insobjdlg.c b/reactos/dll/win32/oledlg/insobjdlg.c index 8ddf22756f8..159b0020eb4 100644 --- a/reactos/dll/win32/oledlg/insobjdlg.c +++ b/reactos/dll/win32/oledlg/insobjdlg.c @@ -332,38 +332,39 @@ static void UIINSERTOBJECTDLG_SelectCreateFromFile(InsertObjectDlgInfo* pdlgInfo */ static BOOL UIINSERTOBJECTDLG_PopulateObjectTypes(InsertObjectDlgInfo* pdlgInfo) { + static const WCHAR szClsid[] = {'C','L','S','I','D',0}; + static const WCHAR szInsertable[] = {'I','n','s','e','r','t','a','b','l','e',0}; + static const WCHAR szNotInsertable[] = {'N','o','t','I','n','s','e','r','t','a','b','l','e',0}; DWORD i; LONG len; HKEY hkclsids; HKEY hkey; CLSID clsid; HRESULT ret; - CHAR szclsid[128]; - CHAR keydesc[MAX_PATH]; - CHAR keyname[MAX_PATH]; - WCHAR wszclsid[128]; + WCHAR keydesc[MAX_PATH]; + WCHAR keyname[MAX_PATH]; + WCHAR szclsid[128]; DWORD index = 0; UIINSERTOBJECTDLG_FreeObjectTypes(pdlgInfo); - RegOpenKeyExA(HKEY_CLASSES_ROOT, "CLSID", 0, KEY_READ, &hkclsids); + RegOpenKeyExW(HKEY_CLASSES_ROOT, szClsid, 0, KEY_READ, &hkclsids); - while (ERROR_SUCCESS == (ret = RegEnumKeyA(hkclsids, index, szclsid, MAX_PATH))) + while (ERROR_SUCCESS == (ret = RegEnumKeyW(hkclsids, index, szclsid, sizeof(szclsid)/sizeof(szclsid[0])))) { index++; - RegOpenKeyExA(hkclsids, szclsid, 0, KEY_READ, &hkey); + RegOpenKeyExW(hkclsids, szclsid, 0, KEY_READ, &hkey); - len = MAX_PATH; - if (ERROR_SUCCESS != RegQueryValueA(hkey, "Insertable", keyname, &len)) + len = sizeof(keyname); + if (ERROR_SUCCESS != RegQueryValueW(hkey, szInsertable, keyname, &len)) continue; - len = MAX_PATH; - if (ERROR_SUCCESS == RegQueryValueA(hkey, "NotInsertable", keyname, &len)) + len = sizeof(keyname); + if (ERROR_SUCCESS == RegQueryValueW(hkey, szNotInsertable, keyname, &len)) continue; - RtlMultiByteToUnicodeN(wszclsid, MAX_PATH, NULL, szclsid, MAX_PATH); - CLSIDFromString(wszclsid, &clsid); + CLSIDFromString(szclsid, &clsid); for (i = 0; i < pdlgInfo->lpOleUIInsertObject->cClsidExclude; i++) if (IsEqualGUID(&pdlgInfo->lpOleUIInsertObject->lpClsidExclude[i], &clsid)) @@ -372,14 +373,14 @@ static BOOL UIINSERTOBJECTDLG_PopulateObjectTypes(InsertObjectDlgInfo* pdlgInfo) if (i < pdlgInfo->lpOleUIInsertObject->cClsidExclude) continue; - len = MAX_PATH; - if (ERROR_SUCCESS == RegQueryValueA(hkey, NULL, keydesc, &len)) + len = sizeof(keydesc); + if (ERROR_SUCCESS == RegQueryValueW(hkey, NULL, keydesc, &len)) { CLSID* lpclsid = HeapAlloc(GetProcessHeap(), 0, sizeof(CLSID)); memcpy(lpclsid, &clsid, sizeof(CLSID)); - len = SendMessageA(pdlgInfo->hwndObjTypeLB, LB_ADDSTRING, 0, (LPARAM)keydesc); - SendMessageA(pdlgInfo->hwndObjTypeLB, LB_SETITEMDATA, (WPARAM)len, (LPARAM)lpclsid); + len = SendMessageW(pdlgInfo->hwndObjTypeLB, LB_ADDSTRING, 0, (LPARAM)keydesc); + SendMessageW(pdlgInfo->hwndObjTypeLB, LB_SETITEMDATA, (WPARAM)len, (LPARAM)lpclsid); } } @@ -471,17 +472,15 @@ static BOOL UIINSERTOBJECTDLG_OnOpen(InsertObjectDlgInfo* pdlgInfo) } else if (BST_CHECKED == SendMessageA(pdlgInfo->hwndCreateFromFileCB, BM_GETCHECK, 0, 0)) { - char fname[MAX_PATH]; - if (pdlgInfo->lpOleUIInsertObject->lpszFile) { HRESULT hres; WCHAR wcsFile[MAX_PATH]; - SendMessageA(pdlgInfo->hwndFileTB, WM_GETTEXT, (WPARAM)MAX_PATH, (LPARAM)fname); - lstrcpynA(pdlgInfo->lpOleUIInsertObject->lpszFile, fname, pdlgInfo->lpOleUIInsertObject->cchFile); + if (SendMessageW(pdlgInfo->hwndFileTB, WM_GETTEXT, MAX_PATH, (LPARAM)wcsFile)) + WideCharToMultiByte(CP_ACP, 0, wcsFile, -1, + pdlgInfo->lpOleUIInsertObject->lpszFile, pdlgInfo->lpOleUIInsertObject->cchFile, NULL, NULL); - RtlMultiByteToUnicodeN(wcsFile, MAX_PATH, NULL, fname, MAX_PATH); if (ERROR_SUCCESS == (hres = GetClassFile(wcsFile, &pdlgInfo->lpOleUIInsertObject->clsid))) { if (pdlgInfo->lpOleUIInsertObject->dwFlags & IOF_CREATEFILEOBJECT) diff --git a/reactos/dll/win32/oledlg/oledlg.rbuild b/reactos/dll/win32/oledlg/oledlg.rbuild index 17f032b07db..53fd2511cc9 100644 --- a/reactos/dll/win32/oledlg/oledlg.rbuild +++ b/reactos/dll/win32/oledlg/oledlg.rbuild @@ -1,5 +1,6 @@ + . @@ -20,3 +21,4 @@ rsrc.rc oledlg.spec + diff --git a/reactos/dll/win32/oledlg/oledlg_Ru.rc b/reactos/dll/win32/oledlg/oledlg_Ru.rc new file mode 100644 index 00000000000..10453ef97eb --- /dev/null +++ b/reactos/dll/win32/oledlg/oledlg_Ru.rc @@ -0,0 +1,95 @@ +/* + * Copyright 2007 Vitaly Lipatov for Etersoft + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA + */ + +LANGUAGE LANG_RUSSIAN, SUBLANG_DEFAULT + +UIINSERTOBJECT DIALOG DISCARDABLE 0, 0, 294, 151 +STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU +CAPTION "Вставить объект" +FONT 8, "MS Shell Dlg" +BEGIN + LISTBOX IDC_OBJTYPELIST,82,19,131,66,LBS_SORT | + LBS_NOINTEGRALHEIGHT | WS_VISIBLE | WS_VSCROLL | + WS_TABSTOP + LTEXT "Тип объекта:",IDC_OBJTYPELBL,82,7,53,8,WS_VISIBLE + DEFPUSHBUTTON "OK",IDOK,221,7,66,14 + PUSHBUTTON "Отмена",IDCANCEL,221,24,66,14 + GROUPBOX "Результат",IDC_RESULT,7,103,208,41 + CONTROL "Создать новый",IDC_CREATENEW,"Button",BS_AUTORADIOBUTTON | + WS_GROUP,7,20,62,10 + CONTROL "Создать элемент управления",IDC_CREATECONTROL,"Button", + BS_AUTORADIOBUTTON | NOT WS_VISIBLE,7,54,62,10 + CONTROL "Создать из файла",IDC_CREATEFROMFILE,"Button", + BS_AUTORADIOBUTTON,7,37,67,10 + LTEXT "",IDC_RESULTDESC,49,112,159,23 + PUSHBUTTON "&Добавить элемент управления...",IDC_ADDCONTROL,81,88,63,14,NOT WS_VISIBLE + CONTROL "Display As Icon",IDC_ASICON,"Button",BS_AUTOCHECKBOX | + WS_TABSTOP | NOT WS_VISIBLE,223,58,64,10 + PUSHBUTTON "Выбрать...",IDC_BROWSE,83,53,50,14,NOT WS_VISIBLE + LTEXT "Файл:",IDC_FILELBL,83,27,20,8, NOT WS_VISIBLE + EDITTEXT IDC_FILE,83,37,132,13,ES_AUTOHSCROLL | NOT WS_VISIBLE +END + +STRINGTABLE DISCARDABLE +{ + IDS_RESULTOBJDESC "Добавление нового объекта %s в документ" + IDS_RESULTFILEOBJDESC "Добавление объекта из файла в документ. Работать с объектом можно будет в создавшей его программе." + IDS_BROWSE "Просмотр" + IDS_NOTOLEMOD "Файл не является корректным модулем OLE. Невозможно зарегистрировать элемент управления OLE." + IDS_NOTOLEMODCAPTION "Добавить элемент управления" +} + +IDD_PASTESPECIAL4 DIALOG DISCARDABLE 3, 15, 293, 140 +STYLE DS_MODALFRAME | DS_SETFONT | WS_POPUP | WS_CAPTION | WS_SYSMENU +CAPTION "Специальная вставка" +FONT 8, "MS Shell Dlg" +BEGIN + LTEXT "Источник:", -1, 6, 9, 30, 8, WS_VISIBLE | WS_GROUP + CONTROL "&Вставить", IDC_PS_PASTE, "Button", BS_AUTORADIOBUTTON | WS_TABSTOP | WS_GROUP | WS_VISIBLE, + 6, 38, 55, 10 + CONTROL "Вставить &Ссылку", IDC_PS_PASTELINK, "Button", BS_AUTORADIOBUTTON | WS_VISIBLE, + 6, 63, 55, 10 + LTEXT "&Как:", -1, 65, 25, 16, 8, WS_VISIBLE | WS_GROUP + LISTBOX IDC_PS_PASTELIST, 65, 36, 153, 57, LBS_NOTIFY | LBS_USETABSTOPS | WS_VSCROLL | WS_BORDER | NOT WS_VISIBLE + LISTBOX IDC_PS_PASTELINKLIST, 65, 36, 153, 57, LBS_NOTIFY | LBS_USETABSTOPS | WS_VSCROLL | WS_BORDER | NOT WS_VISIBLE + LISTBOX IDC_PS_DISPLAYLIST, 65, 36, 153, 57, LBS_NOTIFY | LBS_USETABSTOPS | WS_VSCROLL | WS_BORDER | WS_VISIBLE + CONTROL "OK", IDOK, "Button", BS_DEFPUSHBUTTON | WS_TABSTOP | WS_GROUP | WS_VISIBLE, 224, 6, 66, 14 + CONTROL "Отмена", IDCANCEL, "Button", BS_PUSHBUTTON | WS_TABSTOP | WS_VISIBLE, 224, 23, 66, 14 + CONTROL "С&правка", IDC_OLEUIHELP, "Button", BS_PUSHBUTTON | WS_TABSTOP | WS_VISIBLE, 224, 42, 66, 14 + CONTROL "&Показывать как значок", IDC_PS_DISPLAYASICON, "Button", BS_AUTOCHECKBOX | WS_TABSTOP | WS_VISIBLE, 224, 59, 66, 14 + CONTROL "", IDC_PS_ICONDISPLAY, "Static", SS_ICON | WS_VISIBLE, 224, 75, 66, 44 + CONTROL "Изменить &значок...", IDC_PS_CHANGEICON, "Button", BS_PUSHBUTTON | WS_TABSTOP | WS_VISIBLE, 224, 123, 66, 14 + CONTROL "", IDC_PS_RESULTIMAGE, "Static", SS_ICON | WS_VISIBLE, 8, 101, 42, 34 + CONTROL "<< result text goes here >>", IDC_PS_RESULTTEXT, "Static", SS_NOPREFIX | WS_VISIBLE, 54, 100, 159, 35 + CONTROL "Результат", -1, "Button", BS_GROUPBOX | WS_GROUP | WS_VISIBLE, 6, 90, 212, 48 + CONTROL "", IDC_PS_SOURCETEXT, "Edit", ES_READONLY | ES_AUTOHSCROLL | WS_VISIBLE, 37, 9, 180, 8 +END + +STRINGTABLE DISCARDABLE +{ + IDS_PS_PASTE_DATA "Вставка содержимого буфера обмена в документ как %s." + IDS_PS_PASTE_OBJECT "Вставка содержимого буфера обмена в документ так, что его можно активировать, используя %s." + IDS_PS_PASTE_OBJECT_AS_ICON "Вставка содержимого буфера обмена в документ так, что его можно активировать, используя %s. Он будет отображаться в виде значка." + IDS_PS_PASTE_LINK_DATA "Вставка содержимого буфера обмена в документ как %s. Данные будут связаны с исходным файлом, так что изменения в нём будут отражаться в документе." + IDS_PS_PASTE_LINK_OBJECT "Вставка изображения из буфера обмена в документ. Избражение будет связано с исходным файлом, так что изменения в нём будут отражаться в документе." + IDS_PS_PASTE_LINK_OBJECT_AS_ICON "Вставка ссылки, которая будет указывать на расположение содержимого буфера обмена. Ссылка будет связана с исходным файлом, так что изменения в нём будут отражаться в документе." + IDS_PS_NON_OLE "Вставка содержимое буфера обмена в документ." + IDS_PS_UNKNOWN_TYPE "Неизвестный тип" + IDS_PS_UNKNOWN_SRC "Неизвестный источник" + IDS_PS_UNKNOWN_APP "программа, которая его создала" +} diff --git a/reactos/dll/win32/oledlg/pastespl.c b/reactos/dll/win32/oledlg/pastespl.c index a3d399cc79c..68bad0630e0 100644 --- a/reactos/dll/win32/oledlg/pastespl.c +++ b/reactos/dll/win32/oledlg/pastespl.c @@ -434,7 +434,7 @@ static void update_result_text(HWND hdlg, const ps_struct_t *ps_struct) LoadStringW(OLEDLG_hInstance, res_id, resource_txt, sizeof(resource_txt)/sizeof(WCHAR)); if((ptr = strstrW(resource_txt, percent_s))) { - /* FIXME handle %s in ResultText. Sub appname if IDS_PS_PASTE_OBJECT{_AS_ICON}. Else sub appropiate type name */ + /* FIXME handle %s in ResultText. Sub appname if IDS_PS_PASTE_OBJECT{_AS_ICON}. Else sub appropriate type name */ size_t result_txt_len = strlenW(pent->lpstrResultText); ptrdiff_t offs = (char*)ptr - (char*)resource_txt; result_txt = HeapAlloc(GetProcessHeap(), 0, (strlenW(resource_txt) + result_txt_len - 1) * sizeof(WCHAR)); diff --git a/reactos/dll/win32/oledlg/rsrc.rc b/reactos/dll/win32/oledlg/rsrc.rc index 194e50b6dc5..ae1187b8a4f 100644 --- a/reactos/dll/win32/oledlg/rsrc.rc +++ b/reactos/dll/win32/oledlg/rsrc.rc @@ -46,6 +46,7 @@ #include "oledlg_No.rc" #include "oledlg_Pl.rc" #include "oledlg_Pt.rc" +#include "oledlg_Ru.rc" #include "oledlg_Sv.rc" #include "oledlg_Tr.rc" #include "oledlg_Uk.rc"