Comprobar la existencia de un disquette en la unidad.

function HayDisquete(var Razon: Integer): Boolean;
var
 Handle: THandle;
 FindData: TWin32FindData;
begin
    Razon := NO_ERROR;    { Al menos, de momento }
    FillChar(FindData, SizeOf(TWin32FindData), 0);
    Handle := Windows.FindFirstFile(PChar('A:\*.*'), FindData);
    if (INVALID_HANDLE_VALUE <> Handle) then
    begin
        Windows.FindClose(Handle);    { El disquete está montado y tiene algún archivo }
        Result := TRUE;
    end
    else
    begin
        Razon := Windows.GetLastError;
        Case (Razon) of
            ERROR_FILE_NOT_FOUND:
            begin
                Result := TRUE;        { El disquete está montado pero no tiene ningún archivo }
            end;
            ERROR_NOT_READY:
            begin
                Result := FALSE;    { El disquete no está montado }
            end;
            else
            begin
                Result := FALSE;    { ¿Qué error se ha producido?: comprobar a la salida }
            end;
        end;
    end;
end;

procedure TForm1.Button1Click(Sender: TObject);
var razon:integer;
begin
razon:=1;
if HayDisquete(razon) then
  showmessage('Hay disco');
end;