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

Вниз

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

 
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;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.018 c
14-10388
gn
2003-07-15 13:52
2003.08.04
предлагаю нескалько задачек проверим навыки???


14-10460
Knight
2003-07-17 21:16
2003.08.04
Телефонный справочник - законно ли это?


1-10274
Rafa
2003-07-21 14:35
2003.08.04
Ассемблерные вставки в Delphi


3-10104
Belkova
2003-07-14 13:02
2003.08.04
DBLookUpComboBox


14-10439
nick-from
2003-07-14 17:38
2003.08.04
вчем отличия телефонов?