//имя ActiveX это XPrintMap
void __fastcall TForm2::sBitBtn1Click(TObject *Sender)
{
String FName;
if (sSaveDialog1->Execute())
{
FName = sSaveDialog1->FileName;
XPrintMap->ExportMap(WideString(FName), miFormatJPEG); //метод требует wchar_t *
}
}
SaveDialog
Код:
Если в пути сохранения присутствуют папки с русскими названиями типа: "Рабочий стол" или "Лена" и т.п. то в результате на диске появляется файл *.jpeg нулевого размера, т.е. пустой. Если путь весь на английском типа: C:\\temp\\123.jpeg то все сохраняется, как положено. Как можно обойти проблему и русскими названиями в пути сохранения, ведь не известно какой путь выберет пользователь и если там будут папки с русскими названиями, то у него ничего не сохраниться.
Код:
//имя ActiveX это XPrintMap
void __fastcall TForm2::sBitBtn1Click(TObject *Sender)
{
String FName;
if (sSaveDialog1->Execute())
{
FName = sSaveDialog1->FileName;
XPrintMap->ExportMap(WideString(FName), miFormatJPEG); //метод требует wchar_t *
}
}
void __fastcall TForm2::sBitBtn1Click(TObject *Sender)
{
String FName;
if (sSaveDialog1->Execute())
{
FName = sSaveDialog1->FileName;
XPrintMap->ExportMap(WideString(FName), miFormatJPEG); //метод требует wchar_t *
}
}
Если в пути сохранения присутствуют папки с русскими названиями типа: "Рабочий стол" или "Лена" и т.п. то в результате на диске появляется файл *.jpeg нулевого размера, т.е. пустой. Если путь весь на английском типа: C:\\temp\\123.jpeg то все сохраняется, как положено. Как можно обойти проблему и русскими названиями в пути сохранения, ведь не известно какой путь выберет пользователь и если там будут папки с русскими названиями, то у него ничего не сохраниться.[/QUOTE]
Не уверен, но посмотри в сторону URLCanonicalize.
Что-то не могу найти описание этой ф-ции. :(
Как временный вариант сохранять сначала на диск C:, а оттуда обычным копированием в русскую папку, после чего с диска C: удалять :)
[QUOTE=lena_ki]Что-то не могу найти описание этой ф-ции. :([/QUOTE]
[FONT=Times New Roman][SIZE=3]Вот остановилась на этом варианте. Вроде работает:[/SIZE][/FONT]
Код:
AnsiString Dir = "Proba"; //для удаления предыдущего файла если пользователь задал одно и тоже имя для файла два раза
void __fastcall TForm2::sBitBtn1Click(TObject *Sender)
{
SaveDialog1->FileName = "";
if (SaveDialog1->Execute())
{
SetCurrentDir(ExtractFileDir(SaveDialog1->FileName));
if(Dir == ExtractFileName(SaveDialog1->FileName)) DeleteFile(Dir);
XPrintMap->ExportMap(WideString("tempmap.jpeg"), miFormatJPEG);
RenameFile("tempmap.jpeg", SaveDialog1->FileName);
if(FileExists("tempmap.jpeg")) DeleteFile("tempmap.jpeg");
Dir = ExtractFileName(SaveDialog1->FileName);
}
void __fastcall TForm2::sBitBtn1Click(TObject *Sender)
{
SaveDialog1->FileName = "";
if (SaveDialog1->Execute())
{
SetCurrentDir(ExtractFileDir(SaveDialog1->FileName));
if(Dir == ExtractFileName(SaveDialog1->FileName)) DeleteFile(Dir);
XPrintMap->ExportMap(WideString("tempmap.jpeg"), miFormatJPEG);
RenameFile("tempmap.jpeg", SaveDialog1->FileName);
if(FileExists("tempmap.jpeg")) DeleteFile("tempmap.jpeg");
Dir = ExtractFileName(SaveDialog1->FileName);
}
Так надежно?
Код:
XPrintMap->ExportMap(WideString(FName).c_bstr(), miFormatJPEG);
попробовать?
Код:
XPrintMap->ExportMap(WideString(FName).c_bstr(), miFormatJPEG);
попробовать?[/quote]
Пробовала.
Вот еще такой код пробывала:
WCHAR wszFileName[512];
String FName = sSaveDialog1->FileName;
MultiByteToWideChar(CP_ACP, 0, FName.c_str(), -1, wszFileName, sizeof(wszFileName)/sizeof(wszFileName[0]));
XPrintMap->ExportMap(WideString(wszFileName).c_bstr(), miFormatJPEG);
Однако его использование приводило к появлению окна CPU. :confused:
Код:
XPrintMap->ExportMap(WideString(FName).c_bstr(), miFormatJPEG);
попробовать?[/QUOTE]
У WideString есть оператор приведения к BSTR.
to Lena:
Попробуй например задать путь так:
"c:\\мои%20документы\\" // вместо пробела %20
сохраняет?
to Lena:
Попробуй например задать путь так:
"c:\\мои%20документы\\" // вместо пробела %20
сохраняет?[/quote]
Я пробовала сохранять в путях вообще без пробелов. Например С:\Лена Результирующий файk jpeg получается в таком случае размером “0”. Если использовать английские пути типа : C\Lena или C:\My Folder то получаю полностью нормальные файлы. Также имя файла должно быть на английском для успешного сохранения.
Сам компонент американский: http://extranet.mapinfo.com/products/Overview.cfm?productid=1041&productcategoryid=1
думаешь это значит, что пути надо задавать только на американском:)
Попробуй URLCanonicalize, у меня Билдера нет под рукой поэтому проверить не могу. Туда надо передать путь, выходную строку. размер строки и флаг.
Takes a URL string and converts it into canonical form.
Syntax
HRESULT UrlCanonicalize( LPCTSTR pszUrl,
LPTSTR pszCanonicalized,
LPDWORD pcchCanonicalized,
DWORD dwFlags
);
Parameters
pszUrl
[in] Null-terminated string of maximum length INTERNET_MAX_URL_LENGTH that contains a URL string. If the string does not refer to a file, it must include a valid scheme such as "http://".
pszCanonicalized
[out] A pointer to a null-terminated string used to return the converted URL.
pcchCanonicalized
[in, out] The number of characters in pszCanonicalized.
dwFlags
[in] Flags that specify how the URL is converted to canonical form. The following flags can be combined.
URL_DONT_SIMPLIFY
Treat "/./" and "/../" in a URL string as literal characters, not as shorthand for navigation. See Remarks for further discussion.
URL_ESCAPE_PERCENT
Convert any occurrence of "%" to its escape sequence.
URL_ESCAPE_SPACES_ONLY
Replace only spaces with escape sequences. This flag takes precedence over URL_ESCAPE_UNSAFE, but does not apply to opaque URLs.
URL_ESCAPE_UNSAFE
Replace unsafe characters with their escape sequences. Unsafe characters are those characters that may be altered during transport across the Internet, and include the (<, >, ", #, {, }, |, \, ^, ~, [, ], and ') characters. This flag applies to all URLs, including opaque URLs.
URL_NO_META
Defined to be the same as URL_DONT_SIMPLIFY.
URL_PLUGGABLE_PROTOCOL
Combine URLs with client-defined pluggable protocols, according to the World Wide Web Consortium (W3C) specification. This flag does not apply to standard protocols such as ftp, http, gopher, and so on. If this flag is set, UrlCombine does not simplify URLs, so there is no need to also set URL_DONT_SIMPLIFY.
URL_UNESCAPE
Un-escape any escape sequences that the URLs contain, with two exceptions. The escape sequences for "?" and "#" are not un-escaped. If one of the URL_ESCAPE_XXX flags is also set, the two URLs are first un-escaped, then combined, then escaped.
Return Value
Returns S_OK if successful, or an error value otherwise.
Remarks
This function performs such tasks as replacing unsafe characters with their escape sequences and collapsing sequences like "..\...".
If a URL string contains "/../" or "/./", UrlCanonicalize normally treats the characters as indicating navigation in the URL hierarchy. The function simplifies the URLs before combining them. For instance "/hello/cruel/../world" is simplified to "/hello/world". If the URL_DONT_SIMPLIFY flag is set in dwFlags, the function does not simplify URLs. In this case, "/hello/cruel/../world" is left as-is.
Function Information
Minimum DLL Version shlwapi.dll version 5.0 or later
Custom Implementation No
Header shlwapi.h
Import library shlwapi.lib
Minimum operating systems Windows 2000, Windows NT 4.0 with Internet Explorer 5, Windows 98, Windows 95 with Internet Explorer 5
Unicode Implemented as ANSI and Unicode versions.
Я не поняла как правильно передовать параметры в эту ф-цию. Там требует передать в первом параметре что-то типа пути с url "http://".
В моем случае какой путь мне передовать?
Я не поняла как правильно передовать параметры в эту ф-цию. Там требует передать в первом параметре что-то типа пути с url "http://".
В моем случае какой путь мне передовать?[/QUOTE]
c:\\Мои Документы\\и т.д. Можешь попробовать "file://c:\\Мои Документы\\"
Вот еще такой код пробывала:
WCHAR wszFileName[512];
String FName = sSaveDialog1->FileName;
MultiByteToWideChar(CP_ACP, 0, FName.c_str(), -1, wszFileName, sizeof(wszFileName)/sizeof(wszFileName[0]));
XPrintMap->ExportMap(WideString(wszFileName).c_bstr(), miFormatJPEG);
Однако его использование приводило к появлению окна CPU. [quote]
Стековый массив? Переполнение буфера, по ходу....