Hola,
Como funcionar... parece que funciona. Sin embargo, me queda la espinita de no saberme quitar de encima el "mapa de unidades" que conformo "directamente" y que creo que puede hacerse de otra forma más elegante. Por lo demás, lo mío, lamentablemente, no son las matemáticas, así que sigo son comprender muy bien qué ocurre a nivel de "bits", quizá algún día... sea como sea, el código podría quedar más o menos así, a modo de ejemplo:
Código Delphi
[-]
procedure TForm2.StShellNotification1DriveSpaceChange(
Sender: TObject; Drive: Cardinal);
const
DRIVES : array[ 0..25 ] of char =
(
'A', 'B', 'C', 'D', 'E', 'F',
'G', 'H', 'I', 'J', 'K', 'L',
'M', 'N', 'O', 'P', 'Q', 'R',
'S', 'T', 'U', 'V', 'W', 'X',
'Y', 'Z'
);
var
i : byte;
s : string;
begin
s := '';
for i := Low( DRIVES ) to High( DRIVES ) do
begin
if Drive shr i and 1 = 1 then
begin
if s = '' then
s := DRIVES[ i ]
else
s := s +' # '+ DRIVES[ i ];
end;
end;
ShowMessage( 'Drive Space Change in : ' + s );
end;
Por supuesto, cualquier sugerencia será bienvenida.
