Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Прочее";
Текущий архив: 2013.03.22;
Скачать: [xml.tar.bz2];

Вниз

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

 
М   (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;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.48 MB
Время: 0.124 c
15-1329078602
Юрий
2012-02-13 00:30
2013.03.22
С днем рождения ! 13 февраля 2012 понедельник


15-1330115402
Юрий
2012-02-25 00:30
2013.03.22
С днем рождения ! 25 февраля 2012 суббота


6-1256903748
Валигози
2009-10-30 14:55
2013.03.22
Как получить ВСЕ свойства пользователя из Active Directory?


2-1336713116
igorium
2012-05-11 09:11
2013.03.22
ShellTreeView и папка "Рабочий стол"


2-1333101588
leklerk
2012-03-30 13:59
2013.03.22
Как сделать в DBGrid для поля заголовок в 2 строки?





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский