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

Вниз

как открить документ не сохраняя, если он в TMemoryStream   Найти похожие ветки 

 
integery   (2007-10-07 12:58) [0]

есть код
function AttachToFile(const AFileName: string; MemoryStream: TMemoryStream): Boolean;
var
 aStream: TFileStream;
 iSize: Integer;
begin
 Result := False;
 if not FileExists(AFileName) then
   Exit;
 try
   aStream := TFileStream.Create(AFileName, fmOpenWrite or fmShareDenyWrite);
   MemoryStream.Seek(0, soFromBeginning);
   // seek to end of File
   // ans Ende der Datei Seeken
   aStream.Seek(0, soFromEnd);
   // copy data from MemoryStream
   // Daten vom MemoryStream kopieren
   aStream.CopyFrom(MemoryStream, 0);
   // save Stream-Size
   // die Streamgro?e speichern
   iSize := MemoryStream.Size + SizeOf(Integer);
   aStream.Write(iSize, SizeOf(iSize));
 finally
   aStream.Free;
 end;
 Result := True;
end;

function LoadFromFile(const AFileName: string; MemoryStream: TMemoryStream): Boolean;
var
 aStream: TFileStream;
 iSize: Integer;
begin
 Result := False;
 if not FileExists(AFileName) then
   Exit;

 try
   aStream := TFileStream.Create(AFileName, fmOpenRead or fmShareDenyWrite);
   // seek to position where Stream-Size is saved
   // zur Position seeken wo Streamgro?e gespeichert
   aStream.Seek(-SizeOf(Integer), soFromEnd);
   aStream.Read(iSize, SizeOf(iSize));
   if iSize > aStream.Size then
   begin
     aStream.Free;
     Exit;
   end;
   // seek to position where data is saved
   // zur Position seeken an der die Daten abgelegt sind
   aStream.Seek(-iSize, soFromEnd);
   MemoryStream.SetSize(iSize - SizeOf(Integer));
   MemoryStream.CopyFrom(aStream, iSize - SizeOf(iSize));
   MemoryStream.Seek(0, soFromBeginning);
 finally
   aStream.Free;
 end;
 Result := True;
end;

procedure TForm1.Button1Click(Sender: TObject);
var
 aStream: TMemoryStream;
begin
 aStream := TMemoryStream.Create;
 aStream.LoadFromFile("Doc1.doc");
/// Memo1.Lines.SaveToStream(aStream);
 AttachToFile("Test.exe", aStream);
 aStream.Free;

end;

procedure TForm1.Button2Click(Sender: TObject);
var
 aStream: TMemoryStream;
begin
 aStream := TMemoryStream.Create;
 LoadFromFile("Test.exe", aStream);
 aStream.SaveToFile("111.doc");
 ///Memo1.Lines.LoadFromStream(aStream);
 aStream.Free;

end;
он позволяет сохранить и извлеч документ из exe файла, но нужно штоб запуск TForm1.Button2Click не сохранял файл а зразу запускал из aStream, или полубому нужно сохранять файл и тогда запускать.


 
jack128_   (2007-10-07 13:23) [1]

>> а зразу запускал из aStream
Запускал - это в смысле, как ShellExecute работает???

в случае именно ворда и doc файлов, мона конечно поискать, может он и умеет читать докуменнты из IStream, но это совсем мало вероятно..
В общем же случае - обязательно нужно сохранить стрим на диск.


 
integery   (2007-10-07 15:12) [2]

спасибо !!



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

Текущий архив: 2007.12.23;
Скачать: CL | DM;

Наверх




Память: 0.47 MB
Время: 0.012 c
3-1182843398
DelphiN!
2007-06-26 11:36
2007.12.23
Округление даты-время в дату в SQL


15-1195712629
LewSavchu
2007-11-22 09:23
2007.12.23
facebook


15-1195682297
GanibalLector
2007-11-22 00:58
2007.12.23
Россия в ЕВРО2008


2-1195993145
m-kirill-2003
2007-11-25 15:19
2007.12.23
двоичная, шестнадцатиричная с/с


2-1196319865
Dennis I. Komarov
2007-11-29 10:04
2007.12.23
GetApplicationDataPath