Главная страница
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.024 c
2-1196342254
NaRuTo
2007-11-29 16:17
2007.12.23
Можно ли поменять цвет шрифта TRadioGroup


8-1171310423
man-1982
2007-02-12 23:00
2007.12.23
как из двух изображений сделать одно


3-1187346916
Bless
2007-08-17 14:35
2007.12.23
Как правильно "гасить" MSSQL-ошибку с кодом 266


15-1195559648
xayam
2007-11-20 14:54
2007.12.23
Что мне не нравится в BDS/RAD Studio?


2-1196509892
WFS
2007-12-01 14:51
2007.12.23
Как сделать из цветного черно белое изображение