![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Флаги.
AlexanderMS © (2006-08-28 18:29:00)Скажите, пожалуйста, как создавать переменные типа флагов (как атрибут файла) и управлять ими? То есть дать на выбор переменные, складывая которые можно получить одну переменную-флаг (например, типа Word) и использовать её, к примеру, в качестве параметра процедуры. И как потом узнать, какие опции включены во флаг, а какие - нет.
Ega23 (2006-08-29 10:24:00) [1]
> begin...end © (28.08.06 19:51) [3]
О как... Не знал, что можно так приводить...
Ega23 (2006-08-29 10:22:00) [2]
> Разные люди писали? Как-то чуточку режет глаз.
Писал я. Но очень давно. Переписывать нет желания... :о)
Virgo_Style (2006-08-28 21:18:00) [3]Ega23 © (28.08.06 18:31) [1]
Любопытно, кстати, с чем связан разный стиль представления степеней двойки - (1 shr N) - в Set и <константа> - в Get. Разные люди писали? Как-то чуточку режет глаз.
begin...end (2006-08-28 19:51:00) [4]> 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
:о)))))
Но этот способ опирается на внутреннее представление множеств (в их текущей реализации), поэтому я не могу рекомендовать его в качестве кода, который будет надёжен и в будущем.
Ega23 (2006-08-28 18:32:00) [5]Таким образом, вместо того, чтобы в БД описывать атрибуты фонта четырьмя полями, обходимся одним.
Ega23 (2006-08-28 18:31:00) [6]Пример:
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;