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í:
Código Delphi
[-]
procedure TForm1.GetFolders(CurrLocalPath: String);
var
SearchRec: TSearchRec;
begin
TreeView.Items.Clear;
SearchRec.ExcludeAttr := 32;
if FindFirst(IncludeTrailingPathDelimiter(CurrLocalPath)+'*.*', faAnyFile,
SearchRec) = 0 then
repeat
if SearchRec.Attr then
TreeView.Items.Add(nil,SearchRec.Name);
until FindNext(SearchRec) <> 0;
FindClose(SearchRec);
end;
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:
Código Delphi
[-]
TDirs = (16, 17, 18, 48, 50, 2064, 2066, 2096, 2098, 8208, 8210,
8240, 8242,10256, 10258, 10288, 10290, 16400, 16402, 16432, 16434, 24592, 24594, 24624,246269);
Peró me recordaron que no se puede hacer esto con valores integer.
También probé de hacer:
Código Delphi
[-]
if SearchRec.Attr in[16, 17, 18, 48, 50, 2064, 2066, 2096, 2098, 8208, 8210,
8240, 8242,10256, 10258, 10288, 10290, 16400, 16402, 16432, 16434, 24592, 24594, 24624,246269] then
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.