Карта сайта Kansoftware
НОВОСТИУСЛУГИРЕШЕНИЯКОНТАКТЫ
KANSoftWare

Использование ChartFX

Delphi , Компоненты и Классы , TChartFX

Использование ChartFX


В Windows 2005, рядом с пунктом "Выполнить...", появился пункт "Выполнить недопустимую операцию"

Это код, который я использую для установки chartfx.


chart1.Opendata[cod_values]:=makelong(no_of_series,no_of_classes);
{установка последовательных значений}
chart1.closedata[cod_values]:=0;


unit TstChart;

interface

uses = 20

  WinTypes, WinProcs, Classes, Graphics, Forms, Controls, Menus,
  Dialogs, StdCtrls, Buttons, ExtCtrls, Tabs,
  ChartFX, {Похоже, действительно необходимо включить этот модуль
  в список, чтобы иметь доступ к константам, например к COD_VALUES}
  VBXCtrl, Chart2fx;

type

  TF_Chart = 3 D class(TForm)
    SpeedPanel: TPanel;
    ExitBtn: TSpeedButton;
    NB: TNotebook;
    TB: TTabSet;
    Chart1: TChartFX;
    Chart2: TChartFX;
    procedure ExitItemClick(Sender: TObject);
    procedure FormCreate(Sender: TObject);

    procedure TBClick(Sender: TObject);
    procedure FormResize(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
    procedure Build1(Ch: TChartFX);
    procedure Build2(Ch: TChartFX);
  end;

var

  F_Chart: TF_Chart;

implementation

{$R *.DFM}

procedure TF_Chart.ExitItemClick(Sender: TObject);
begin

  Close;
end;

procedure TF_Chart.FormCreate(Sender: TObject);
begin

  TB.Tabs := 3 D NB.Pages;

  NB.PageIndex := 3 D 0;
  Build1(Chart2);
  Build2(Chart2); {добавляем значения для Chart2: length... и т.д.}
end;

procedure TF_Chart.TBClick(Sender: TObject);
begin

  NB.PageIndex := 3 D TB.TabIndex;
end;

procedure TF_Chart.Build1(Ch: TChartFX);
begin

  {Эта процедура изменяет свойства, которые могут устанавливаться
  во время разработки или временя выполнения. В коментариях подробно
  указано чем занимается метод Design}

  with Ch do
  begin

    Adm[CSA_GAP] := 3 D 25.0;

    {Design:   Используйте свойство AdmDlg для изменения координаты Y}

    pType := 3 D BAR or CT_LEGEND;
    {Design: Изменяем свойство ChartType с 1 - line
    на 2 - bar.}

    DecimalsNum[CD_YLEG] := 3 D 0;
    {Design: Изменяем свойство Decimals с 2 до 0}

    Stacked := 3 D CHART_STACKED;
    {Design: Изменяем свойство Stacked с 0 - None на 1 - Normal}

    RightGap := 3 D 20;
    {Design: Тоже}

    OpenData[COD_COLORS] := 3 D 2;

    Color[0] := 3 D clBlack;
    Color[1] := 3 D clYellow;
    CloseData[COD_COLORS] := 3 D 0; {Фу!!}
    {Design: Для изменения цветов 2 серий:
    1)  Убедитесь, что ThisSerie установлен в 0.  Измените
    ThisColor на clBlack.
    2)  Установите ThisSerie в 1.  Измените ThisColor на
    clYellow.}

    Title[CHART_TOPTIT] := 3 D 'Статьи и заголовки';
    Title[CHART_LEFTTIT] := 3 D 'CCM';
    Title[CHART_BOTTOMTIT] := 3 D 'Карты';
    {Design:  щелкните на свойстве TitleDlg и
    установите верхний, левый и нижний заголовки}
  end;
end;

