Ver Mensaje Individual
  #11  
Antiguo 18-04-2006
Avatar de Lepe
[Lepe] Lepe is offline
Miembro Premium
 
Registrado: may 2003
Posts: 7.424
Reputación: 28
Lepe Va por buen camino
Reconozco que no he usado mucho los controles ShellTreeview y ShellListView, por tanto, al ver en tu codigo SelectedFolder.PathName, creía que el objeto seleccionado era una carpeta en lugar de un archivo.


Sobre sysutils, deberías tenerlo en el "uses" de tu formulario, es simplemente una unidad que tienes que usar para que reconozca la constante MAXCARDINAL.

El hecho de multiplicar por MAXCARDINAL, es por definición de la API de windows, no usan un tipo de datos Int64 (que es mucho mayor que un DWORD), así que dividen ese valor en 2 valores, la parte alta (filesizeHigh) y la parte baja (filesizeLow).

Imagina que queremos guardar un valor de 8 bits pero solo tenemos registros de 4 bits. En este caso queremos guardar el valor 130, la forma de dividirlo en dos partes sería así:

130 equivale en binario a: 10000010 , pero son 8 bits (8 digitos)

Como tenemos solo 4 bits, lo dividimos en 2 partes:
- por un lado la parte alta (los 4 bits de la izquierda) 1000
- y por el otro la parte baja (los 4 bits de la derecha) 0010

Si miras independientemente los valores, 1000 equivale a 8 en decimal, y 0010 equivale a 2 en decimal, que obviamente no es el 130 que queríamos guardar.

En este caso, el máximo número que se puede almacenar con 4 bits sería 2^4 - 1 , es decir 16 valores, desde el cero hasta el quince, para poder sacar el valor real, la formula a usar es:

Código:
  parte_alta * 16 + parte_baja
      8      * 16 +    2         = 130
Al aplicar la fórmula con el 8 y con el 2, si obtenemos el 130 que queríamos guardar.

Un número DWORD usa 32 bits; un Int64 usa 64 bits, justo el doble de bits, por tanto dividen el Int64 en dos DWORD, y no hay más remedio que usar la formula de marras .

Es un truco muy usado en la API de windows.

Saludos.
__________________
Si usted entendió mi comentario, contácteme y gustosamente,
se lo volveré a explicar hasta que no lo entienda, Gracias.
Responder Con Cita