Форум: "Начинающим";
Текущий архив: 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