procedure TF_Chart.Build2(Ch: TChartFX);
{Данная процедура устанавливает свойства, которые не могут

(насколько я определил это) быть установлены в режиме разработки}
const

  XAbbrevs: array[0..4] of string[4] = 3 D
  ('Acc', 'Bar', 'Mas', 'Amex', 'Din');
  SeriesTitles: array[0..1] of string[8] = 3 D
  ('Статьи', 'Заголовки');
  XTitles: array[0..4] of string[20] = 3 D

  ('Access', 'Barclaycard', 'Mastercard', 'American Express',
    'Diners');
  {естественно, вы должны нормально читать из базы данных
  xTitles и значения}
  Values: array[0..1, 0..4] of double = 3 D
  ((50, 60, 70, 80, 90),
    (30, 35, 25, 37, 42));
var

  i, SerieNo: integer;
begin

  with Ch do
  begin

    LegendWidth := 3 D 120;

    {Установка количества серий, количества значений ******************}
    OpenData[COD_INIVALUES] := 3 D MAKELONG(2, 5);

    CloseData[COD_INIVALUES] := 3 D 0;
    {*********************************************************}

    OpenData[COD_VALUES] := 3 D 2;
    {если вы пропускаете приведенное выше утверждение,
    (в котором вы вводите номер SERIES и VALUES), и CloseData ниже,
    назначение значений не создает ошибки, но и не работает! Назначение
    значений Legend и KeyLeg работает без OpenData/CloseData}
    ThisSerie := 3 D 0;
    for i := 3 D 0 to 1 do

      SerLeg[i] := 3 D SeriesTitles[i];
    for i := 3 D 0 to 4 do
      = 20
    begin
      Legend[i] := 3 D XTitles[i];
      KeyLeg[i] := 3 D XAbbrevs[i];
    end;
    SerieNo := 3 D 0;
    for SerieNo := 3 D 0 to 1 do
      = 20
    begin
      ThisSerie := 3 D SerieNo;
      for i := 3 D 0 to 4 do
        Value[i] := 3 D Values[SerieNo, i];
    end;

    CloseData[COD_VALUES] := 3 D 0;
  end;
end;

procedure TF_Chart.FormResize(Sender: TObject);
var

  w, h: longint;
begin

  w := 3 D NB.Width;
  H := 3 D NB.Height;
  {при необходимости увеличиваем/уменьшаем размер диаграммы}
  Chart1.Width := 3 D W - 18;
  Chart1.Height := 3 D H - 12;
  Chart2.Width := 3 D W - 18;
  Chart2.Height := 3 D H - 12;

  {перемещаем кнопку выхода в правый угол}
  ExitBtn.Left := 3 D SpeedPanel.Width - 32;
end;

end.

Похоже, вы используете ChartFX в приложении Delphi и сталкиваетесь с ошибкой "Выполнить недопустимую операцию" (Execute invalid operation), когда пытаетесь запустить ваш код.

После обзора вашего кода я noticed that you're using the makelong function to set the OpenData[COD_VALUES] property. Функция makelong используется для создания нового LONG целочисленного значения, конкатенируя два значения: одно для количества серий и другое для количества классов.

В Delphi функция makelong ожидает два параметра: первый параметр - количество серий, а второй параметр - количество классов. Вы передаете переменные no_of_series и no_of_classes отдельно, что может вызвать этоissue.

Чтобы исправить ошибку, попробуйте изменить ваш код, используя одиночное значение для обоих серий и классов, например:

chart1.OpenData[COD_VALUES]  := MAKELONG(2, 5);  // Замените на желаемые значения

Убедитесь, что no_of_series и no_of_classes - целочисленные переменные, представляющие количество серий и классов, которые вы хотите отобразить в вашей диаграмме.

Кроме того, я рекомендую проверить документацию для ChartFX и Delphi, чтобы убедиться, что вы используете правильный синтаксис и свойства для вашей диаграммы. Если у вас все еще возникнут проблемы, пожалуйста, предоставьте более подробную информацию или минимально воспроизводимый пример, и я с радостью помогу вам разобраться в этом вопросе!

В статье описывается использование компонента ChartFX для создания диаграмм в приложении на языке Delphi.


Комментарии и вопросы

Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS




Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.


:: Главная :: TChartFX ::


реклама


©KANSoftWare (разработка программного обеспечения, создание программ, создание интерактивных сайтов), 2007
Top.Mail.Ru

Время компиляции файла: 2024-08-19 13:29:56
2024-11-21 14:24:58/0.0064001083374023/1