С помощью класса ТРеп создается объект-перо, служащий для вычерчивания линий.

Далее перечислены свойства класса, property Color: TColor;
Цвет вычерчиваемых пером линий, property Mode: TPenMode;

Определяет способ взаимодействия линий с фоном (см. далее).

property Style: TPenStyle;

Определяет стиль линий (рис. 4.3). Учитывается только для линий толщиной 1 пиксел. Для толстых линий стиль всегда psSolid (сплошная).

property Width: Integer;

Толщина линий в пикселах экрана.

Свойство Mode может принимать одно из следующих значений:

• pmBlack - линии всегда черные, свойства Color и Style игнорируются;
• pmWhite - линии всегда белые, свойства Color и Style игнорируются;
• pmNop - цвет фона не меняется (линии не видны);
• pmNot - инверсия цвета фона, свойства Color и Style игнорируются;
• ртСору - цвет линий определяется свойством Color пера;
• pmNotCopy - инверсия цвета пера, свойство Style игнорируется;
• pmMergePenNot - комбинация цвета пера и инверсного цвета фона;
• pmMaskPenNot - комбинация общих цветов для пера и инверсного цвета фона, свойство Style игнорируется;
• pmMergeNotPen - комбинация инверсных цвета пера и фона;
• pmMaskNotPen - комбинация общих цветов для инверсных цвета пера и фона, свойство Style игнорируется;
• pmMerge - комбинация цветов пера и фона;
• pmNotMerge - инверсия цветов пера и фона, свойство Style игнорируется;
• pmMask - общие цвета пера и фона;
• pmNotMask - инверсия общих цветов пера и фона;
• pmXor - объединение цветов пера и фона операцией XOR;

• pmNotXor - инверсия объединения цветов пера и фона операцией XOR.

Стили линий показаны в верхней части рис. 4.3. Этот рисунок создан с помощью программы $(S0URCE)\Ch04\TPen\PenDemo.dpr.

4.4.2. Класс ТРеп

Рис. 4.3. Стили линий

В листинге 4.1 показан текст модуля формы.

Листинг 4.1. Текст модуля формы примера PenDemo.dpr

procedure TfmExample.bbRunClick(Sender: TObject); var k: Integer; const

Names: array [0..6] of String[30]= ('psSolid1, 'psDash*, 'psDot', ■psDashDot1, 'psDashDotDot1, •psClear', 'psInsideFrame1); begin // Вычерчиваем 7 линий разного стиля: with pbOut.Canvas, Pen do begin for k := 0 to б do begin Style : = TPenStyle (k) ; // Устанавливаем очередной стиль

Mo veTo (10, k*25+10); // Смеща ем перо к на чалу линии

LineTo(350, k*25+10) ; // Вычерчиваем линию

TextOut(360, k*25+5, Names[k]) // Выводим название стиля end end;
lbOutput.Caption := 'Выберите цвет фона и линии, режим Mode ' + •и щелкните на кнопке "Линия"1;
end;

const //16 названий возможных значений свойства Mode

PenMode: array [0..15] of String[13] = ('pmBlack', 'pmWhite', 'pmNop', *pmNot', *pmCopy', 1pmNotCopy*, 'pmMergePenNot1, 'pmMaskPenNot1, *pmMergeNotPen', *pmMaskNotPen', 'pmMerge', ■pmNotMrege*, 'prnMask', 'pmNotMask', 'pmXOR', ,pmNotWor,);
procedure TfmExample.bbPenClick(Sender: TObject); var
X, Y, L: Integer;
begin
with pbPen.Canvas do begin
Pen.Width := 5;

// Закрашиваем фон:

Brush.Color := cbBack.Colors[cbBack.Itemlndex]; FillRect(ClipRect);

// Устанавливаем цвет линии и режим:

Pen.Color := cbPen.Colors[cbPen.Itemlndex];
Pen.Mode := TPenMode(cbMode.Itemlndex);

// Центрируем линию в поле pbPen и выводим ее:

X := 10;
Y := ClipRect.Bottom div 2; L := ClipRect.Right-10; MoveTo(X, Y) ; LineTo(L, Y) end end;
procedure TfmExample.FormCreate(Sender: TObject); // Наполняет список cbMode в момент создания формы var
k: Integer;
begin
cbMode.Items.Clear;

for k := 0 to 15 do tM

cbMode.Iterns.Add(PenMode[k])
end;

Обратите внимание на оператор

Style := TPenStyle(k); //Устанавливаем очередной стиль

Значениями свойства TPenStyle могут быть элементы перечисленного типа, которые есть не что иное как целочисленные значения. В программе можно написать

Style := psNot;

В этом случае компилятор по описанию типа TPenStyle найдет нужную целочисленную константу и подставит ее в выражение. А следующий оператор будет ошибочным, так как переменной Style перечисленного типа TPenStyle присваивается строковое значение:

Style := 'psNot';

Мы воспользовались тем, что порядок перечисления значений в константе Names соответствует перечислению значений типа TPenStyle, и применили автофункцию приведения типов TPenStyle для преобразования целочисленного значения в значение перечисленного типа (автофункции приведения автоматически создаются для каждого типа; их имена совпадают с именами соответствующих типов). Заметьте, что следующий оператор недопустим, поскольку свойству перечисленного типа присваивается целочисленное значение:

Style := к;

4.4. Графический инструментарий || Оглавление || 4.4.3. Класс TBrush


Искусство создания компонентов Delphi



Новости за месяц

  • Октябрь
    2019
  • Пн
  • Вт
  • Ср
  • Чт
  • Пт
  • Сб
  • Вс