Ir para conteúdo
Fórum Script Brasil
  • 0

Reconhecer Disquete No Drive


Paulo Nobre

Pergunta

Tenho um programa que oferece a possibilidade de fazer uma cópia

para um disquete. O código do botão que faz a cópia é o seguinte:

procedure TfrmCopiasDeSeguranca.cmdCopiarParaDisqueteClick(
  Sender: TObject);
begin
  Try
    CopyFile('Aniversariantes1.txt','A:\Aniversariantes1.txt',False);
    CopyFile('Aniversariantes2.txt','A:\Aniversariantes2.txt',False);
    CopyFile('Aniversariantes3.txt','A:\Aniversariantes3.txt',False);
    MessageBox(handle,'As cópias para o disquete foram executadas com sucesso!   ','BACKUP',MB_IconInformation);
  Except
    MessageBox(handle,'Não foi possível efetuar a cópia.'+#13+#10+'Entre em contato  pelo email pcnobre@ig.com.br.','ERRO NO BACKUP',MB_IconStop);
  end;
end;

Acontece o seguinte:

1)Se tem disquete no drive ele copia normalmente.(BOM!!!)

2)Se não tem disquete, é claro que ele não copia, porém ele não entra

no except, ou seja, ele termina dizendo que houve sucesso na cópia,isto é, ele funciona como se tivesse o disquete. (RUIM!!)

As dúvidas:

1) Como poderia sanar isto. Seria com alguma função para verificar se

existe disquete no drive A. Qual seria esta função.

Se não existe esta função, como faria , no código acima, para fazer caso não exista disquete no drive A,qe a mensagem do except seja dada para o usuário

2)Em quanto é feita a cópia o botão fica como se estivesse pressionado, ou seja, como se o programa não estivesse respondendo.

Como é que se coloca aquela animação, do windows, de arquivos sendo copiados.

Alguém poderia me ensinar a colocar isto no código acima

Agradeço antecipadamente qualquer ajuda.

Link para o comentário
Compartilhar em outros sites

2 respostass a esta questão

Posts Recomendados

  • 0

Olá Paulo,

Use essa função;

function DiskInDrive(const Drive: char): Boolean;
var
  DrvNum: byte;
  EMode: Word;
begin
  result := false;
  DrvNum := ord(Drive);
  if DrvNum >= ord('a') then dec(DrvNum,$20);
     EMode := SetErrorMode(SEM_FAILCRITICALERRORS);
  try
     if DiskSize(DrvNum-$40) <> -1 then result := true else messagebeep(0);
     finally SetErrorMode(EMode);
  end;
end;
Coloque no uses: ShellApi seu código ficaria +ou- assim:
procedure TfrmCopiasDeSeguranca.cmdCopiarParaDisqueteClick(
 Sender: TObject);
var
  Dados: TSHFileOpStruct;
begin
   if DiskInDrive('a') then begin
      try
         FillChar(Dados,SizeOf(Dados), 0);
         with Dados do begin
            wFunc := FO_COPY;
            pFrom := PChar('C:\Pasta\Aniversariantes1.txt');
            pTo := PChar('a:\');
            fFlags:= FOF_ALLOWUNDO;
         end;
         SHFileOperation(Dados);
         FillChar(Dados,SizeOf(Dados), 0);
         with Dados do begin
             wFunc := FO_COPY;
             pFrom := PChar('C:\Pasta\Aniversariantes2.txt');
             pTo := PChar('a:\');
             fFlags:= FOF_ALLOWUNDO;
         end;
         SHFileOperation(Dados);
         FillChar(Dados,SizeOf(Dados), 0);
         with Dados do begin
             wFunc := FO_COPY;
             pFrom := PChar('C:\Pasta\Aniversariantes3.txt');
             pTo := PChar('a:\');
             fFlags:= FOF_ALLOWUNDO;
         end;
         SHFileOperation(Dados);
      except
         MessageBox(handle,'Não foi possível efetuar a cópia.'+#13+#10+'Entre em contato  pelo email pcnobre@ig.com.br.','ERRO NO BACKUP',MB_IconStop);
      end;
   end else begin
      ShowMessage('Não Há disquete no drive.');
      Exit;
   end;
end;

Abs. Progr'amador.

Link para o comentário
Compartilhar em outros sites

  • 0

Olá,Progr'amador

Muito obrigado pela sua ajuda.

Ficou tudo bem claro e explicado.

Em relação a animação de arquivos copiados tipo a do windows, descobri que devo usar o componete animation.

abraços

Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,2k
    • Posts
      651,9k
×
×
  • Criar Novo...