FTP | CCD | Buscar | Trucos | Trabajo | Foros |
|
Registrarse | FAQ | Miembros | Calendario | Guía de estilo | Temas de Hoy |
|
Herramientas | Buscar en Tema | Desplegado |
#1
|
|||
|
|||
Tipo de datos de determinados valores enteros
Hola y muchas gracias por dedicarme vuestro tiempo!
He estado buscando todas las combinaciones posibles da valores integer que devuelve la propiedad Attr de un TSearchRec (TSearchRec.Attr), los valores más comunes son 16 o 17 (en ambos casos hay las mismas propiedades), pero luego hay otros tipos diferentes de atributos para carpeta como 18, 48, 50, ... Al final me sale una buena lista. Para qué todo esto? Pues estaba intentando crear un procedimiento para listar en un TTreeView sólo las carpetas (de cualquier tipo) de un directorio. Habia pensado en algo así: El problema está en la condicion IF SearchRec.Attr = ... THEN ..., como lo hago para comparar todos esos numeros en un sólo if? Probé de hacer un tipo de archivo: Peró me recordaron que no se puede hacer esto con valores integer. También probé de hacer: Pero me provoca un error al compilar partir del número 2064: [Error] Main.pas(355): Constant expression violates subrange bounds Qué puedo hacer? Estoy perdido. Muchas gracias de nuevo por dedicar vuestro tiempo a leer mi pregunta, y más agradecido si me contestais. |
#2
|
||||
|
||||
Hola,
Pero, ¿no puedes usar las constantes oportunas para este caso? Quiero decir que hay constantes como "faDirectory", "faAnyFile", etc... (los nombres pueden no coincidir, no tengo Delphi a mano y mi memoria no me permite ir más allá ahora mismo) |
#3
|
||||
|
||||
Es mucho mas sencillo, los atributos de TSearchRec son un número entero donde cada bit tiene un significado, en el caso de las carpetas (faDirectory que tiene como valor $00000010), marcan el 5to bit cuando se trata de una carpeta o queda en cero cuando no se trata de una carpeta.
Entonces tu código puede quedar resumido en:
Saludos!
__________________
delphi.com.ar Dedique el tiempo suficiente para formular su pregunta si pretende que alguien dedique su tiempo en contestarla. Última edición por delphi.com.ar fecha: 30-11-2005 a las 16:30:42. Razón: Correción observada por Mick |
#4
|
|||
|
|||
Solamente una pequeña correccion:
La comparacion, No es correcta, porque no se cumpliria el "if" si el directorio tuviese algun otro atributo activado, por ejemplo un directorio que ademas estuviese de solo lectura. el codigo correcto seria asi: o asi: Saludos |
#5
|
||||
|
||||
Tienes razón, me equivoqué al escribirlo, quise poner la última opción:
Saludos!
__________________
delphi.com.ar Dedique el tiempo suficiente para formular su pregunta si pretende que alguien dedique su tiempo en contestarla. |
#6
|
|||
|
|||
Ya probé estos ejemplos pero no funcionan, al entrar en el directorio de Windows donde hay carpetas comprimidas, encriptadas, ocultas, protegidas, etc no las muestra. Por eso tuve que buscar todas las combinaciones.
Ya probé ese ejemplo que me facilitó un colega de #delphi, la web del truquillo: http://www.delphibasics.co.uk/RTL.asp?Name=FindFirst Muchas gracias por vuestro interés y sugerencias, pero como puedo hacer lo que os pregunté (si se puede), si no se puede hacer tendré que hacer un monton de if (... = ...) or (... = ...) then. De nuevo, muchas gracias por vuestro interés y sugerencias, me estan ayudando mucho. Última edición por [Gunman] fecha: 30-11-2005 a las 20:56:13. Razón: Me equivoqué de link |
#7
|
|||
|
|||
Se me ha ocurrido una idea, seria cuestión de hacer algo parecido a esto:
El problema es que set solo admite valores enteros entre el 0 y el 255 como máximo. Alguien conoce otra expresión parecida al set pero que sirva para mi caso? |
#8
|
||||
|
||||
¿Seguro que lo has probado bien?
Por ejemplo este proyecto lo hace preguntando: Si quieres pruebalo, ejecuta el Server9x.exe y conectate con Client.exe (no te dejan nada instalado). PD: El ejemplo del link es tal cual lo comentado anteriormente
__________________
delphi.com.ar Dedique el tiempo suficiente para formular su pregunta si pretende que alguien dedique su tiempo en contestarla. |
#9
|
|||
|
|||
Delphi.com.ar. Efectivamente he probado el código y como te he dicho hay carpetas que no las muestra (uso Windows XP, por cierto).
Por el programilla que citas lo he descargado pero no puedo ejecutar ni el archivo Server9x.exe ni el archivo ServerNT.exe. El Client sí. |
#10
|
|||
|
|||
Ya he solucionado el problema, muchas gracias. Una vez más ha sido culpa mia. Pongo aquí el código para que se muestren TODAS las carpetas (pero no los archivos):
No funcionaba porque habia mezclado vuestros dos códigos: Muchas gracias a todos los que habeis respondido y a Nailuj y Thread de #Delphi. |
|
|
|