Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2003.08.04;
Скачать: [xml.tar.bz2];

Вниз

Запуск Оперы   Найти похожие ветки 

 
Seldon   (2003-07-20 21:33) [0]

Здрасьте!
Мне надо запускать оперу. Я делаю так:
ShellExecute(0,"open",PAnsiChar(OperaPath),PAnsiChar(""file://"+HTMLFileName+"""),nil,sw_Show);
Это работает, но если в HTMLFileName есть русские символы, Opera говорит, мол файл не найден, а в строке адреса примерно такое:
file://localhost/c:/Documents and Settings/Seldon/Iie aieoiaiou/$Preview1.html
Насколько я понимаю, Opera принимает имя файла в Unicode, а я даю ей в ANSI. Как перекодировать ANSI в Unicode я знаю, но ShellExecute не хочет брать ни PWChar, ни WideString. Как мне быть?


 
Spawn   (2003-07-20 21:42) [1]

Не знаю поможет ли, но может использовать Unicode-версию ShellExecute?

function ShellExecuteW; external shell32 name "ShellExecuteW";


 
Marser   (2003-07-20 22:16) [2]

winexec


 
Seldon   (2003-07-21 01:15) [3]

>ShellExecuteW
Делаю так: ShellExecuteW(0,"open",Str2Wide(OperaPath),Str2Wide(""file://"+HTMLFileName+"""),nil,sw_Show);
Где Str2Wide:
function Str2Wide(Str:String):PWideChar;
var
R:WideString;
begin
SetLength(R,Length(Str));
MultiByteToWideChar(0,0,PAnsiChar(@Str[1]),-1,PWideChar(@R[1]),Length(Str));
Result:=PWideChar(R);
end;
Не работает! Та же байда.
Ещё заметил, что если в момент вызова опера уже запущена, то всё пучком. Можно, конечно, запускать оперу, ждать немного и запускать файл. Но это криво как-то.


 
VMcL   (2003-07-21 09:40) [4]

ShellExecuteW(0, "open", PWideChar(WideString(OperaPath)), PWideChar(WideString(""file://" + HTMLFileName + """)), nil, sw_Show);


 
VMcL   (2003-07-21 09:51) [5]

Не прогнал. Так не пойдёт. Нужно русские буквы передавать в том виде (не помню, как называется), как все браузеры передают:
%xx%yy

Причем, в UTF-8. Например, буква "Г" -> %D0%93


 
VMcL   (2003-07-21 09:58) [6]

Вот функция перекодирования:

function ForOpera(S: AnsiString): AnsiString;
var
U: UTF8String;
I: Integer;
begin
U := AnsiToUtf8(S);

Result := "";
for I := 1 to Length(U) do
begin
Result := Result + "%" + Format("%.2X", [Byte(U[I])])
end;
end;


 
Ivolg   (2003-07-21 11:30) [7]

вот тебе код который открывает любой файл нужно просто указать постле точки какой это файл например Test.mp3,test.txt,opera.exe и т.д.Код: ShellExecute(0,
"open",
"C:\Opera.exe",
nil,
nil,
SW_SHOWNORMAL);

end;

uses:ShellApi,


Обязателбно в столбик как показано. Удачи!


 
VMcL   (2003-07-21 13:27) [8]

>Ivolg © (21.07.03 11:30)

Посты читал?


 
Ivolg   (2003-07-21 13:49) [9]

У меня всё это работает! VMcL может у тебя не работает?



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

Форум: "Основная";
Текущий архив: 2003.08.04;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.46 MB
Время: 0.009 c
1-10280
Goblinus
2003-07-22 02:19
2003.08.04
Глюки TPanel


14-10401
avlan
2003-07-17 14:37
2003.08.04
DSPack


1-10249
Alex_x
2003-07-21 10:07
2003.08.04
Помогите нарисаовать график в Excele


1-10192
Альф
2003-07-17 16:11
2003.08.04
Можно ли из множества целых составить строку ?


1-10173
Yanis
2003-07-23 01:19
2003.08.04
Как сделать консольную программу?





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский