|
Навигация
|
Главная » Delphi Построение графиковИсточник: welikeit Что делать, если ваше приложение должно строить графики? Можно все сделать самостоятельно, а можно воспользоваться готовыми решениями (сторонними компонентами). Сегодня поговорим о компоненте gl.ocx, который является частью пакета MathCad. Этот компонент обладает большим количеством настроек: освещение, туман, внешний вид, перспектива и т.д., и способен украсить любую вашу программу. Если MathCad у вас установлен, запускаем Delphi, заходим в Component -> Import ActiveX Control и выбираем Mathsoft 3-D Plot module (Version x.x), где x.x - версия компонента (у меня 8.6). Если MathCad′а у вас нет, то скачиваем этот компонент из интернета. В этом случае вам еще понадобятся библиотеки EfiUtils.dll, UIUtil.dll, VSFC90.dll. Переписываем эти файлы в отдельный каталог, заходим в Component -> Import ActiveX Control и нажимаем кнопку "Add...". Находим gl.ocx и нажимаем "Install...". Компонент установится на вкладку ActiveX, и будет называться OpenGL. TOpenGL способен отображать 2D и 3D графики, а в качестве данных должен передаваться одномерный или двухмерный массив типа OleVariant соответственно. Начнем с простого и нарисуем синусоиду.procedure TForm1.Button1Click(Sender: TObject); const Start = -pi; Finish = pi; Step = 50; var Diagram: OleVariant; i: integer; begin Diagram := VarArrayCreate( [0,Step], varDouble ); for i := 0 to Step do Diagram := sin( ( Finish - Start ) / Step * i ); OpenGL1.RemoveSurfaces; OpenGL1.AddSurface( Diagram ); end; Для TOpenGL, заполненный массив представляет собой поверхность, которую нужно нарисовать, причем одновременно может быть отображено несколько таких поверхностей. Просто создаем несколько массивов OleVariant, заполняем их, и добавляем к списку поверхностей, которые должны быть построены, используя функцию AddSurface. RemoveSurfaces полностью отчищает этот список. Теперь посмотрим, как строится 3D график, на примере функции Cos(Sqrt(X*X+Y*Y)). procedure TForm1.FormCreate(Sender: TObject); var Diagram: OleVariant; i, j: integer; k: integer; begin k := 36; Diagram := VarArrayCreate( [0,k,0,k], varDouble ); for i := 0 to k do for j := 0 to k do Diagram[i,j] := Cos( Sqrt( ( i-k/2 ) * ( i-k/2 ) + ( j-k/2 ) * ( j-k/2 ) ) ); OpenGL1.RemoveSurfaces; OpenGL1.AddSurface( Diagram ); end; Теперь поговорим о распространении приложений, использующих этот компонент. Не факт, что у пользователя, установившего вашу программу, установлен MathCad. Следовательно, вместе с приложением придется распространять следующие файлы: gl.ocx, EfiUtils.dll, UIUtil.dll, VSFC90.dll. Помимо этого следует помнить, что gl.ocx необходимо зарегистрировать в системе. Если вы будете распространять свое приложение в архиве, вам самим придется позаботиться о регистрации компонента. Для этого в системе имеется штатная утилита regsvr32. Регистрация выполняется следующим образом: "regsvr32 c:путь к файлуgl.ocx". Обратное действие выполняется так: "regsvr32 /u c:путь к файлуgl.ocx". Разумеется, путь к файлу должен быть реальный. Если вы будете распространять свое приложение в виде инсталляционного пакета, то заботу о регистрации компонента можно возложить на него. Например, если вы делаете инсталлятор в CreateInstall, то на вкладке "Мастер" выберите "Регистрировать", и добавьте gl.ocx к списку файлов, которые нужно зарегистрировать. А для Inno Setup это может выглядеть примерно так: [Setup] AppName=MathSoft 3-D plot module AppVerName=MathSoft 3-D plot module 8.0 AppCopyright=MathSoft, Inc DefaultDirName={sys} [Files] Source: "C:distrActiveXUiUtil.dll"; DestDir: "{sys}" Source: "C:distrActiveXEfiUtils.dll"; DestDir: "{sys}" Source: "C:distrActiveXVSFC90.dll"; DestDir: "{sys}" Source: "C:distrActiveXgl.ocx"; DestDir: "{sys}"; Flags: regserver На сегодня это все. Удачи в программировании. UML - новый стандарт языка объектно-ориентированного моделирования. Квинтэссенция успешного опыта. Создание компонент в DELPHI. Google API. Интерфейс ClientLogin для Delphi. Отзывы об Учебном центре Interface Ltd.. Использование утилит и операторов языка SQL для доступа к локальному серверу InterBase. Главная » Delphi |
© 2024 Team.Furia.Ru.
Частичное копирование материалов разрешено. |