Статья. Занятие 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»:
Открывается окно со списком имеющихся фреймов (если их несколько). Выбираем нужный нам и нажимаем «OK». Фрейм появляется на форме.
Пока в нём ничего нет, но ссылка на него уже встроена в класс формы. Это видно и в инспекторе объектов, и в самом коде модуля формы:
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, откроем окно фрейма и изменим какое либо свойство фрейма. Например, цвет. Сделаем фрейм красным.
Вернувшись на «Form1» мы увидим, что объект фрема «Frame2» тоже поменял цвет!
Более того, если на форме разместить ещё один фрейм, то он тоже будет красного цвета.
Если теперь в свойствах у Frame2 в Unit2 изменить цвет на зелёный, то автоматически изменится цвет объектов «Frame» на форме:
Но вот какой нюанс. Изменим цвет у объекта Frame21 на жёлтый.
После этого вернёмся в Unit2 – Frame2. Изменим цвет Frame2 на пурпурный и вернёмся на Form1. Теперь мы увидим, что автоматически изменился цвет только для объекта Frame22:
Цвет у фрейма Frame21 не изменился.
Отсюда делаем вывод, что если изменить вручную какое-либо свойство у объекта-фрейма, то после изменения аналогичного свойства у фрейма-прородителя это изменение на отредактированный фрейм не распространится.
Поэтому надо быть аккуратным и стараться не менять свойства у самого фрейма, а также у компонетов, расположенных на фрейме, вручную.
Сохранение фрейма.
Разработанный фрейм можно сохранить, чтобы его можно было использовать в других проектах.
Для этого щёлкаем правой кнопкой по фрейму и из контекстного меню выбираем «добавить в депозитарий»
Открывается окно диалога:
Заполняем поля. Например:
Title – Проба; Description – Подбор цвета; Page – или выбираем из имеющихся из выпадающего списка, или ввести название одной из закладок (чтобы сразу вызвать это окно диалога, выбираем File/New/Other… ):
Фрейм будет помещён на закладку с заданным именем.
Введя для Page новое значение MyPage, получаем новую закладку с этим именем:
Как в 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;
В итоге, например, будем иметь:
* * *
Спасибо, ваш сайт очень полезный!