Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   OOP (https://www.clubdelphi.com/foros/forumdisplay.php?f=5)
-   -   componente q lee unidades (https://www.clubdelphi.com/foros/showthread.php?t=42491)

kapullok_2006 16-04-2007 11:49:43

componente q lee unidades
 
:confused: :( hiola,tengo este código:
Código Delphi [-]
procedure TForm1.Timer1Timer(Sender: TObject);
var encontradas: boolean;
    n: integer;
begin
     encontradas:= false; //de momento no encuentra ficheros de fotos
 
     if not(encontradas) then
     begin
       FileListBox1.Directory:='G:\';
       directorio:='G:\';
       FilelistBox1.Update;
       if FileListBox1.Items.Count > 0 then
       begin
          Timer1.Enabled:= false;
          encontradas:= true;
          i:= 0;
          RellenarFotos(i);
          cantidades.Clear;
          for n:= 0 to FileListBox1.Items.Count-1 do
          begin
               cantidades.Add('0');
          end;
       end;
     end;
     if not(encontradas) then
     begin
          FileListBox1.Directory:= 'E:\';
          directorio:= 'E:\';
          FilelistBox1.Update;
          if FileListBox1.Items.Count > 0 then
          begin
               Timer1.Enabled:= false;
               encontradas:=true;
               i:= 0;
               RellenarFotos(i);
               cantidades.Clear;
               for n:= 0 to FileListBox1.Items.Count-1 do
               begin
                  cantidades.Add('0');
               end;
          end;
     end;
     if not(encontradas) then
     begin
          FileListBox1.Directory:= 'F:\';
          directorio:= 'F:\';
          FileListBox1.Update;
          if FileListBox1.Items.Count > 0 then
          begin
               Timer1.Enabled:= false;
               i:= 0;
               RellenarFotos(i);
               cantidades.Clear;
               for n:= 0 to FileListBox1.Items.Count-1 do
               begin
                  cantidades.Add('0');
               end;
          end;
     end;
     if not(encontradas) then
     begin
         FileListBox1.Directory:='H:\';
         directorio:='H:\';
         FileListBox1.Update;
         if FileListBox1.Items.Count>0 then
         begin
             Timer1.Enabled:=false;
             i:=0;
             RellenarFotos(i);
             cantidades.Clear;
             for n:= 0 to FileListBox1.Items.Count-1 do
             begin
               cantidades.Add('0');
             end;
         end;
     end;
end;
leerá esta unidad 'G',si está enchufada,pero si no está enchufada da error.
¿Algún componente q lee de lector de tarjetas,USB,grabadora DVD,Blueetooh,...?
ES para leer automáticamente fotos de una SD por ejemplo.

Saludos delfileros.

ixMike 17-04-2007 20:40:24

Bueno, así de primeras, si hay unidad G:\ las leerá, pero si no hay dará un error el resto del código no se ejecutará.

De todas formas, para lo que lo quieres es un poco raro el código. Lo ideal sería que el programa detectara cuándo se conecta una SD, o un PenDrive, o se introduce un CD/DVD... y buscar en ese unidad.
También deberías comprobar si una cierta unidad (G:\, E:\....) está disponible, si tiene disco....
Otra cosa que podrías hacer sería pasar unidad por unidad, pero no como lo haces (poniendo el código para cada letra), sino con un bucle, que pase primero por D:\, luego por E:\..., incrementando la letra a cada paso.

Si buscas en los foros encontrarás todo lo que necesitas al respecto.

Saludos.

P.D. Una pregunta, ¿el procedimiento de RellenarFotos analiza también los subdirectorios? Lo digo oprque sino sólo leerá las fotos que estén en el directorio raíz.

Chris 17-04-2007 21:09:56

Lo mejor que puedes implementar, que sería lo más profesional, sería utilizar los mensajes de windows, utilizando obviamente la api, en algunos casos es fácil, pero investiga talvez no es tan díficil para este caso.

Para el consejo dado por ixMike de ir escaneando cada unidad, es poco profesional, auque lo puedes hacer al momento de iniciar tu aplicación por primera vez, como por ejemplo presentarle al usuario "¿Desea que XXX busque en su PC todas su imágenes?". Bueno, si deseas implementar la busqueda de unidad en unidad, no lo hagas así:

Código Delphi [-]
...
buscarEn('D');
buscarEn('E');
buscarEn('F');
....

mejor haz un bucle con un código similar al siguiente

Código Delphi [-]
UnidadAnalizada := 'C'; //te recomiendo que empieze con "C" porque ya casi nadie utiliza la unidad de la disquera, mejos para fotos.
 
While UnidadAnalizada <> chr(ord('Z')+ 1) Do
Begin
 buscarEn(UnidadAnalizada);
 
 UnidadAnalizada := chr(ord(UnidadAnalizada[1]) + 1);
{lo que hace la línea anterior es aumetar cambiar a la siguiente letra con cada paso del bucle, así luego de procesar la "C" seguirá con la "D", luego con la "E" y así sucesivamente.}
end;

ajola te sirva mi humilde opinión. bye.

luisgutierrezb 17-04-2007 21:43:38

bueno, leer cada cierto tiempo no es optimo sin embargo el codigo se soluciona con un Try..Except para que no de errores o al menos manejarlos si no encuentra la unidad, por aqui eh visto mensajes acerca de monitorear una unidad o directorio por medio de API's dale una buscada eso si seria lo optimo

seoane 17-04-2007 21:50:33

En este tema hablamos sobre como detectar la inserción de una memoria usb
http://www.clubdelphi.com/foros/showthread.php?t=31486


La franja horaria es GMT +2. Ahora son las 01:32:11.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi