Фрейм delphi и работа с фреймами

Статья. Занятие 2_8.

Существуют разнообразные причины использования такого компонента, как «Tframe».

Что такое «фрейм»? Это группирующий компонент, обладающий многими свойствами, присущими форме. Это как бы облегчённая форма.

Фрейм, наподобие формы, имеет своё отображение в виде окна и сопоставленный с ним модуль Unit.

Поэтому, если создана только одна форма, то первый фрейм будет всегда иметь имя Frame2, а модуль — Unit2.

И описание фрейма, и его модуль сохраняются в директории проекта так же, как и обычные модули.

Использование фреймов не столь очевидно, как других компонентов. Иметь дело с фреймом, или нет, решать программисту в зависимости от его опыта и решаемой задачи.

По крайней мере утверждается, что использование фреймов позволяет поддерживать стилистическое единство в различных приложениях. Это особенно важно при коллективной разработке приложений группой разработчиков.

Пока просто познакомимся, как надо работать с фреймами.

Использование фреймов в delphi

Размещение фрейма в проекте состоит из двух этапов.

Во первых, надо создать сам фрейм, точнее — класс, на основе которого будут создаваться экземпляры фрейма.

Для этого выбирают File/New/Frame.

Появляется окно фрейма

и модуль

unit Unit2;

interface

uses

Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,

Dialogs, ComCtrls;

type

TFrame2 = class(TFrame)

private

{ Private declarations }

public

{ Public declarations }

end;

implementation

{$R *.dfm}

end.

Как мы видим, по структуре всё аналогично модулю формы.

Особенности начинаются дальше.

Если сохранить проект, то в папке проекта появляется файл unit2.pas.

По сути, мы создали новый класс типа Tframe.

Теперь разместим на форме сам экземпляр фрейма (или несколько).

Для этого используем компонент «Frame»:

Фрейм delphi

Открывается окно со списком имеющихся фреймов (если их несколько). Выбираем нужный нам и нажимаем «OK». Фрейм появляется на форме.

Фрейм delphi

Пока в нём ничего нет, но ссылка на него уже встроена в класс формы. Это видно и в инспекторе объектов, и в самом коде модуля формы:

Фрейм delphi

unit Unit1;

interface

uses

Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,

Dialogs, Unit2;

type

TForm1 = class(TForm)

Frame21: TFrame2;

private

{ Private declarations }

public

{ Public declarations }

end;

var

Form1: TForm1;

implementation

{$R *.dfm}

end.

Теперь, когда фрейм стал свойством формы, к нему можно обращаться стандартным образам, как и к любому другому свойству.

Но самое интересное впереди. Вернёмся в Unit2, откроем окно фрейма и изменим какое либо свойство фрейма. Например, цвет. Сделаем фрейм красным.

Фрейм delphi

Вернувшись на «Form1» мы увидим, что объект фрема «Frame2» тоже поменял цвет!

Фрейм delphi

Более того, если на форме разместить ещё один фрейм, то он тоже будет красного цвета.

Фрейм delphi

Если теперь в свойствах у Frame2 в Unit2 изменить цвет на зелёный, то автоматически изменится цвет объектов «Frame» на форме:

Фрейм delphi

Но вот какой нюанс. Изменим цвет у объекта Frame21 на жёлтый.

Фрейм delphi

После этого вернёмся в Unit2 – Frame2. Изменим цвет Frame2 на пурпурный и вернёмся на Form1. Теперь мы увидим, что автоматически изменился цвет только для объекта Frame22:

Фрейм delphi

Цвет у фрейма Frame21 не изменился.

Отсюда делаем вывод, что если изменить вручную какое-либо свойство у объекта-фрейма, то после изменения аналогичного свойства у фрейма-прородителя это изменение на отредактированный фрейм не распространится.

Поэтому надо быть аккуратным и стараться не менять свойства у самого фрейма, а также у компонетов, расположенных на фрейме, вручную.

Сохранение фрейма.

Разработанный фрейм можно сохранить, чтобы его можно было использовать в других проектах.

Для этого щёлкаем правой кнопкой по фрейму и из контекстного меню выбираем «добавить в депозитарий»

Фрейм delphi

Открывается окно диалога:

Фрейм delphi

Заполняем поля. Например:

Title – Проба; Description – Подбор цвета; Page – или выбираем из имеющихся из выпадающего списка, или ввести название одной из закладок (чтобы сразу вызвать это окно диалога, выбираем File/New/Other… ):

