Главная страница
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.046 c
3-1152876660
ANB
2006-07-14 15:31
2006.09.17
Посоветуйте способы работы с XML в оракле


4-1147863368
roughneck
2006-05-17 14:56
2006.09.17
InsertMenu с картинкой


2-1156587361
small
2006-08-26 14:16
2006.09.17
фокус в TstringGrid


15-1156482508
КаПиБаРа
2006-08-25 09:08
2006.09.17
Право на получение платной услуги


15-1156691988
Konstantin555
2006-08-27 19:19
2006.09.17
Что означает сигнал компьютера в виде сирены?