Hola ecfisa, saludos
mira..
Declaración del hilo...
Código Delphi
[-]
...
private
Thread: TStopStartThread;
WaitThread: TWaitThread;
UntilFlag: TEvent;
...
hago la llamada al hilo...
Código Delphi
[-]
Procedure TPrincipal.Button1Click(Sender: TObject);
begin
Thread.MsgWaitFor(CortarArchivo(labEdit1.Text,2048), nil); end;
Procedimiento "CortarArchivo"...
Código Delphi
[-]
procedure CortarArchivo(sArchivo: TFileName; iLongitudTrozo: Long64 );
var
i: Word;
FS, Stream: TFileStream;
nombreFile: String;
label iniciar;
begin
try
principal.memo1.Lines.Add(CalcHash(principal.labedit1.Text,haSHA1));
principal.Memo1.Lines.SaveToFile(principal.labEdit2.Text+ '\'+ extractFileName(principal.LabEdit1.Text+'.crc'));
except
on EFCreateError do
begin
showMessage ('Unidad seleccionada no válida. Selecciona una unidad' +
chr(13)+'de disco duro local que sea accesible.');
principal.Memo1.Text:= '';
exit;
end;
end;
if principal.opc1.Checked then
begin
iLongitudTrozo:= 1048576;
FS := TFileStream.Create(sArchivo, fmOpenRead or fmShareDenyWrite);
try
principal.Memo2.Lines.Add((Chr(13))+(Chr(10)));
principal.Memo2.Lines.Add('LISTADO DE ARCHIVOS [ORIGINAL CORTADO]');
principal.Memo2.Lines.Add((Chr(13))+(Chr(10))+'·································');
for i := 1 to Trunc( FS.Size / iLongitudTrozo ) + 1 do
begin
principal.prBar.Max:= FS.Size div iLongitudTrozo;
principal.prBar.Position:= i;
principal.prBar.Refresh;
nombreFile:= extractFileName(sArchivo);
try
sArchivoPartido := ChangeFileExt(principal.labEdit2.Text +'\'+
nombreFile, '.' + FormatFloat('000', i ) );
Stream := TFileStream.Create(sArchivoPartido, fmCreate or fmShareExclusive);
except
on EFileStreamError do
ShowMessage ('Unidad seleccionada no valida. Selecciona una unidad de disco duro local.');
end;
principal.labEdit2.SelStart:= 0;
principal.labEdit2.SelLength:= length(principal.labEdit2.Text);
if (principal.labEdit2.SelLength) = 3 then
principal.Memo2.Lines.Append(principal.labEdit2.Text + extractFileName(sArchivoPartido))
else
principal.Memo2.Lines.Append(principal.labEdit2.Text+'\'+extractFileName(sArchivoPartido));
try
if fs.Size - fs.Position < iLongitudTrozo then
iLongitudTrozo := FS.Size - FS.Position;
Stream.CopyFrom( FS, iLongitudTrozo );
finally
Stream.Free;
end;
end;
finally
FS.Free;
principal.Button1.Enabled:= false;
principal.Memo2.Lines.Add((Chr(13))+ (chr(10)));
principal.Memo2.Lines.Add('Archivo original: '+principal.LabEdit1.Text);
principal.memo2.Lines.Add('Ruta destino: '+principal.labEdit2.Text);
principal.Memo2.Lines.Add('Código HASH: '+principal.Memo1.Text);
end;
if principal.prBar.Max = principal.prBar.Position then
principal.Timer1.Enabled:= true;
Principal.lblTerminado.Visible:= true;
end;
...
if principal.opc1.Checked then
begin
iLongitudTrozo:= 16106127360; FS := TFileStream.Create( sArchivo, fmOpenRead or fmShareDenyWrite);
try
Principal.Label6.Caption:= IntToStr((FS.Size div iLongitudTrozo) +1);
principal.Label6.Refresh;
principal.Memo2.Lines.Add((Chr(13))+(Chr(10)));
principal.Memo2.Lines.Add('LISTADO DE ARCHIVOS [ORIGINAL CORTADO');
principal.Memo2.Lines.Add((Chr(13))+(Chr(10))+'·································');
for i := 1 to Trunc( FS.Size / iLongitudTrozo ) + 1 do
begin
principal.prBar.Max:= Round((FS.Size / iLongitudTrozo));
principal.prBar.Position:= i;
principal.prBar.Refresh;
sArchivoPartido := ChangeFileExt(principal.labEdit2.Text +'\'+
nombreFile, '.' + FormatFloat('000', i ) );
Stream := TFileStream.Create(sArchivoPartido, fmCreate or fmShareExclusive);
principal.labEdit2.SelStart:= 0;
principal.labEdit2.SelLength:= length(principal.labEdit2.Text);
if (principal.labEdit2.SelLength) = 3 then
principal.Memo2.Lines.Append(principal.labEdit2.Text + extractFileName(sArchivoPartido))
else
principal.Memo2.Lines.Append(principal.labEdit2.Text+'\'+extractFileName(sArchivoPartido));
try
if fs.Size - fs.Position < iLongitudTrozo then
iLongitudTrozo := FS.Size - FS.Position;
Stream.CopyFrom( FS, iLongitudTrozo);
finally
Stream.Free;
end;
end;
finally
FS.Free;
principal.Button1.Enabled:= false;
principal.Memo2.Lines.Add((Chr(13))+ (chr(10)));
principal.Memo2.Lines.Add('Archivo original: '+principal.LabEdit1.Text);
principal.memo2.Lines.Add('Ruta destino: '+principal.labEdit2.Text);
principal.Memo2.Lines.Add('Código HASH: '+principal.Memo1.Text);
end;
if principal.prBar.Max = principal.prBar.Position then
principal.Timer1.Enabled:= true;
Principal.lblTerminado.Visible:= true;
end;
end;
Así está ahora mismo, ¿alguna sugerencia?
Una cosa, no seais muy duros con el código que estoy verdecillo
ya sé que habra mil formas de hacerlo mas claro y limpio pero todo a su tiempo. De momento funciona que no es poco jajaj.
P.D.: El ejemplo que uso de hilo es de la web "
crea tu software" y no sé si será valido en mi caso.
Saludos y gracias.