On-Line Библиотека www.XServer.ru - учебники, книги, статьи, документация, нормативная литература.
       Главная         В избранное         Контакты        Карта сайта   
    Навигация XServer.ru








 

Область видимости и доступ к объектам, переменным и функциям модуляы

Область видимости и доступ к объектам, переменным и функциям модуля
Давайте рассмотрим, как можно из программы получить доступ к свойствам и методам объектов.
Для обращения к свойству объекта необходима ссылка в следующем формате:
<имя объекта>. <имя свойства>
например: Label1.Caption - после имени объекта производится запись символа точки, далее без пробела записывается имя свойства. Иногда свойство объекта является в свою очередь объектом. В этом случае при обращении к этому свойству указывается через точки вся цепочка предшествующих объектов. Например, объект Label1 имеет свойство Font, которое в свою очередь является объектом. У него также имеются свойства, например Color - цвет шрифта. Для того чтобы сослаться на цвет шрифта метки Label1, необходимо сделать запись Label1.Font.Color. Это означает следующее: свойство Color объекта Font, принадлежащего объекту Label1.
А теперь перейдем к примеру.
1. Запустите Delphi.
2. Сохраните файл модуля под именем Scope_.pas, а файл проекта под именем Scope.dpr.
3. Поместите на форму компонент Label1 и пять кнопок Button.
4. В описании класса вы видите строки с 12 по 17, которые Delphi включила автоматически. Эти строки говорят, что в форме имеются объекты соответствующих типов. Кроме того, Delphi добавила в описание класса объявления процедур строки с 18 по 22, и вписала в раздел implementation заголовки соответствующих процедур. 
5. unit Unit1;
6. interface
7. uses
8. Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
9. StdCtrls;
10. type
11. TForm1 = class(TForm)
12. Label1: TLabel;
13. Button1: TButton;
14. Button2: TButton;
15. Button3: TButton;
16. Button4: TButton;
17. Button5: TButton;
18. procedure Button1Click(Sen-der: TObject);
19. procedure Button2Click(Sen-der: TObject);
20. procedure Button3Click(Sen-der: TObject);
21. procedure Button4Click(Sen-der: TObject);
22. procedure Button5Click(Sen-der: TObject);
23. private
24. A4:String;
25. procedure ToAddAWord (A:String);
26. {процедура ToAddAWord и переменная А4 доступны только в данном модуле}
27. public
28. A1:String;
29. procedure ToAddAWord1 (A:String);
30. {переменная А1 и процедура ToAddAWord1 доступны для объектов
31. любых классов и для других модулей, но со ссылкой на объект}
32. end;
33. var
34. Form1: TForm1;
35. A2:String;
36. procedure ToAddAWord2 (A:String);
37. {переменная А2 и процедура ToAddAWord2 доступны для объектов
38. любых классов и для других модулей}
39. implementation
40. uses Unit2;
41. {$R *.DFM}
42. var
43. A3:String;
44. {переменная А3 доступна только внутри данного модуля}
45. procedure TForm1.ToAddAWord (A:String);
46. begin
47. Label1.Caption:=A1 + A2 + A3 + A4;
48. end;
49. procedure TForm1.ToAddAWord1 (A:String);
50. begin
51. Label1.Caption:= A2;
52. end;
53. procedure ToAddAWord2 (A:String);
54. begin
55. Form1.Label1.Caption:= A3;
56. end;
57. procedure TForm1.Button1 Click(Sender: TObject);
58. procedure ToAddAWord4 (A:String);
59. begin
60. Label1.Caption:= A3;
61. end;
62. begin
63. A1:='Лучше ';
64. Label1.Caption:=A1;
65. Label1.Font.Color:=clBlue;
66. Label1.Font.Size:=24;
67. end;
68. procedure TForm1.Button2 Click(Sender: TObject);
69. begin
70. A2:=' Delphi ';
71. ToAddAWord1(A2);
72. end;
73. procedure TForm1.Button3 Click(Sender: TObject);
74. begin
75. A3:=' есть ';
76. ToAddAWord2(A3);
77. end;
78. procedure TForm1.Button4 Click(Sender: TObject);
79. begin
80. A4:=' только Delphi';
81. Label1.Caption:=A4;
82. end;
83. procedure TForm1.Button5 Click(Sender: TObject);
84. begin
85. ToAddAWord(A3);
86. end;
87. end.
В программный код введены также процедуры, помещенные в разные места модуля, и несколько переменных строкового типа.
Рассмотрим, что делают процедуры. У компонента Label имеется свойство Caption, позволяющее вводить надпись. Каждая процедура задает переменным строковые значения, берет значение этой надписи и присваивает его метке. Обработчики событий после щелчка по кнопкам обращаются к соответствующим процедурам с целью присваивания метке строковых значений. Кроме того, надпись окрашивается в синий цвет.
Чем же различаются переменные и процедуры, включенные и не включенные в описание класса? В приведенном примере переменные А4 и А1, процедуры ToAddAWord и ToAddAWord1 включены в описание класса, а переменные А2 и А3 процедуры ToAddAWord2 и ToAddAWord3 объявлены вне класса.
Если в приложении создается только один объект данного класса (в примере имеется один объект формы класса TForm1), то различие в основном чисто внешнее. Для процедур, объявленных в классе, в их описании в разделе implementation к имени процедуры должна добавляться ссылка на класс.
procedure TForm1.ToAddAWord (A:String);
procedure TForm1.ToAddAWord1 (A:String);
Для процедур, объявленных вне класса, такого добавления не требуется.
Обращение к переменным и процедурам, описанным внутри и вне класса, из процедур, описанных вне класса, различается. К переменным процедурам, описанным вне класса, обращение происходит просто по их именам, а к переменным и процедурам, описанным в классе, - через имя объекта класса.
Элементы, объявленные в классе в разделе public, видимы и доступны для объектов любых классов и для других модулей. При этом из объектов того же класса к ним можно обращаться непосредственно по имени, а из других объектов и процедур - только со ссылкой на объект данного класса.
Чтобы это увидеть, добавьте вторую форму к проекту и напишите программный код:

