Programowanie w języku Delphi » Gotowce

Jak skopiować wszystkie pliki z płytki CD

Piszę ten gotowiec, ponieważ sam niedawno miałem taki problem. Myślę, że jest on kierowany głównie do osób początkujących.

Więc do dzieła.
Po pierwsze do listu modułów dodajemy ShellApi.

CD-ROMy mają różne litery tzn. na jednym komputerze CD-ROM jest oznaczony jako D:\\; na drugim jako E:\\ a na jesze innym Z:\\.

Musimy zatem okreslić jaką literą jest oznaczony nasz CD-ROM. Dodajemy ComboBox i ustawiamy jego właściwość Visible na false. W tym comboBoxie program wpisze literę dysku CD-ROM.

teraz w sekcji public napisz:
 Drive : char;  zmienna char (jeden znak)

Teraz w OnActivateFormy piszemy:

begin 
  for drive := 'A' to 'Z' do 
    case GetDriveType(PChar(Drive+':\')) of   //pobierz literę
       DRIVE_CDROM: Combobox1.items.Add(Drive);  //wynik wyświetl w ComboBox1
    end; 


Sprawę litery mamy za sobą. teraz rzecz najważniejsz czyli samo kopiowanie.
Wstaw pole Edit (w nim użytkownik poda ścieżkę, gdzie ma być skopiowany CD), oraz przycisk.

W zdarzeniu OnClick przycisku:

var 
 X : TSHFileOpStruct; 
begin 
  with R do  
    begin 
      Wnd := Handle; //  uchwyt 
      lpszProgressTitle := 'Kopiuj pliki z CD'; Tytuł 
      wFunc :=FO_COPY;// opcja kopiowania 
      pFrom := PChar(Drive + ':\\nazwa_katalogu_z_którego);  z  
      pTo := PChar(Edit1.Text);  do
      fFlags := FOF_NOCONFIRMMKDIR; Flaga. Nie wyświetlaj okna gdy dany katalog już istnieje.
end; 
SHFileOperation(R);  


To by było na tyle

9 komentarzy

djkolo 2006-04-27 16:52

A mi wywala błąd:
for drive := 'A' to 'Z' do if
GetDriveType(PChar(Drive+':'))=DRIVE_CDROM then combobox1.items.add(drive);

fleming86 2004-08-18 18:10

a czy można pobrać mając literę napędu np. F: nazwę tego napędu (tak jak to pokazuje Nero np. LG LDW-811S)

-CD- 2004-07-29 11:44

Sorry,a nie latwiej uzyc DriveComboBox z zakladki Win3.1 ?? :)

matoos 2003-06-17 14:20

A nie mozna dac w tym comboboksie wyboru uzytkownikowi? To rozwiazuje problem wielu kompaktow :D

Spine 2003-05-05 18:36

Trzeba wykryć napędy ;)

player15 2003-04-17 15:39

Dlatego nie string, bo ktoś miże mieć kilka napędów CD. I właśnie to jest błędem. Jeżeli kotś zna sposób na rozwiąznie tego niech mi przesle na  e- mail to poprawię gotowiec.

roSzi 2003-04-15 11:17

nie rozumiem troche po co ten combobox (czemu nie np. string?), no ale ogolnie spoko ;]

player15 2003-04-14 13:02

Przecież nie ma jedenj techniki pisania programów. Owszem można inaczej ale i można zrobić tak. Poza tym najczęsciej stosowaną komendą do zamykania jest close; a można też Form1.close czy Application.Terminate.

Drajwer 2003-04-13 18:20

heheheheheh zamień:

begin
 for drive := 'A' to 'Z' do
  case GetDriveType(PChar(Drive+':')) of  // pobierz literę
    DRIVE_CDROM: Combobox1.items.Add(Drive); // wynik wyświetl w ComboBox1
  end;

na :
for drive := 'A' to 'Z' do if
GetDriveType(PChar(Drive+':'))=DRIVE_CDROM then combobox1.items.add(drive); <- krócej nieprawdaz?