Фрейм будет помещён на закладку с заданным именем.

Введя для Page новое значение MyPage, получаем новую закладку с этим именем:

Фрейм delphi

Как в delphi добавить фрейм на форму из депозитария

Теперь в любой проект можно вставить фрейм:

Фрейм delphi

Теперь выберем способ размещения фрейма в приложении.

«Сору» — фрейм просто будет скопирован в приложение. При этом никакой дальнейшей связи между исходным фреймом и копией не будет.

«Inherit» -в этом случае при изменении свойств фрема, хранящегося в Депозитарии, автоматически изменятся фреймы проекта (после перпекомпиляции проекта).

Это произойдёт при перекомпиляции во всех проектах, которые наследуют этот фрейм. Связь действует в одну сторону — изменения объектов-фреймов в проекте не влияют на фрейм в Депозитарии.

«Use» – фрейм из Депозитария становится частью проекта. Изменения, внесённые во фрейм в процессе раюоты с проектом, отражаются и сохраняются во фрейме в Депозитарии.Таким образом можно редактировать фрейм.

Delphi frame — пример программы.

Создадим фрейм, дублирующий результат работы компонента «ColorDialog», расположенного на вкладке «Dialogs».

Как известно, цвет на мониторе формируется из трёх компонент — красного, зелёного и синего. Смешивая эти простые (чистые) цвета в разных пропорциях (придавая цвету разную яркость), получают все возможные цветовые оттенки.

Диапазон изменения яркости каждого цвета — от 0 до 254.

Разместим на фрейме три «ползунка» — регуляторы типа «TrackBar» на закладке «Win32» и компонент «Panel».

Удаляем из компонента «Panel» значение свойства «Caption».

Ширину трекбаров устанавливаем равной 500.

На метках «Label» размещаем названия значений: «Красный», «Зелёный», «Синий».

Значения max для всех трекбаров выставляем равным 254.

Чтобы шкала не была слишком «густой», выставляем значение «Frecuency» равным 10.

Далее пишем следующий код:

unit Unit2;

interface

uses

Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,

Dialogs, ComCtrls, StdCtrls, ExtCtrls;

type

TFrame2 = class(TFrame)

Panel1: Tpanel;// эти переменные добаляются автоматически при размещении компонеты на фрейме;

TrackBar1: TTrackBar;

TrackBar2: TTrackBar;

TrackBar3: TTrackBar;

Label1: TLabel;

Label2: TLabel;

Label3: TLabel;

procedure TrackBar1Change(Sender: TObject);

procedure TrackBar2Change(Sender: TObject);

procedure TrackBar3Change(Sender: TObject);

private

r,g,b:integer;//записываем вручную

procedure prCol;//записываем вручную

public

c:tColor;//записываем вручную

end;

implementation

{$R *.dfm}

procedure TFrame2.prCol;

begin

r:=TrackBar1.Position;

g:=TrackBar2.Position;

b:=TrackBar3.Position;

c:=rgb(r,g,b);

Panel1.Color:=c;

end;

procedure TFrame2.TrackBar1Change(Sender: TObject);

begin

prCol;

end;

procedure TFrame2.TrackBar2Change(Sender: TObject);

begin

prCol;

end;

procedure TFrame2.TrackBar3Change(Sender: TObject);

begin

prCol;

end;

end.

Формирование delphi tframe

В описание типа TFrame2 в секцию private вводим поля r,g,b:integer. Данные этой секции не будут видны в модуле Unit1.Также в секцию private вводим объявление процедуры-метода procedure prCol.

В секцию public вводим поле c:tColor,

Любое изменение положения ползунка компонента TrackBar1 вызывает событие TrackBar1Change, из которого вызывается метод prCol. Аналогично для двух других.

В самой процедуре prCol производится считывание положений ползунков и формирование значения цвета в переменную «с», доступную через объект фрейма в Unit1.

Полученный цвет отображается на панели, расположенной на фрейме.

После манипуляций с ползунками и получения нужного оттенка цвета нажимается Button1 и окрашивается панель, расположенная на Form1:

procedure TForm1.Button1Click(Sender: TObject);

begin

form1.panel1.Color:= form1.Frame21.c;

end;

В итоге, например, будем иметь:

Фрейм delphi

* * *

Обновлено: 15.02.2021 — 22:16
  1. Спасибо, ваш сайт очень полезный!

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *