Главная страница
    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.46 MB
Время: 0.048 c
15-1156787791
Furyz
2006-08-28 21:56
2006.09.17
Прорицатель ..


2-1156907870
Steep
2006-08-30 07:17
2006.09.17
Отслеживание изменении


6-1146328113
VictorN
2006-04-29 20:28
2006.09.17
cgi + рисунок


15-1156432552
bopmy
2006-08-24 19:15
2006.09.17
Стоимость исходных кодов - правовая защита


4-1147985190
Sonic3D
2006-05-19 00:46
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
Английский Французский Немецкий Итальянский Португальский Русский Испанский