PDA

Ver la Versión Completa : Navegar por una web añadida como recurso en el .exe


Jcg-Guirola
15-03-2018, 18:07:17
Hola, lo que tengo es una página web de un solo archivo de extención .mht el nombre del archivo que he añadido al programa se llama Ayuda.res y la página web de un solo archivo se llama Ayuda.mht, lo que necesito es que en un componente webbrowser que tengo en mi form pueda abrir esta página(insertada en el .exe como recurso). He encontrado varios ejemplos pero donde el archivo de recurso es un audio o una imágen y he tratado de modificar el código para hacer esto pero no he logrado nada.

escafandra
15-03-2018, 18:24:25
Básicamente debes volcar el recurso a un archivo temporal y abrirlo después con tu webbrowser. Aquí (http://clubdelphi.com/foros/showpost.php?p=488652&postcount=2) tienes in ejemplo con un mp3.

Saludos.

Jcg-Guirola
15-03-2018, 19:30:27
Pruebo y mañana te digo porque tengo que ir ya para la casa y en mi casa no tengo internet

Jcg-Guirola
16-03-2018, 13:26:50
Llevando eso a código delphi hice lo siguiente:

procedure THome.Label2Click(Sender: TObject);
var
Recursos: TResourceStream;

begin
Recursos := TResourceStream.Create(hInstance, 'RES_MAPCODE', RT_RCDATA );
Recursos.Seek( 0, soFromBeginning );
recursos.SaveToFile('Ayuda.mht');//con esto lo guarda en la carpeta donde está el .exe
webbrowser1.Navigate('\Ayuda.mht');//aqui pongo la dirección en donde se encuentra
end;

Lo que pasa es que me hace falta que lo guarde en los archivos temporales ('o en cualquier otro lado que no sea la carpeta de la aplicación) no sé si haya alguna de forma de que lo guarde allí independientemente de la verción de windows o la letra de la unidad donde está el sistema, por ejemplo en mi pc la ruta sería(C:\Windows\Temp) pero puede que para alguien sea (F:\Windows\Temp)

Jcg-Guirola
16-03-2018, 15:01:47
En este enlace http://www.clubdelphi.com/foros/showthread.php?t=52361 encontré algo sobre obtener la ruta de la carpeta temp para usuarios voy a probar con eso

escafandra
16-03-2018, 17:16:32
function GetLongPathName(ShortPath, LongPath: PAnsiCHAR; size: DWORD): DWORD; stdcall; external 'Kernel32.dll' name 'GetLongPathNameA';



function GetTempFolder: String;
var
buffer: array [0..MAX_PATH-1] of AnsiChar;
begin
GetLongPathName(PAnsiCHAR(GetEnvironmentVariable('temp')), buffer, sizeof(buffer));
Result:= buffer;
end;



Saludos.

Jcg-Guirola
20-03-2018, 14:32:41
Ah disculpa la demora, problemas con el internet , mira que fácil, yo después de revisar lo que había descargado lo habia hecho de la siguiente forma(un poco más complicado):

function SpecialFolder(Folder: Integer): String;
var
SFolder : pItemIDList;
SpecialPath : Array[0..MAX_PATH] Of Char;
begin
SHGetSpecialFolderLocation(ayudas.Handle, Folder, SFolder);
SHGetPathFromIDList(SFolder, SpecialPath);
Result := StrPas(SpecialPath);
end;


procedure TAyudas.Ayuda1Click(Sender: TObject);
var
Recursos: TResourceStream;
hFind, hRes: THandle;
url:string;

begin
url:=SpecialFolder(CSIDL_APPDATA)+'\Ayuda.mht';
Recursos := TResourceStream.Create(hInstance, 'RES_MAPCODE', RT_RCDATA );
Recursos.Seek( 0, soFromBeginning );
recursos.SaveToFile(URL);
webbrowser1.Navigate(URL);

// con esto no lo guardo en los archivos temporales, sino e la appdata del usuario
//ha y debe agregarse ,Shlobj en uses
end;