TFont jako stała, TFontStyle jako stała

0
  1. Jak w temacie, mam problem z rozpisaniem fonta jako stałej. Robię coś takiego:
const
MyFont : TFont =(

  Charset : DEFAULT_CHARSET;
  Color : clRed;
  Height : -11;
  Name : 'Arial';
  Pitch : fpDefault;
  Size : 8

);

Niestety wywala mi błąd: Undeclared Identifier "Charset". Koloru i reszty też nie rozpoznaje.

  1. Mimo prób nie udało mi się tego rozwiązać, więc zmajstrowałem własny rekord czcionki i potem zdefiniowałem go jako stałą:
type
TCustomFont = record
  Charset : TFontCharset;
  Color : TColor;
  Height : Integer;
  Name : TFontName;
  Pitch : TFontPitch;
  Size : Integer;
  Style : TFontStyle;
end;

Tutaj wszystko działa dobrze, ale mam problem z ustawieniem właściwości TFontStyle. Zdefiniowanie jednego stylu jest proste, np.:

Style : fsBold;

Niestety nie mogę sobie poradzić z ustawieniem kilku opcji jednocześnie, np. fsBold, fsItalic, fsUnderline.

Przy zmiennych jest to proste, np.:

Font.Style := Font.Style + [fsBold]

Nie wiem natomiast jak powinna wyglądać składnia przy stałych. Ktoś pomoże?

0

Ad 1: TFont to klasa, więc odpada takie wykorzystanie.
Ad 2:

Type TMySet = Set of (sOne, sTwo, sThree);

Type TRecord =
	Record
		MySet: TMySet;
	End;
	
Const ConstRecord: TRecord =
	(
		MySet: [sOne, sThree];
	);

Begin
End.
0

Czyli upraszczając, wystarczyło:

Style : TFontStyle;

zmienić na:

Style : Set of TFontStyle;

Dzięki temu można przypisywać normalnie, np.:

Style : [fsBold, fsItalic, fsUnderline];

Dzięki!

PS. Skoro TFontStyle jest typem enumeratywnym, to czemu nie jest automatycznie traktowany właśnie jako set, tylko jako "pojemnik" dla jednego stylu?

0

Jest enumem, ale nie jest zbiorem.
Domyślnie enum może przyjąć jedną wartość.

0

Zdefiniowanie jednego stylu jest proste, np.:

Style : fsBold;

Niestety nie mogę sobie poradzić z ustawieniem kilku opcji jednocześnie, np. fsBold, fsItalic, fsUnderline.

@Crow - skoro TFontStyle to typ wyliczeniowy, to zmienna tego typu może przyjmować tylko i wyłącznie jedną wartość; Jeśli więc potrzebujesz w jednej zmiennej przechować kilka wartości typu TFontStyle to musisz posiadać ich zbiór;

Zapewne nie zauważyłeś, ale najróżniejsze komponenty mają właściwość Font.Style, która może zawierać kilka enumów; I tak samo - zapewne nie zauważyłeś, że taka właściwość nie jest typu TFontStyle, a TFontStyles (s na końcu oznacza liczbę mnogą, czyli wiele styli);

Czyli taki typ już istnieje w bibliotece standardowej, ale go przeoczyłeś.

1 użytkowników online, w tym zalogowanych: 0, gości: 1