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

Вниз

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

 
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;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.037 c
4-1147802521
ChainikDenis
2006-05-16 22:02
2006.09.17
Косяк с принтером, а точнее с определением его статуса


2-1156955753
zxcv
2006-08-30 20:35
2006.09.17
как узнать имя активного окна


6-1146013749
tigra
2006-04-26 05:09
2006.09.17
TIdAttachment


15-1156269017
Nic
2006-08-22 21:50
2006.09.17
Отправление лесом


15-1156359146
Petr V. Abramov
2006-08-23 22:52
2006.09.17
Про обчество патредблеия и старых пердунов