{для первой формы}
procedure TForm1.Button6Click (Sender: TObject);
begin
Form2.Show;
end;
{для второй формы}
procedure TForm2.Button1Click (Sender: TObject);
var
B:String;
begin
Form1.ToAddAWord1(B);
end;

end.

Компонент Chart
Рассмотрим пример построения графика и опций компонента Chart, которые определяют внешний вид графика или диаграммы.
1. Запустите Delphi.
2. Сохраните файл модуля под именем MyChart_.pas, а файл проекта под именем MyChart. dpr.
3. Построим график функции, определяющей зависимость между величинами X и Y. Функциональная зависимость между ними выражается уравнением 
Y = X2.
4. Поместите на форму четыре компонента Edit, кнопку Button и компонент Chart. Произведите двойной щелчок по компоненту Chart, откроется редактор Editing chart1, в окне которого на вкладке Chart\Series, используя кнопку Add, поместите график Line.
5. Используя свойство Text для компонентов Edit, введите значения, соответствующие четырем точкам X=1, 2, 3, 4. Т.е. Y для этих точек равен 2, 4, 9, 16.
6. Запишите программный код для отклика на щелчок по кнопке:
procedure TForm1.Button1Click (Sender: TObject);
var
A,B,C,D:Integer;
begin
A:=StrtoInt(Edit1.Text);
B:=StrtoInt(Edit2.Text);
C:=StrToInt(Edit3.Text);
D:=StrtoInt(Edit4.Text);
Series1.Clear;
Series1.Add(A,'1',clTeeColor );
Series1.Add(B,'2',clTeeColor );
Series1.Add(C,'3',clTeeColor );
Series1.Add(D,'4',clTeeColor );
end;
end.
После запуска приложения на компиляцию получите график функции.
Теперь перейдем к исследованию опций компонента Chart.
Перейдите к форме, сделайте двойной щелчок по компоненту Chart для перехода к редактору. Откройте страницу General. Опции этой страницы позволяют изменять поля, отводимые графику.
Свойство Margins (%) изменяет значения верхнего, нижнего, левого и правого полей. Причем, чем меньше значение свойства, тем больше поле.
Свойство Allow Scroll определяет направление прокрутки графика. Если вы установите значение Vertical, то после запуска приложения на компиляцию вы можете просматривать график, перемещая его по вертикали внутри отведенной области. Для просмотра необходимо нажать правую клавишу на компоненте и перемещать мышь в заданном направлении.
Свойство Zoom (Allow Zoom, Animated Zoom) определяет число шагов анимированной последовательности изменения масштаба изображения. Большое число шагов может задерживать изменение размера окна. AnimatedZoom свойство должно быть True. По умолчанию значение Steps установлено равное 8. Можно установить значение программно, например: 
Chart1.AnimatedZoom := True ;
Chart1.AnimatedZoomSteps := 4 ;
Кнопка Print Preview позволяет осуществлять предварительный просмотр диаграммы или графика перед выводом на печать.
Здесь можно увидеть снова опцию Margins (%). Кнопка Reset Margins позволяет сбросить значения, установленные вами, чтобы установить значения, принятые по умолчанию.
Опция Detail позволяет увеличивать график для детального просмотра при помощи ползунка More - Normal.
Опция View Margins позволяет убирать или показывать поля, ограничивающие график.
Опция Paper Orientation имеет два свойства Portrait (портрет) и Landscape (ландшафт).
Необходимо заметить, что вы можете изменять размеры графика, заключенного между полями, для этого необходимо подвести курсор к полям, ограничивающим график. Когда курсор превратится в двунаправленную стрелку, вы можете производить изменения.
Опция Proportional производит сброс проведенных вами изменений.
Кнопка Print Setup позволяет произвести настройку принтера, выбрать размер и ориентацию бумаги и т.д.
Кнопка Print запускает документ на печать.
Кнопка Export на вкладке General позволяет определить формат файла и экспорт его в буфер обмена. Имеется возможность запоминания графика в виде отдельного файла.
Страница Axis. Эта страница (вложенная страница Scale) позволяет определять шкалу деления вертикальной и горизонтальной оси. Можно убрать оси графика, определить логарифмическую шкалу осей, определить их положение, произвести инверсию.
Вложенная страница Title позволяет производить надписи осей, их ориентацию относительно осей, выбирать тип шрифта надписи.
Вложенная страница Labels. С помощью этой страницы вы можете определять отображение минимальных и максимальных меток оси, выбирать тип шрифта для них.
Эти значения можно задавать программно:
Chart1.LeftAxis.SetMinMax(0, 1001);
Chart1.LeftAxis.LabelsOnAxis:= False;
Свойство property ValueFormat : String; производит форматирование строкового спецификатора, а именно меток осей.
Например
Chart1.LeftAxis.AxisValuesFormat:= '###0.0###';
Свойство property RoundFirstLabel : Boolean позволяет автоматически округлять значения меток осей.
Chart1.LeftAxis.RoundFirstLabel := True ;
Chart1.LeftAxis.RoundFirstLabel := False ;
Свойство property LabelsMultiline : Boolean; позволяет изменять метки оси.
Например
Series1.Add( 1234, 'Hello'+#13+ 'World', clGreen );
Если используется временной формат оси
Series1.AddXY(EncodeDate(1998, 2,28), 100, '', clTeeColor);
Series1.AddXY(EncodeDate(1998, 3,1), 200, '', clTeeColor);
Series1.AddXY(EncodeDate( 1998,3,2 ), 150,'', clTeeColor);
Series1.XValues.DateTime := True;
Chart1.BottomAxis.DateTimeFormat := 'mm/dd hh:mm';
Если установлено значение
Chart1.BottomAxis.LabelsMultiLine:=True;
то производится разбиение подписи меток на две строки.
'Mm/dd' для первой строки
'Hh:mm' для второй строки.
Свойство property LabelsSeparation : Integer; определяет процент минимального расстояния между метками оси. По умолчанию установлено значение равное 10.
Свойство property LabelStyle: TAxisLabelStyle; определяет стиль отображения меток.
TAxisLabelStyle = (talAuto,talNone,talValue,talMark,talText);.
TalAuto выбор стиля производится автоматически.
TalNone пустые строки.
TalValue маркирование оси основано на минимуме оси и максимуме.
TalMark каждая точка ряда будет иметь метку, используя SeriesMarks стиль.
TalText каждый пункт ряда будет иметь метку, используя XLabels строки.
Вложенная страница Titles. Свойство Title определяет заголовок и подпись в нижней части диаграммы Foot. Здесь можно задать свойства форматирования, которые будут введены в верхней и нижней части диаграммы. Вы можете установить шрифт Title и Foot, их выравнивание, задать структуру рамки, цвет области позади надписи и стиль закрашивания этой области.
В свойстве property Title : TChartTitle; TCHARTTITLE-компонент используется, чтобы отобразить строки текста Title и Foot в верхней и нижней части диаграммы соответственно. Текстовое свойство содержит текст, который будет отображен. Это свойство имеет тип TStrings, что означает ряд строк в списке. Всякий раз, когда изменяете текстовое свойство, вы должны переустановить компонент диаграммы вручную. 
Например
with Chart1.Title.Text do
begin
Clear;
Add('ACME Monthly Sales');
Add('Year: 2002');
end;
Chart1.Repaint;
end;
Вложенная страница Legend. Данная страница позволяет изменять положение, шрифт, цвет, положение относительно графика легенды или пояснений графика. Как правило, это числовые значения.
Свойство LegendStyle дает возможность выводить легенду автоматически, выводить название графика или одно значение, первое.
TLegendStyle = (lsAuto,lsSeries, lsValues,lsLastValues);.
Свойство property TextStyle : TLegendTextStyle;
TLegendTextStyle= (ltsPlain, lts-LeftValue, ltsRightValue, lts-LeftPercent, ltsRight-Percent, ltsXValue);
Например (свойство - вид надписи): 
LtsPlain Лето.
LtsLeftValue 1234 Лето
LtsRightValue Лето 1234 (смещение вправо)
LtsLeftPercent Лето 5.1%
LtsRightPercent Лето 5.1% (смещение вправо)
LtsXValue 4321 применяется только к ряду со значениями X. 
Свойство Position определяет размещение легенды относительно графика (слева, справа, вверху, внизу).
Свойство Margin определяет расстояние размещения легенды относительно графика.
Щелчок по кнопке Frame открывает окно, позволяющее определять вид обрамления легенды.
Свойство Shadow определяет вид тени для легенды, размеры которой можно изменить параметром Size.
Свойство ResizeChart указывает, уменьшит ли легенда прямоугольник диаграммы. Чтобы предотвратить перекрытие между прямоугольниками диаграммы и легендой, необходимо установить галочку в чекбокс ResizeChart.
Свойство Inverted инвертирует значения легенды.
Свойство property DividingLines: TChartHiddenPen read FDividingLines write SetDividingLines; определяет внешний вид обрамления отдельных элементов легенды.
Вложенная страница Panel.
Опции этой страницы позволяют задавать значения панели, или, другими словами, области построения графика, придавая графику красивый вид.
Можно задавать цвет области построения диаграммы или графика, производить комбинацию цветовой гаммы, изменять вид кромки внутренней и внешней части, имеется возможность внедрения различных изображений. 
Свойство property BevelInner : Integer; устанавливает размер скоса, который формирует внутреннюю сторону панели диаграммы.
Свойство property BevelOuter : Integer; устанавливает размер скоса, который формирует внешнюю сторону панели диаграммы.
Свойство property BackImageMode : TTeeBackImageMode; определяет, как будет отображаться точечный рисунок фонового режима.
TTeeBackImageMode = (pbmStretch, pbmTile, pbmCenter);
PbmStretch: рисунок будет изменен, чтобы приспособиться под размер диаграммы.
PbmTile: рисунок будет размножен в виде плиточной укладки.
PbmCenter: рисунок не будет изменен, но размещен по центру.
Свойство property Visible : Boolean; Разрешает или запрещает закрашивать тыльную часть диаграммы, или, другими словами, устанавливать градиент.
Например
Chart1.Gradient.Visible := True ;
Chart1.Gradient.StartColor := clYellow ;
Chart1.Gradient.EndColor := clBlue ;
Chart1.Gradient.Direction := gdLeftRight ;.
Свойство property Direction : TGradientDirection; определяет направление закрашивания тыльной части диаграммы.
TGradientDirection = (gdTopBottom, gdBottomTop, gdLeftRight, gdRightLeft);.
Свойства property StartColor : TColor; и property EndColor : TColor; определяют создание градиента, представляющего собой совокупность двух цветов, например красного и белого.
Вложенная страница Paging. На этой странице имеется возможность задавать для каждого пункта графика его размеры. Возможно перемещение от одного пункта графика к другому, т.е. поперек графика. Можно применять масштабирование к пунктам графика или не применять его (в этом случае элементы графика размещаются плотно друг к другу).
Вложенная страница Walls. На этой странице имеется возможность определения размера стенок графика (боковой стенки, тыльной стенки и нижней стенки). Возможен выбор цвета, типа кисти и пера, чтобы заполнить цветовую гамму стенок графика.
Вложенная страница 3D. Опции этой страницы придают трехмерность графику или диаграмме.
Свойство property Zoom : Integer; значение по умолчанию = 100%.
Свойство View3DOptions изменяет размер окна, изменяет масштаб изображения диаграммы. Значение выражается в процентах. Увеличение производится при помощи ползунка Zoom. Диаграмма может быть расширена по размеру больше, чем панель. 
Свойство property Rotation : Integer; определяет вращение диаграммы или графика. Увеличение значения приведет к вращению диаграммы вокруг вертикальной оси.
Опция Ortogonal отключает режим трехмерного изображения и переключает в двухмерный режим.
Свойство property Elevation : Integer; определяет вращение графика или диаграммы вокруг горизонтальной оси.
Свойство property HorizOffset : Integer; перемещает прямоугольник диаграммы в горизонтальном направлении поперек панели диаграммы. Положительные значения перемещают диаграмму вправо, отрицательные - влево.
Свойство property VertOffset : Integer; перемещает прямоугольник диаграммы в вертикальном направлении поперек панели диаграммы. Положительные значения перемещают диаграмму вниз, отрицательные значения - вверх.
Свойство property Perspective : Integer; позволяет просматривать значения диаграммы или графика в перспективе, значения можно изменять с помощью ползунка.
Свойство property ZoomText : Boolean; дает возможность отключать изменение масштаба текста при изменении масштаба изображения.
Раздел Series.
Вложенная страница Format.
Эта страница позволяет изменять тип ряда диаграммы или графика.
Свойство property BarStyle : TBarStyle; по умолчанию установлено значение bsRectangle.
TBarStyle = (bsRectangle, bsRectGradient, sPyramid, bsInvPyramid, bsCilinder, bsEllipse, bsArrow);
Значение типа ряда можно определить программно:
BarSeries1.BarStyle := bsPyramid ;.
Свойство property ColorEachPoint : Boolean; позволяет устанавливать цвет для элементов ряда. Вы можете сами установить цвет или дать возможность сделать это Delphi.
Свойство property MultiBar : TMultiBar позволяет расположить диаграммы или графики относительно друг друга, если их внедрено несколько в компонент Chart.
TMultiBar = (mbNone, mbSide, mbStacked, mbStacked100);.
Щелчок по кнопке Border открывает диалоговое окно, позволяющее изменять форму окантовки элементов ряда, размер и ее цвет.
Вложенная страница General.
Свойство property ShowInLegend : Boolean разрешает или запрещает отображение легенды.
Свойство property Cursor : TCursor; определяет, какой вид принимает курсор при перемещении по отдельным пунктам диаграммы или графика.
Например:
LineSeries1.Cursor:=crTeeHand ;.
Свойство property HorizAxis : THorizAxis; определяет расположение горизонтальной оси масштаба относительно графика или диаграммы.
THorizAxis=(aTopAxis,aBottomAxis);
LineSeries1.HorizAxis := aTopAxis ;.
Свойство property DateTime : Boolean; позволяет задавать значения времени для горизонтальной оси.
Вложенная страница Marks.
Опции этой страницы позволяют отображать значения надписи над элементами графика и задавать для них цвет, окантовку и шрифт.
Раздел Arrows позволяет определить расстояние надписи от элемента диаграммы или графика, а также вид линии, соединяющей надпись и элемент диаграммы или графика.
Свойство property Style : TSeriesMarksStyle; определяет стиль надписи.
Вложенная страница Data Source.
Страница источника данных позволяет определить данные для надписей над элементами диаграммы или графика.



Литература по Borland Delphi