- Delphiartiklar, tips, forum, länksamling - 

      

START | DELPHI | LÄNKARGÄSTBOK 




 Forum

Grundkurs
  »Introduktion
  »Snabbguide
  »Komponenter
  »Händelser
  »Strängar
  »Räkna med Delphi   »Egna typer
  »Selektion
  »Iteration
  »Menyer
  »Funktioner
  »Arraystrukturer

Tips & Tricks
  »Nya tips
  »Blandat
  »Databaser
  »Filer
  »Forms
  »Grafik
  »Internet
  »Komponenter
  »Matematik
  »Multimedia
  »Objekt/ActiveX
  »Skrivare
  »Strängar
  »System
  »Mest lästa tips

Artiklar
  »Delphi och ADO
  »Bygga en DLL
  »Skapa en enkel rapport
  »Hantera registret
  »Enheter, units
  »Klassen TCanvas
  »Använd LookUp Controls

 Nya tips
 Lägg till tips
 Delphilänkar
 Gästbok

 

Lägg till data till en kompilerad exe-fil Kategori: Filer
Inlagt: 2006-08-16
Läst: 1357
Inlagt av: Staffan Berg
Beskrivning
Avancerat exempel där man kan addera data till en redan färdigkompilerad programkörningsfil (*.exe).
Kod
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 Streamgröß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 
  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 
  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.SaveClick(Sender: TObject); 
var 
 aStream: TMemoryStream; 
begin 
 aStream := TMemoryStream.Create; 
 Memo1.Lines.SaveToStream(aStream); 
 AttachToFile('Test.exe', aStream); 
 aStream.Free; 
end; 
 
procedure TForm1.LoadClick(Sender: TObject); 
var 
 aStream: TMemoryStream; 
begin 
 aStream := TMemoryStream.Create; 
 LoadFromFile('Test.exe', aStream); 
 Memo1.Lines.LoadFromStream(aStream); 
 aStream.Free; 
end; 

 
 
© Copyright 2005 - Staffan Berg
- Alla rättigheter förbehålles -