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

Вниз

Флаги.   Найти похожие ветки 

 
AlexanderMS ©   (2006-08-28 18:29) [0]

Скажите, пожалуйста, как создавать переменные типа флагов (как атрибут файла) и управлять ими? То есть дать на выбор переменные, складывая которые можно получить одну переменную-флаг (например, типа Word) и использовать её, к примеру, в качестве параметра процедуры. И как потом узнать, какие опции включены во флаг, а какие - нет.


 
Ega23 ©   (2006-08-28 18:31) [1]

Пример:


function SetFontStyle(const Value: integer): TFontStyles;
begin
Result:=[];
if ((Value shr 0) and 1)=1 then Result:=Result+[fsBold];
if ((Value shr 1) and 1)=1 then Result:=Result+[fsItalic];
if ((Value shr 2) and 1)=1 then Result:=Result+[fsUnderline];
if ((Value shr 3) and 1)=1 then Result:=Result+[fsStrikeout];
end;

//******************************************************************************** ***

function GetFontStyle(const Value: TFontStyles): Integer;
begin
Result:=0;
if (fsBold in Value) then Result:=Result or 1;
if (fsItalic in Value) then Result:=Result or 2;
if (fsUnderline in Value) then Result:=Result or 4;
if (fsStrikeout in Value) then Result:=Result or 8;
end;


 
Ega23 ©   (2006-08-28 18:32) [2]

Таким образом, вместо того, чтобы в БД описывать атрибуты фонта четырьмя полями, обходимся одним.


 
begin...end ©   (2006-08-28 19:51) [3]

> Ega23 ©   (28.08.06 18:31) [1]

Функции можно немного упростить:

function SetFontStyle(const Value: Byte): TFontStyles;
begin
 Result := TFontStyles(Value)
end

function GetFontStyle(const Value: TFontStyles): Byte;
begin
 Result := Byte(Value)
end


:о)))))

Но этот способ опирается на внутреннее представление множеств (в их текущей реализации), поэтому я не могу рекомендовать его в качестве кода, который будет надёжен и в будущем.


 
Virgo_Style ©   (2006-08-28 21:18) [4]

Ega23 ©   (28.08.06 18:31) [1]

Любопытно, кстати, с чем связан разный стиль представления степеней двойки - (1 shr N) - в Set и <константа> - в Get. Разные люди писали? Как-то чуточку режет глаз.


 
Ega23 ©   (2006-08-29 10:22) [5]


> Разные люди писали? Как-то чуточку режет глаз.


Писал я. Но очень давно. Переписывать нет желания...  :о)


 
Ega23 ©   (2006-08-29 10:24) [6]


> begin...end ©   (28.08.06 19:51) [3]


О как... Не знал, что можно так приводить...



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

Форум: "Начинающим";
Текущий архив: 2006.09.17;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.45 MB
Время: 0.039 c
15-1156231179
Шмелъ
2006-08-22 11:19
2006.09.17
Сайт


15-1155753195
Ketmar
2006-08-16 22:33
2006.09.17
"а на седьмой день ему всё осто....о" (ц)


2-1156608865
хм...
2006-08-26 20:14
2006.09.17
Edit


5-1139387480
WellSlava
2006-02-08 11:31
2006.09.17
компонеты Raize


15-1156707585
Loginov Dmitry
2006-08-27 23:39
2006.09.17
Вопреки ругани форумчан





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский