лабы / gorev_akhajan_makakshiripov_ehffektivnaja_rabota_s_subd
.pdfрабочая книга открывается в ней. При этом будет получена ошибка, если указанное в функции имя файла совпадет с уже открытым файлом в загруженной копии Excel. Если параметр FileName задан в виде пустой строки ("") и если не существует запущенной копии Microsoft Excel, то запускается невидимая ее копия и создается рабочая книга с именем "Object" и один рабочий лист с именем "Sheet1". Если параметр FileName задан в виде пустой строки ("") и если хотя бы одна копия Microsoft Excel
загружена в память, то в одной из них открывается рабочая книга, как это было описано выше. Если параметр FileName не указан, всегда генерируется ошибка.
Как вы можете заметить, изучив табл. 10.2, создание объектов OLE Automation или обращение к ним в Microsoft Excel зачастую может привести к совершенно различным последствиям. Почти всегда Excel создает невидимую копию приложения. Для того чтобы сделать ее видимой для пользователя, надо присвоить свойству Visible объекта Application значение "истина":
...Application.Visible = .T.
Если создается невидимая копия рабочей книги, то сделать ее видимой можно, присвоив значение "истина" свойству Visible окна:
...Window(n).Visible = .T.
В некоторых случаях Excel при запуске посредством OLE Automation не открывает новый файл. Тогда это придется сделать с помощью метода Add коллекции Workbooks:
...Workbooks.Add
Для завершения обсуждения проблем, связанных с объектами верхнего уровня Microsoft Excel, приведем несколько примеров.
Объект Application
oApp = CREATEOBJECT("EXCEL.APPLICATION") oApp = GETOBJECT(" ","EXCEL.APPLICATION")
Любая из этих строк приведет к запуску новой копии Excel в скрытом виде.
oApp = GETOBJECT(,"EXCEL.APPLICATION")
Обеспечит ссылку на текущее приложение Excel. Если же Excel на компьютере не запущен, будет сгенерировано сообщение об ошибке.
Объект Sheet
oExSheet = CREATEOBJECT("EXCEL.SHEET") FOR nVal = 1 TO 10
oExlSheet.Cells(nVal, nVal).Value = nVal * nVal
Ⱦɚɧɧɚɹ ɜɟɪɫɢɹ ɤɧɢɝɢ ɜɵɩɭɳɟɧɚ ɷɥɟɤɬɪɨɧɧɵɦ ɢɡɞɚɬɟɥɶɫɬɜɨɦ %RRNV VKRS Ɋɚɫɩɪɨɫɬɪɚɧɟɧɢɟ ɩɪɨɞɚɠɚ ɩɟɪɟɡɚɩɢɫɶ ɞɚɧɧɨɣ ɤɧɢɝɢ ɢɥɢ ɟɟ ɱɚɫɬɟɣ ɁȺɉɊȿɓȿɇɕ Ɉ ɜɫɟɯ ɧɚɪɭɲɟɧɢɹɯ ɩɪɨɫɶɛɚ ɫɨɨɛɳɚɬɶ ɩɨ ɚɞɪɟɫɭ piracy@books-shop.com
ENDFOR
*Если хотите увидеть результат, уберите комментарий в следующий строке
*oExlSheet.Application.Visible = .T.
oExlSheet.SaveAs("TEMP.XLS")
Создает новый рабочий лист в запускаемой невидимой копии Excel и заполняет его цифрами так, как это показано на рис. 10.4. Созданная таблица сохраняется в файле TEMP.XLS в папке, установленной по умолчанию для Excel.
Рис. 10.4. oExlSheet = GETOBJECT("RAS_1.XLS", "EXCEL.SHEET") oExlSheet.Range("G2").Value = 16 oExlSheet.Range("G3").Value = 10 oExlSheet.Parent.Save && Сохраняем рабочую книгу
? oExlSheet.Range("G4").Value
Создает ссылку на первый рабочий лист в файле RAS_1.XLS. Файл в данном случае должен располагаться в папке, указанной по умолчанию для приложения, использующего OLE Automation, иначе необходимо указать путь к нему. В этот файл, содержащий результаты расчетов, мы заносим новые данные в ячейки G2 и G3, сохраняем данные, а затем выводим результат вычислений из ячейки G4, где записана формула, вычитающая G3 из G2.
Объект Chart
oExlChart = CREATEOBJECT("EXCEL.CHART")
* Стираем данные по умолчанию на рабочем листе со значениями oExlChart.Parent.Sheets(2).Range("A1:D10").Clear
FOR nVal = 1 TO 10
* Заполняем таблицу новыми значениями oExlChart.Parent.Sheets(2).Cells(nVal,1).Value = nVal oExlChart.Parent.Sheets(2).Cells(nVal,2).Value = nVal * nVal
NEXT
*Строим график по новым значениям по колонкам oExlChart.ChartWizard(oExlChart.Parent.Sheets(2).Range("A1:B10"),,,2)
*Смотрим, что получилось
oExlChart.Application.Visible = .T. WAIT
Создается новый рабочий лист с диаграммой. Сначала мы аполняем необходимыми данными второй рабочий лист, на котором размещаются данные. Затем с помощью метода ChartWizard обновляем диаграмму на первом рабочем листе. В методе ChartWizard из большого числа параметров мы устанавливаем только область данных и условие построения его по колонкам. Остальные параметры принимают значения по умолчанию. После этого выводим Excel на экран и
www.books-shop.com
используем команду WAIT для того, чтобы рабочая книга не была выгружена после завершения работы программы.
oExlChart = GETOBJECT("RAS_1.XLS", "EXCEL.CHART") oExlChart.ChartTitle.Text = "Результаты продаж"
Создает ссылку на первый рабочий лист с диаграммой в файле RAS_1.XLS. В файле должен быть предварительно создан объект Chart с помощью команды Chart в меню Insert.
Управление объектами Word for Windows
При работе с объектами Word for Windows функция CREATEOBJECT() запускает новую копию приложения только в том случае, если на компьютере это приложение еще не работает. При этом функция GETOBJECT() не может использоваться для ссылки на документ. Если она используется в виде
oWrd = GETOBJECT(" ","WORD.BASIC")
то ее применение аналогично функции CREATEOBJECT().
Задание функции в виде
oWrd = GETOBJECT(,"WORD.BASIC")
всегда приводит к ошибке.
В отличие от Excel текстовый процессор Word for Windows имеет только один объект OLE Automation - WordBasic (в синтаксисе мы пишем Word.Basic). Это означает, что управлять документом Word из другого приложения мы можем только посредством выполнения команд
WordBasic.
Для того чтобы продемонстрировать пример создания объекта Word, решим классическую для любого начинающего программиста задачу - выведем на экран слово "Hello!" В связи с тем, что читатель одиннадцатой главы этой внушительной по объему книги вряд ли захочет относить себя к начинающим программистам, усложним задачу. Загрузим на компьютере Word и Access. Теперь, находясь в Access, напишем заветное слово в документе Word.
Для решения этой задачи в контейнере БД Access перейдем на вкладку Модули. На панели инструментов нажмем кнопку Вставить процедуру. В появившемся диалоговом окне напишем ее название, например CallWord. В окне Модуль напишем следующий код:
Public Function CallWord() As Integer Dim oWbApp As Object
Set oWbApp = CreateObject("Word.Basic") oWbApp.FileNew ` Открываем новый документ oWbApp.Insert "Hello!" ` Вписываем в документ слово
Set oWbApp = Nothing Exit Function
End Function
Запустите этот модуль на выполнение. Напоминаем простейший способ сделать это - нажмите кнопку на панели инструментов Окно отладки и в появившемся окне наберите имя процедуры, после чего нажмите клавишу Enter. Смело переходите в Word и рассматривайте появившееся там слово.
Если вас испугало многообразие объектов в Excel и вы уже обрадовались наличию в Word всего одного объекта, то, возможно, ваша радость преждевременна. При управлении документом Word с помощью OLE Automation есть одна существенная для программиста неприятность.
Команды WordBasic используют поименованные аргументы, а посредством OLE Automation ссылаться на аргументы можно только по их положению. Например, вы хотите отключить вывод предупреждения при сохранении документа. В файле контекстной справки WordBasic вам будет подсказан следующий синтаксис команды ToolsOptionsSave
ToolsOptionsSave [.CreateBackup = number] [, .FastSaves = number] [, .SummaryPrompt = number]
В макросе Word вы, соответственно, можете написать: ToolsOptionsSave .SummaryPrompt = False
Для того чтобы выполнить эту команду из OLE-контроллера, необходимо знать порядковый номер этого аргумента в команде:
www.books-shop.com
oWbApp.ToolsOptionsSave , , 0
10.3. Использование OLE Automation для передачи данных
Впрактике создания систем автоматизации обработки данных программисту очень часто приходится сталкиваться с задачей графического представления данных. В комплекте со всеми средствами разработки Microsoft поставляется специальная утилита Microsoft Graph 5.0, которая как нельзя лучше подходит для этих целей.
Вэтом параграфе мы расскажем, как в пользовательском приложении можно использовать Microsoft Graph 5.0, а также остановимся на основных возможностях графического представления данных, которые предоставляет Microsoft Excel.
С помощью Microsoft Graph 5.0 мы можем легко встроить в форму в виде OLE-объекта графики самого разнообразного вида, которые помогут пользователю лучше разобраться с тенденциями изменения интересующих его показателей. MS Graph 5.0 имеет интуитивно понятный интерфейс, разобраться с которым в крайнем случае поможет обширная справочная информация. Но если мы не хотим заставлять пользователя нашей прикладной программы изучать еще и англоязычный интерфейс MS Graph, нам придется позаботиться об управлении процессом графического представления данных из программы с помощью средств OLE Automation. В связи с актуальностью этого вопроса остановимся на нем возможно подробнее.
На рис. 10.5 представлена иерархическая схема объектов MS Graph 5.0, а в табл. 10.3 - их краткое описание.
Таблица 10.3. Описание объектов MS Graph 5.0
Объект Описание
Application Содержит установки в целом для приложения
Axis Горизонтальные или вертикальные оси графика
AxisTitle Заголовок одной из осей графика
Border Рамка
Chart График
ChartArea Область графика, которая простирается и за внешние границы области, в которой вычерчивается график (поля, заголовки осей, описания данных и т. д.)
ChartGroup Группа серий данных, представленных в виде одного графика. Простейший график содержит один объект ChartGroup
ChartTitle Заголовок графика
DataLabel Дополнительное описание для графика одной серии данных (может иметь отношение ко всей серии или к одной точке)
DownBars Прямоугольник, который на линейном графике соединяет значение одной серии данных с более низким значением другой серии данных
DropLines Вертикальные линии, соединяющие точки графика со значениями на оси Y
ErrorBars Линии, графически отображающие ошибку расчета значения в графиках X-Y
Floor Координатная поверхность, служащая основанием для трехмерного графика
Font Шрифт
GridLines Линии координатной сетки
HiLoLines Вертикальные линии, которые соединяют максимальное и минимальное значения для различных серий данных
Interior Графическое оформление (фон, тень и т.
д.)
www.books-shop.com
Legend Описание серии данных для графика
LegendEntry Наименование серии данных, которое берется из колонки с данными и может быть изменено только на листе с данными
LegendKey Обозначения для серии данных
PlotArea Область непосредственного расположения графика
Point Точка в серии данных Series Серия данных
SeriesLines Линия для обозначения серии данных TickLabels Значения для засечек на оси графика TrendLine Линия тренда
UpBars Прямоугольник, который на линейном графике соединяет значение одной серии данных с более высоким значением другой серии данных
Walls Боковые координатные поверхности для трехмерных графиков
Перечисленные 27 объектов позволяют достаточно гибко программировать внешний вид графиков, предоставляя доступные для них свойства и методы, список которых приведен в табл. 10.4. Все объекты имеют свойства Application (возвращает имя приложения, создавшего объект), Creator (возвращает идентификатор приложения, создавшего объект - для Apple Macintosh) и Parent (возвращает имя родительского объекта), поэтому они не указаны в таблице.
Таблица 10.4. Свойства и методы объектов MS Graph 5.0
Объект |
Свойства |
Методы |
Application ChartWizardDisplay, HasLink, |
SaveAsOldExcelFile-Format |
|
|
Name, Visible, Chart, Quit |
|
Axis |
AxisBetweenCategories, |
Delete |
|
AxisGroup, AxisTitle, Border, |
|
|
Crosses, CrossesAt, |
|
|
HasMajorGridlines, |
|
|
HasMinorGridlines, HasTitle, |
|
|
MajorGridlines, |
|
|
MajorTickMark, MajorUnit, |
|
|
MajorUnitIsAuto, |
|
|
MaximumScale, |
|
|
MaximumScaleIsAuto, |
|
|
MinimumScale, |
|
|
MinimumScaleIsAuto, |
|
|
MinorGridlines, |
|
|
MinorTickMark, MinorUnit, |
|
|
MinorUnitIsAuto, |
|
|
ReversePlotOrder, ScaleType, |
|
|
TickLabelPosition, TickLabels, |
|
|
TickLabelSpacing, |
|
|
TickMarkSpacing, Type |
|
AxisTitle |
Border, Caption, Font, |
Delete |
|
HorizontalAlignment, Interior, |
|
|
Left, Name, Orientation, |
|
|
Shadow, Text, Top, |
|
|
VerticalAlignment |
|
Border |
Color, ColorIndex, LineStyle, |
- |
|
Weight |
|
Chart |
Area3DGroup, AutoScaling, |
BarGroups, ChartGroups, |
|
Bar3DGroup, ChartArea, |
ChartWizard, ColumnGroups, |
|
ChartTitle, Column3DGroup, |
Delete, DoughnutGroups, |
|
Corners, DepthPercent, |
LineGroups, OmitBackground, |
|
DisplayBlanksAs, Elevation, |
PieGroups, RadarGroups, |
www.books-shop.com
|
Floor, GapDepth, HasAxis, |
SeriesCollection, SetEchoOn, |
|
HasLegend, HasTitle, |
XYGroups |
|
HeightPercent, Legend, |
|
|
Line3DGroup, Perspective, |
|
|
Pie3DGroup, PlotArea, |
|
|
PlotVisibleOnly, |
|
|
RightAngleAxes, Rotation, |
|
|
SizeWithWindow, SubType, |
|
|
SurfaceGroup, Type, Walls, |
|
|
WallsAndGridlines2D, |
|
|
ApplyDataLabels, |
|
|
AreaGroups, AutoFormat, |
|
|
Axes |
|
ChartArea Border, Font, Height, Interior, Clear, ClearContents, |
||
|
Left, Name, Shadow, Top, |
ClearFormats, Copy |
|
Width |
|
Chart- |
AxisGroup, |
SeriesCollection |
Group |
DoughnutHoleSize, |
|
|
DownBars, DropLines, |
|
|
FirstSliceAngle, GapWidth, |
|
|
HasDropLines, HasHiLoLines, |
|
|
HasRadarAxisLabels, |
|
|
HasSeriesLines, |
|
|
HasUpDownBars, HiLoLines, |
|
|
Overlap, RadarAxisLabels, |
|
|
SeriesLines, SubType, Type, |
|
|
UpBars, VaryByCategories |
|
ChartTitle |
Border, Caption, Font, |
Delete |
|
HorizontalAlignment, Interior, |
|
|
Left, Name, Orientation, |
|
|
Shadow, Text, Top, |
|
|
VerticalAlignment |
|
DataLabel AutoText, Border, Caption, |
Delete |
|
|
Font, HorizontalAlignment, |
|
|
Interior, Left, Name, |
|
|
NumberFormat, Orientation, |
|
|
Shadow, ShowLegendKey, |
|
|
Text, Top, Type, |
|
|
VerticalAlignment |
|
DownBars Border, Interior, Name |
Delete |
|
DropLines |
Border, Name |
Delete |
ErrorBars |
Border, EndStyle, Name, |
Delete |
|
Clear Formats |
|
Floor |
Border, Interior, Name |
Clear Formats |
Font |
Background, Bold, Color, |
- |
|
ColorIndex, FontStyle, Italic, |
|
|
Name, OutlineFont, Shadow, |
|
|
Size, Strikethrough, |
|
|
Subscript, Superscript, |
|
|
Underline |
|
GridLines |
Border, Name |
Delete |
HiLoLines |
Border, Name |
Delete |
Interior |
Color, ColorIndex, |
- |
|
InvertIfNegative, Pattern, |
|
|
PatternColor, |
|
|
PatternColorIndex |
|
Legend |
Border, Font, Height, Interior, Clear, ClearContense, Copy, |
|
|
Left, Name, Position, Shadow, Delete, LegendEntries |
|
|
Top, Width |
|
Legend- |
Font, Index, LegendKey |
Delete |
Entry |
|
|
LegendKey Border, Interior, |
ClearFormats, Delete |
www.books-shop.com
InvertIfNegative,
MarkerBackgroundColor,
MarkerBackgroundColorIndex,
MarkerForegroundColor,
MarkerForegroundColorIndex,
MarkerStyle, Smooth
PlotArea |
Border, Font, Height, Interior, ClearFormats |
|
|
Left, Name, Top, Width |
|
Point |
Border, DataLabel, Explosion, |
ApplyDataLabels, |
|
HasDataLabel, Interior, |
ClearFormats, Copy, Delete |
|
InvertIfNegative, |
|
|
MarkerBackgroundColor, |
|
|
MarkerBackgroundColorIndex, |
|
|
MarkerForegroundColor, |
|
|
MarkerForegroundColorIndex, |
|
|
MarkerStyle, PictureType, |
|
|
PictureUnit |
|
Series |
AxisGroup, Border, ErrorBars, |
Interior, InvertIfNegative, |
|
Explosion, HasDataLabels, |
MarkerBackgroundColor, |
|
HasErrorBars |
MarkerBackgroundColorIndex, |
|
|
MarkerForegroundColor, |
|
|
MarkerForegroundColorIndex, |
|
|
MarkerStyle, PictureType, |
|
|
PictureUnit, Smooth, Type, |
|
|
ApplyDataLabels, |
|
|
ClearFormats, Copy, |
|
|
DataLabels, Delete, ErrorBar, |
|
|
Points, Trendlines |
Series- |
Border, Name |
Delete |
Lines |
|
|
TickLabels Font, Name, NumberFormat, |
Delete |
|
|
Orientation |
|
TrendLine |
Backward, Border, DataLabel, |
Clear Formats, Delete |
|
DisplayEquation, |
|
|
DisplayRSquared, Forward, |
|
|
Index, Intercept, |
|
|
InterceptIsAuto, Name, |
|
|
NameIsAuto, Order, Period, |
|
|
Type |
|
UpBars |
Border, Interior, Name |
Delete |
Walls |
Border, Interior, Name |
ClearFormats |
Построение графиков с помощью MS Graph 5.0
Возможности отображения данных с помощью MS Graph 5.0 рассмотрим на примере построения формы в Visual FoxPro, в которой пользователь мог бы анализировать изменение данных с помощью графиков различного типа. Внешний вид такой формы приведен на рис. 10.6. Форма включает внедренный объект MS Graph 5.0 для отображения графика, раскрывающийся список для изменения отображаемых данных, раскрывающийся список и две кнопки выбора для изменения типа графика, кнопку управления для закрытия формы и элементы внешнего оформления.
www.books-shop.com
Рис. 10.6.
Для создания этой формы предварительно нам придется создать вспомогательную таблицу для хранения внедренного объекта MS Graph (графика). В этой же таблице (ее структура приведена в табл. 10.5) удобно хранить и дополнительную информацию о заголовках, а также сам запрос для получения наиболее "свежих" данных. Создать ее можно интерактивно с помощью Конструктора таблицы и информации, приведенной в табл. 10.5, или, что будет быстрее, с помощью следующих команд:
CREATE TABLE Graphs (title C(25), number I, query M, y_number I,; y1_caption C(25), y2_caption C(25), graph G)
APPEND BLANK
APPEND GENERAL graph CLASS "MSGraph"
Таблица 10.5. Структура таблицы GRAPHS.DBF для хранения внедренного графика
Поле |
Тип |
Ширина |
Назначение поля |
TITLE |
Character |
25 |
Заголовок графика |
NUMBER |
Integer |
4 |
Номер графика |
QUERY |
Memo |
4 |
Команда SQL запроса |
Y_NUMBER |
Integer |
4 |
Число осей Y |
Y1_CAPTION Character |
25 |
Заголовок первой оси |
|
|
|
|
Y |
Y2_CAPTION Character |
25 |
Заголовок второй оси |
|
|
|
|
Y |
GRAPH |
General |
4 |
График в виде |
|
|
|
внедренного объекта |
|
|
|
MS Graph 5.0 |
Всозданную таблицу запишите необходимые данные. Обратите внимание, что число символов
вSQL запросе, записываемом в поле Query, не должно превышать 256 и он должен быть записан
водну строку. Для того чтобы уложиться в это число, не стоит пренебрегать никакими способами сокращения длины команды, в том числе полезно вспомнить о возможности использования внутренних псевдонимов, как это показано в следующем примере (здесь сознательно не используется символ переноса строк):
SELECT m.month_name,SUM(d.Price*d.quantity),m.month_numb
FROM Months m,Invoices i,Inv_Details d WHERE i.kod_id = d.kod_id AND MONTH(i.inv_date) = m.month_numb GROUP BY m.month_name ORDER BY m.month_numb INTO CURSOR Datafile
Для временного хранения результата запроса мы используем курсор с именем Datafile. Теперь откроем Конструктор формы и разместим в новой форме объект OLE Bound Control.
www.books-shop.com
Присвоим ему имя olbGraph. В Data Environment формы добавим только что созданную таблицу и для свойства ControlSource объекта olbGraph выберем поле graph.
В коде события Init обновим данные для отображаемого графика:
ThisForm.LockScreen = .T. SELECT Graphs
GO TOP
cCom = Query
cCom =LEFT(cCom, LEN(cCom) - 2)
* Выполняем запрос, записанный в поле примечаний Query &cCom
ThisForm.RefreshGraph
ThisForm.ChangeGraphType
ThisForm.LockScreen = .F.
В коде для события Load формы опишем массив aType возможных типов графиков. В дальнейшем этот массив будет источником данных для списка типов графиков:
PUBLIC ARRAY aType[4,2] aType[1,1] = "С областями" aType[2,1] = "Гистограмма" aType[3,1] = "График" aType[4,1] = "Круговая" aType[1,2] = 1
aType[2,2] = 3 aType[3,2] = 4 aType[4,2] = 5
Тогда в событии Destroy формы не забудем стереть этот массив: RELEASE aType
Для отображения названий графиков создадим раскрывающийся список с именем cmbData. Присвоим ему следующие значения свойств:
RowSourceType = 2 - псевдоним; RowSource = Graphs.title
Вкоде события Init для объекта cmbData запишем: This.Value = Graphs.Title
Вкоде события InteractiveChange для объекта cmbData: LOCAL cData, cCom
ThisForm.LockScreen = .T. cData = This.Value SELECT Graphs
LOCATE FOR Title = cData cCom = Query
cCom =LEFT(cCom, LEN(cCom) - 2) &cCom
ThisForm.RefreshGraph
ThisForm.ChangeGraphType ThisForm.olbGraph.Object.ChartTitle.Caption = cData ThisForm.LockScreen = .F.
Для выбора типа графика разместим в форме раскрывающийся список с именем cmbType. Присвоим ему следующие значения свойств:
•RowSourceType = 5 - массив;
•RowSource = aType - имя массива;
•BoundColumn = 2 - значение свойства Value определяется по второй колонке массива.
Вкоде события Init объекта cmbType для первоначального выбора первого типа графика запишем:
This.Value = 1
В коде события InteractiveChange для объекта cmbType предусмотрим выполнение пользовательского метода:
www.books-shop.com
ThisForm.ChangeGraphType Опишем для формы пользовательский метод ChangeGraphType: LOCAL NType
nType = ThisForm.cmbType.Value
IF ThisForm.opgShow.Value = 1 * Двухмерный график
ThisForm.olbGraph.Type = NType ELSE
* Трехмерный график
ThisForm.olbGraph.Type = NType + 8 ENDIF
Для выбора двухмерного или трехмерного вида графика разместим в форме две кнопки выбора в группе кнопок выбора opgShow.
В коде события InteractiveChange для объекта opgShow предусмотрим выполнение пользовательского метода:
ThisForm.ChangeGraphType
Опишем для формы пользовательский метод RefreshGraph: LOCAL cGraphString, nY_lim
cGraphString = ""
*Сколько полей должно участвовать в построении графика nY_lim = Graphs.Y_number + 1
SELECT Datafile
*Создаем список полей, разделенных через табулятор,
*в конце строки записываем символ CHR(13)
FOR iCounter = 1 TO nY_lim
cGraphString = cGraphString + FIELDS(iCounter) ;
+ IIF(iCounter << nY_lim, CHR(9), CHR(13))
ENDFOR
*Приводим к символьному типу данные
*и формируем строку для передачи в OLE-объект
SCAN
FOR iCounter = 1 TO nY_lim
cGraphString = cGraphString + IIF(TYPE(Fields(iCounter))='C',; EVALUATE(FIELDS(iCounter)); ,str(EVALUATE(FIELDS(iCounter))));
+ IIF(iCounter << nY_lim, CHR(9), CHR(13)) ENDFOR
ENDSCAN SELECT Graphs
APPEND GENERAL graph DATA cGraphString
Построение графиков с помощью MS Excel 7.0
Работу с объектами Excel проиллюстрируем на примере создания формы для анализа данных в виде графиков, функционально аналогичной рассмотренной выше. При использовании Excel мы не связаны такими жесткими ограничениями на работу с данными, как в MS Graph, за счет того, что в Excel есть доступ к данным, на основании которых строится график через объект Sheet. В MS Graph данные располагаются в DataSheet, но к ним можно обеспечить только интерактивный, а не программный доступ. В то же время использование возможностей Excel требует больше ресурсов компьютера и лицензионной копии пакета на компьютере пользователя, в то время как MS Graph поставляется в составе всех пакетов разработки Microsoft. Посмотрите оба варианта форм для вывода графиков и выберите для себя более подходящий.
Для воплощения нашей идеи в Конструкторе формы создадим следующие объекты.
•oleChart - это объект OLE Container Control, с помощью которого мы встраиваем график Excel в форму. Нажимаем на панели инструментов Form Controls кнопку OLE Container Control и обводим в форме контур будущего графика. На экран выводится диалоговое окно Insert Object, в котором мы выбираем объект Excel Chart. Нажимаем кнопку OK и в обведенном контуре появляется график Excel, построенный на основании принятых по умолчанию данных, расположенных на втором рабочем листе таблицы. Одновременно, в соответствии с принципом редактирования на месте, изменяется главное меню Visual FoxPro для предоставления нам возможности отредактировать внешний вид представленного графика. Впоследствие можно вернуться к интерактивному
www.books-shop.com