Fórum extrair arquivo EXE direto na pasta temporaia #345699

09/09/2007

0

ola pessoal mais um ves etou na duvida.

è o seguinte estou criando player de video com este esquema:

procedure TForm1.FormCreate(Sender: TObject);
begin
with TResourceStream.Create(HInstance, ´videompg´, ´MPGFILE´) do
try
SaveToFile(´\windows\temp\video.mpg´); {extrai o mpg para a pasta temporaria}
finally
Free;
end;
end;

procedure TForm1.SpeedButton1Click(Sender: TObject);
begin
form1.TransparentColor :=false;
with MediaPlayer1 do
begin
FileName := ´\windows\temp\video.mpg´;
Open;
Display := panel1;
Play;
end;
end;

Initialization
finalization
Begin

if FileExists(´\windows\temp\cr.mpg´) then DeleteFile(´\windows\temp\cr.mpg´);
End;

end.
O ploblema é, qundo executo o executavel depois de pronto
roda beleza do jeito que eu quero MAS. só eu estiver executando oexecutavel na undade C:\, se eu estiver executando na unidade D:\ ou outra qualquer que não seja a unidade onde estar a pasta do windows, ele não funciona da erro diz que não consegui encontra a pasta do Wndidos.
o que eu quero e um um esquema para estrai na pasta temp do windows não importando onde o windows foi instalado.
BAIXEI este esquema na net...
Function ExtractSystemDir : String;
Var Buffer : Array[0..255] of Char;
Begin
GetSystemDirectory(Buffer,144);
Result := StrPas(Buffer);
End;
MAS com usa-lo com o meu projeto.
Se alguem poder mi ajudar des de já agradeço.

Cicero Antonio


Cgm2k7

Cgm2k7

Responder

Posts

09/09/2007

Mayron Cachina

tem como disponibilizar os fontes pra da uma testada?


Responder

Gostei + 0

10/09/2007

Fabiano Góes

cgm2k7,
essa function que você baixou da internet devolve o diretório System32 do windows alterei ela pra devolver o Temp,
fiz umas alteraçõe no seu código, teste para var se funciona assim.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
Function ExtractSystemDir : String;
Var
  Buffer : Array[0..255] of Char;
Begin
  GetSystemDirectory(Buffer,144);
  Result := StringReplace(StrPas(Buffer), ´System32´, ´Temp\´, [rfIgnoreCase]);
End;
 
procedure TForm1.FormCreate(Sender: TObject);
begin
  with TResourceStream.Create(HInstance, ´videompg´, ´MPGFILE´) do
  try
    SaveToFile(ExtractSystemDir + ´video.mpg´);
  finally
    Free;
  end;
end;
 
procedure TForm1.SpeedButton1Click(Sender: TObject);
begin
  form1.TransparentColor :=false;
  with MediaPlayer1 do
  begin
    FileName := ExtractSystemDir + ´video.mpg´;
    Open;
    Display := panel1;
    Play;
  end;
end;
 
Initialization
finalization
Begin
 
  if FileExists(ExtractSystemDir + ´cr.mpg´) then
    DeleteFile(ExtractSystemDir + ´cr.mpg´);
 
End;



Responder

Gostei + 0

11/09/2007

Cgm2k7

Ai amigo as mundança que vc fez no meu codigo não deu certo diretamente falando mas indiretamente foi a baze para dar certo.

Mas com sua ideia me ajudou a pençar, não com mesmo esquema com outro mas com a mesma ideia. O CODIGO COMPLETO É ESTE DEPOI DE PRONTO..

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, ExtCtrls, MPlayer, StdCtrls, Buttons;

type
TForm1 = class(TForm)
MediaPlayer1: TMediaPlayer;
SpeedButton1: TSpeedButton;
panel1: TPanel;
procedure SpeedButton1Click(Sender: TObject);
private
Function GetTemporaryDir: String;
public

end;

var
Form1: TForm1;

implementation

{$R *.dfm}
{$R VIDEO.RES}
function TForm1.GetTemporaryDir: String;
var
pNetPath: ARRAY[ 0..MAX_PATH - 1 ] of Char;
nLength: Cardinal;
begin
nLength := MAX_PATH;
FillChar( pNetPath, SizeOF( pNetPath ), #0 );
GetTempPath( nLength, pNetPath );
Result := StrPas( pNetPath );
end;

Procedure SaveVIDEOMPG;
Var PathToSave:String;
Res : TResourceStream;
Begin
PathToSave := ExtractFilePath(Application.ExeName);
If not FileExists(PathToSave) Then Begin
Res :=TResourceStream.VIDEO(Hinstance, ´VIDEOMPG´, ´MPGFILE´);
Try
Res.SavetoFile(VIDEO.Form1.GetTemporaryDir+´VIDEO.MPG´);
Finally
Res.Free;
End;
End;
End;

procedure TForm1.SpeedButton1Click(Sender: TObject);
begin
with MediaPlayer1 do
begin
FILENAME :=GETTEMPORARYDIR+´VIDEO.MPG´;
Open;
Display := panel1;
Play;
end;
end;

Initialization
SAVEVIDEOMPG;
finalization
Begin
if FileExists (VIDEO.Form1.GetTemporaryDir+´VIDEO.MPG´) then DeleteFile(VIDEO.Form1.GetTemporaryDir+´VIDEO.MPG´);
End;

===========
DECLAREI Function GetTemporaryDir: String;
E O RESTO USEI APROPRIO ASSISTENTE DO DELPHI7 Ctrl+Spaço
dica para todos sempre procure o que no proprio delphi para depois procura na nete se fazer isto quando for procurar na nete as sua ideis com as ideis dos amigo fluem mais.

Agadeço o amigo que me ajudou e ta ai o resultado testao e aprovado 100¬

Cicero


Responder

Gostei + 0

11/09/2007

Fabiano Góes

beleza cara,
o importante é você ter encontrado uma solução.

Valeu por ter postado a solução e finalizado o post,
isso ajuda muito em futuras pesquisas.

Abraço !!!


Responder

Gostei + 0

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar