Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   Navegar por una web añadida como recurso en el .exe (https://www.clubdelphi.com/foros/showthread.php?t=92927)

Jcg-Guirola 15-03-2018 18:07:17

Navegar por una web añadida como recurso en el .exe
 
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í 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:
Código Delphi [-]
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

Código Delphi [-]
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):
Cita:

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;


La franja horaria es GMT +2. Ahora son las 12:22:54.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi