Ich weiß ehrlich gesagt nicht, was du da machst. Dein Programm 48 MB 1 Minute 35 Sekunden. Mein Programm für die gleiche Datei 8 Sekunden. Und meine Konsolen Version sogar nur 5 Sekunden - Minus Reaktionszeit zum Stoppen.
Delphi-Quellcode:
// open source stream
SrcStream := TStreamProgressAdapter.Create(TFileStream.Create(Filename,
fmOpenRead or fmShareDenyNone), hWnd);
if Assigned(SrcStream) then
begin
try
// create destination stream
DestStream := TFileStream.Create(IncludeTrailingPathDelimiter(Folder)+
ExtractFilename(Filename) + EXTENSION, fmCreate);
if Assigned(DestStream) then
begin
try
// write the head into the stream
DestStream.Write(FileHeader, sizeof(TFileHeader));
// prepare vor encoding
with DefCipherClass.Create(PW, nil) do
begin
Mode := cmCBC;
InitKey(PW, nil);
// alocate memory for the buffer
GetMem(Buffer, 1024);
try
// as long as we have not reached the end of the source stream
while (SrcStream.Position < SrcStream.Size) and (Terminated =
False) do
begin
// how much to read
if SrcStream.Size - SrcStream.Position > BlockSize then
Len := BlockSize
else
Len := SrcStream.Size - SrcStream.Position;
// read into the buffer
SrcStream.ReadBuffer(Buffer^, Len);
// encode the buffer
EncodeBuffer(Buffer^, Buffer^, len);
// write the buffer
DestStream.WriteBuffer(Buffer^, Len);
end;
Und daran, dass ich den Header nicht mit verschlüssele kann es nicht liegen.
AMD Athlon 1800XP (1500 MHz), 512 MB
Ram.
Und lass das Menü von dem Button doch unter dem Button aufpoppen, das sieht doch besser aus. Und warum Refreshst du auch immer das Label mit der Aktion immer mit. Das flackert doch. Und wenn du in der WndProc noch Application.Processmessages aufrufst, dann kann man es auch verschieben und minimiren und so weiter arbeiten. Diese "Stay on Top" als default ist sowieso nervig, dein Programm blockiert dann jedes mal den gesamten Desktop.