Статья. Занятие 2_8.
Существуют разнообразные причины использования такого компонента, как «Tframe».
Что такое «фрейм»? Это группирующий компонент, обладающий многими свойствами, присущими форме. Это как бы облегчённая форма.
Фрейм, наподобие формы, имеет своё отображение в виде окна и сопоставленный с ним модуль Unit.
Поэтому, если создана только одна форма, то первый фрейм будет всегда иметь имя Frame2, а модуль — Unit2.
И описание фрейма, и его модуль сохраняются в директории проекта так же, как и обычные модули.
Использование фреймов не столь очевидно, как других компонентов. Иметь дело с фреймом, или нет, решать программисту в зависимости от его опыта и решаемой задачи.
По крайней мере утверждается, что использование фреймов позволяет поддерживать стилистическое единство в различных приложениях. Это особенно важно при коллективной разработке приложений группой разработчиков.
Пока просто познакомимся, как надо работать с фреймами.
Использование фреймов в delphi
Размещение фрейма в проекте состоит из двух этапов.
Во первых, надо создать сам фрейм, точнее — класс, на основе которого будут создаваться экземпляры фрейма.
Для этого выбирают File/New/Frame.
Появляется окно фрейма
![](https://programlife.ru/wp-content/uploads/2021/02/image-20.png)
и модуль
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](https://programlife.ru/wp-content/uploads/2021/02/image-19.png)
Открывается окно со списком имеющихся фреймов (если их несколько). Выбираем нужный нам и нажимаем «OK». Фрейм появляется на форме.
![Фрейм delphi](https://programlife.ru/wp-content/uploads/2021/02/image-20.png)
Пока в нём ничего нет, но ссылка на него уже встроена в класс формы. Это видно и в инспекторе объектов, и в самом коде модуля формы:
![Фрейм delphi](https://programlife.ru/wp-content/uploads/2021/02/image-21.png)
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](https://programlife.ru/wp-content/uploads/2021/02/image-22.png)
Вернувшись на «Form1» мы увидим, что объект фрема «Frame2» тоже поменял цвет!
![Фрейм delphi](https://programlife.ru/wp-content/uploads/2021/02/image-23.png)
Более того, если на форме разместить ещё один фрейм, то он тоже будет красного цвета.
![Фрейм delphi](https://programlife.ru/wp-content/uploads/2021/02/image-24.png)
Если теперь в свойствах у Frame2 в Unit2 изменить цвет на зелёный, то автоматически изменится цвет объектов «Frame» на форме:
![Фрейм delphi](https://programlife.ru/wp-content/uploads/2021/02/image-25.png)
Но вот какой нюанс. Изменим цвет у объекта Frame21 на жёлтый.
![Фрейм delphi](https://programlife.ru/wp-content/uploads/2021/02/image-26.png)
После этого вернёмся в Unit2 – Frame2. Изменим цвет Frame2 на пурпурный и вернёмся на Form1. Теперь мы увидим, что автоматически изменился цвет только для объекта Frame22:
![Фрейм delphi](https://programlife.ru/wp-content/uploads/2021/02/image-27.png)
Цвет у фрейма Frame21 не изменился.
Отсюда делаем вывод, что если изменить вручную какое-либо свойство у объекта-фрейма, то после изменения аналогичного свойства у фрейма-прородителя это изменение на отредактированный фрейм не распространится.
Поэтому надо быть аккуратным и стараться не менять свойства у самого фрейма, а также у компонетов, расположенных на фрейме, вручную.
Сохранение фрейма.
Разработанный фрейм можно сохранить, чтобы его можно было использовать в других проектах.
Для этого щёлкаем правой кнопкой по фрейму и из контекстного меню выбираем «добавить в депозитарий»
![Фрейм delphi](https://programlife.ru/wp-content/uploads/2021/02/image-28.png)
Открывается окно диалога:
![Фрейм delphi](https://programlife.ru/wp-content/uploads/2021/02/image-29.png)
Заполняем поля. Например:
Title – Проба; Description – Подбор цвета; Page – или выбираем из имеющихся из выпадающего списка, или ввести название одной из закладок (чтобы сразу вызвать это окно диалога, выбираем File/New/Other… ):
Фрейм будет помещён на закладку с заданным именем.
Введя для Page новое значение MyPage, получаем новую закладку с этим именем:
![Фрейм delphi](https://programlife.ru/wp-content/uploads/2021/02/image-30.png)
Как в delphi добавить фрейм на форму из депозитария
Теперь в любой проект можно вставить фрейм:
![Фрейм delphi](https://programlife.ru/wp-content/uploads/2021/02/image-31.png)
Теперь выберем способ размещения фрейма в приложении.
«Сору» — фрейм просто будет скопирован в приложение. При этом никакой дальнейшей связи между исходным фреймом и копией не будет.
«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](https://programlife.ru/wp-content/uploads/2021/02/image-32.png)
* * *
Спасибо, ваш сайт очень полезный!