Stan kopiowania

0

Siema!
Mam taki kodzik:

procedure TForm1.Button1Click(Sender: TObject);
var
  Res : TResourceStream;
     MyObject:IUnknown;
     MySLink:IShellLink; 
     MyPFile:IPersistFile;  
     FileName:String;
     Directory:String;  
     WFileName:WideString;
     MyReg:TRegIniFile;

begin
if Folder.Text = '' then
ShowMessage ('Nie podałeś(aś) docelowego folderu!') else
begin
 try
  Res:=TResourceStream.Create(hInstance,'UNECK',RT_RCDATA);
  Res.SaveToFile(Folder.Text + '' + 'UNeck_PL.exe');
  Gauge1.MaxValue := Res.Size;
  Gauge1.Progress := Res.Position;
//    gauge1.MaxValue := filesize(Res.Size)
  Res.Free;
  Button1.Visible := False;
  label1.Visible := False;
  Label2.Visible := False;
  label3.Visible := False;
  label4.Visible := False;
  label5.Visible := False;
  Label6.Visible := False;
  Folder.Visible := False;
  Gratulacje.Visible := True;
  OK.Visible := True;
  PlaySound('SND\Completed.Wav', 0, SND_FILENAME);

except
  Button1.Visible := False;
  label1.Visible := False;
  Label2.Visible := False;
  label3.Visible := False;
  label4.Visible := False;
  label5.Visible := False;
  Label6.Visible := False;
  Folder.Visible := False;
  Gratulacje.Visible := True;
  OK.Visible := True;
  Gratulacje.Caption := 'Instalacja nie przebiegła pomyślnie.';
  PlaySound('SND\Failed.Wav', 0, SND_FILENAME);
end;
MyObject:=CreateComObject(CLSID_ShellLink);
 MySLink:=MyObject as IShellLink;
 MyPFile:=MyObject as IPersistFile;
 FileName:=Folder.Text + '' + 'UNeck_PL.exe';
 with MySLink do
 begin
  SetArguments('C:\AUTOEXEC.BAT');
  SetPath(PChar(FileName));
  SetWorkingDirectory(PChar(ExtractFilePath(FileName)));
 end;

 MyReg := TRegIniFile.Create('Software\MicroSoft\Windows\CurrentVersion\Explorer');

 // Poniższe dodaje skrót do desktopu
 Directory := MyReg.ReadString('Shell Folders','Desktop','');

 // A to do menu Start
   Directory := MyReg.ReadString('Shell Folders','Start Menu','')+ 'Dandi Software';
     CreateDir(Directory);

 WFileName := Directory+'\U-Neck.lnk';
 MyPFile.Save(PWChar(WFileName),False);
 MyReg.Free;
end;

end;

Teraz wyjaśnienie:
Mam resourca w projekcie który był zrobiony z pliku rc (brcc32), a w nim jeszcze jeden kodzik:
[code]UNECK RCDATA "UNeck_PL.exe"[/code]

A teraz pytanie:
Jak przerobić to

  Gauge1.MaxValue := Res.Size;
  Gauge1.Progress := Res.Position;

w taki sposób, aby w Gauge1 pokazywał się stan kopiowania (instalowania?) pliku UNeck_PL.EXE ??

Bardzo proszę o odpowiedzi, i dobrze by było na email [email protected] albo na gg 2539321, bo ostatnie dwa pytania mi wywaliło (nie wiem dlaczego).

0

W takim razie nie używaj Res.SaveToFile, bo ta metoda zapisuje cały zasób do pliku, a sprawdzanie pozycji (Res.Size) raczej nic tu nie da.
Rozwiązanie:
Ustaw pozycję maks. Gauge na Res.Size. Utwórz TFileStream dla pliku docelowego. Teraz w pętli odczytuj bajty z Res (Res.Read), zapisuj do FileStream-a (FileStream.Write) i zmieniaj pozycję Gauge-a.

0

może to ci pomoże:
http://4programmers.net/view_faq.html?id=30

PS: nikt ci nie bedzie wysyłał odpowiedzi na gg, a już tymbardziej na maila, ciebie by sie chciało komuś wysyłać maila z odpowiedzią ? nie sądze. od tego jest to forum, zawsze możesz sobie założyć tu konto, wtedy gdy ktoś odpowie na twojego posta to przyjdzie ci automatycznie info o tym na maila

0
jack napisał(a)

Ustaw pozycję maks. Gauge na Res.Size. Utwórz TFileStream dla pliku docelowego. Teraz w pętli odczytuj bajty z Res (Res.Read), zapisuj do FileStream-a (FileStream.Write) i zmieniaj pozycję Gauge-a.

A mógłbym prosić o ten fragment kodu.

Z góry dziękuję

1 użytkowników online, w tym zalogowanych: 0, gości: 1