Форум: "Основная";
Текущий архив: 2007.12.23;
Скачать: [xml.tar.bz2];
Внизкак открить документ не сохраняя, если он в TMemoryStream Найти похожие ветки
← →
integery (2007-10-07 12:58) [0]есть код
он позволяет сохранить и извлеч документ из exe файла, но нужно штоб запуск TForm1.Button2Click не сохранял файл а зразу запускал из aStream, или полубому нужно сохранять файл и тогда запускать.
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;
← →
jack128_ (2007-10-07 13:23) [1]>> а зразу запускал из aStream
Запускал - это в смысле, как ShellExecute работает???
в случае именно ворда и doc файлов, мона конечно поискать, может он и умеет читать докуменнты из IStream, но это совсем мало вероятно..
В общем же случае - обязательно нужно сохранить стрим на диск.
← →
integery (2007-10-07 15:12) [2]спасибо !!
Страницы: 1 вся ветка
Форум: "Основная";
Текущий архив: 2007.12.23;
Скачать: [xml.tar.bz2];
Память: 0.45 MB
Время: 0.059 c