Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2013.03.22;
Скачать: CL | DM;

Вниз

Как лучше оформить строку аттрибутов?   Найти похожие ветки 

 
М   (2012-06-02 02:38) [0]

Функция возвращает строку с атрибутами.


function GetAttributes(Value: LongInt): string;
begin
 Result:= "";

 If ((Value and faReadOnly)  = faReadOnly)  then Result:= Result + "Только для чтения,";
 If ((Value and faHidden)    = faHidden)    then Result:= Result + "Скрытый,";
 If ((Value and faSysFile)   = faSysFile)   then Result:= Result + "Системыный файл,";
 If ((Value and faVolumeID)  = faVolumeID)  then Result:= Result + "Метка диска,";
 If ((Value and faDirectory) = faDirectory) then Result:= Result + "Директория,";
 If ((Value and faArchive)   = faArchive)   then Result:= Result + "Файл,";
 If ((Value and faSymLink)   = faSymLink)   then Result:= Result + "Символическая ссылка,";
 If ((Value and faAnyFile)   = faAnyFile)   then Result:= Result + "Обычный файл";

 If (Result[Length(Result)] = ",")
 then Result[Length(Result)]:= " ";
end;


Как видите в каждой строке прописывается запятая.
Лишняя затирается.

Как лучше сделать сабж?


 
icelex ©   (2012-06-02 03:12) [1]

Ну, например, динамический массив/список строк, который набивается атрибутами, а затем соединяем массив в одну строку.
Только чем это лучше?


 
Юрий Зотов ©   (2012-06-02 08:02) [2]

> Как лучше сделать сабж?

Как угодно, как удобнее, как проще, как нравится и т. д. Но что в этом списке делает faAnyFile?

Посмотрите значения атрибутов и Вы увидите, что
faAnyFile =
 faReadOnly or faHidden or faSysFile or faVolumeID or faDirectory or faArchive

Значит, строку "Обычный файл" Ваш код выдаст только вместе с шестью другим строками. Какой тогда в ней смысл?


 
М   (2012-06-02 10:45) [3]


> Юрий Зотов ©   (02.06.12 08:02) [2]


Просто в справке отчего-то faArchive - Not used, поэтому так и подумал.


faArchive 32 Archive files Not used.
faSymLink 64 Symbolic link File is a symbolic link.
faAnyFile 71 Any file Any file.



Плюс faAnyFile определен простым числом:


 faAnyFile   = $0000003F;


 
Омлет ©   (2012-06-02 11:01) [4]

GetAttributes(0) -> AV.


 
Омлет ©   (2012-06-02 11:16) [5]

function GetAttributes(Value: LongInt): string;
const
 FILE_ATTRIBUTES: array[0..7] of record flag: cardinal; name: string end =
   ((flag: faReadOnly;  name: "Только для чтения"),
    (flag: faHidden;    name: "Скрытый"),
    (flag: faSysFile;   name: "Системыный файл"),
    (flag: faVolumeID;  name: "Метка диска"),
    (flag: faDirectory; name: "Директория"),
    (flag: faArchive;   name: "Архивный"),
    (flag: faSymLink;   name: "Символическая ссылка"),
    (flag: faAnyFile;   name: "Обычный файл"));
var
 i: integer;
begin
 Result:= "";
 for i := low(FILE_ATTRIBUTES) to high(FILE_ATTRIBUTES) do
 begin
   with FILE_ATTRIBUTES[i] do
     if Value and flag = flag then
     begin
       if Result <> "" then
         Result := Result + ", " + name
       else
         Result := name;
     end;
 end;
end;


Только вот faAnyFile используется только при поиске, по-моему. В атрибутах файлов этого флага нет.


 
Омлет ©   (2012-06-02 11:18) [6]


> Юрий Зотов ©   (02.06.12 08:02) [2]

А точно, faAnyFile - это не флаг, а набор флагов.


 
Омлет ©   (2012-06-02 11:21) [7]

function GetAttributes(Value: LongInt): string;
const
 FILE_ATTRIBUTES: array[0..6] of record flag: cardinal; name: string end =
   ((flag: faReadOnly;  name: "Только для чтения"),
    (flag: faHidden;    name: "Скрытый"),
    (flag: faSysFile;   name: "Системыный файл"),
    (flag: faVolumeID;  name: "Метка диска"),
    (flag: faDirectory; name: "Директория"),
    (flag: faArchive;   name: "Архивный"),
    (flag: faSymLink;   name: "Символическая ссылка"));
var
 i: integer;
begin
 Result:= "";
 for i := low(FILE_ATTRIBUTES) to high(FILE_ATTRIBUTES) do
 begin
   with FILE_ATTRIBUTES[i] do
     if Value and flag = flag then
     begin
       if Result <> "" then
         Result := Result + ", " + name
       else
         Result := name;
     end;
 end;
 if Result = "" then
   Result := "Обычный файл";
end;


 
Anatoly Podgoretsky ©   (2012-06-02 14:00) [8]

> М  (02.06.2012 10:45:03)  [3]

Это не та справка.


 
М   (2012-06-02 15:20) [9]


> Anatoly Podgoretsky ©   (02.06.12 14:00) [8]


В смысле не та?
А какая должна быть?


 
Anatoly Podgoretsky ©   (2012-06-02 16:12) [10]

> М  (02.06.2012 15:20:09)  [9]

Должна быть по VCL


 
Давайте будем жрать!   (2012-06-02 16:31) [11]


> Anatoly Podgoretsky ©   (02.06.12 16:12) [10]
Да лучше б MSDN... Тогда бы анахронизмы вроде faVolumeID не всплівали.


 
М   (2012-06-02 17:45) [12]


> Anatoly Podgoretsky ©   (02.06.12 16:12) [10]


Она по VCL. Delphi 7.


 
Anatoly Podgoretsky ©   (2012-06-02 19:42) [13]

> М  (02.06.2012 17:45:12)  [12]

Приведен текст справки по CLX/Linux



Страницы: 1 вся ветка

Текущий архив: 2013.03.22;
Скачать: CL | DM;

Наверх




Память: 0.5 MB
Время: 0.057 c
3-1282290507
Дмитрий Белькевич
2010-08-20 11:48
2013.03.22
сообщение CHARACTER SET WIN1251 is not installed в FB embedded


3-1275925400
Дмитрий Белькевич
2010-06-07 19:43
2013.03.22
Оптимизировать запрос


15-1339360203
Юрий
2012-06-11 00:30
2013.03.22
С днем рождения ! 11 июня 2012 понедельник


3-1276604494
Eugene1501
2010-06-15 16:21
2013.03.22
Как блокировать таблицу при помощи ADO


2-1330273177
Михаил
2012-02-26 20:19
2013.03.22
Почему изменяются поля в глобальной переменной