Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Компоненты Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 02.03.2015, 22:39   #1
Daemvil
Пользователь
 
Регистрация: 23.12.2009
Сообщений: 56
Восклицание компонент для построения графиков

Здравствуйте, братцы и сестры!
Пишу компонент для построения графиков. Назвал его DiScope.
Появилась проблема: описываю в компоненте свойство Area:TArea нестандартного типа. При визуальном редактировании компонента нажимаю на "плюсик" этого свойства - а оно не раскрывается, просто плюс превращается в минус. Как заставить редактор свойств показать список свойств класса Area?
Кого заинтересовало - искренне надеюсь на вашу помощь.
Исходники визуального компонента прилагаю.
https://www.dropbox.com/s/ev4l3umzam..._2015.zip?dl=0
Nostra Sunt
Daemvil вне форума Ответить с цитированием
Старый 03.03.2015, 04:08   #2
min@y™
Цифровой кот
Старожил
 
Аватар для min@y™
 
Регистрация: 29.08.2014
Сообщений: 7,629
По умолчанию

посмотри, как строятся свойства-потомки TPersistent: (TPen, TBrush, TFont...)
Расскажу я вам, дружочки, как выращивать грибочки: нужно в поле утром рано сдвинуть два куска урана...
min@y™ вне форума Ответить с цитированием
Старый 03.03.2015, 06:49   #3
Daemvil
Пользователь
 
Регистрация: 23.12.2009
Сообщений: 56
По умолчанию

Цитата:
Сообщение от min@y™ Посмотреть сообщение
посмотри, как строятся свойства-потомки TPersistent: (TPen, TBrush, TFont...)
Благодарю. Видимо, свойство должно быть типа TPersistent. Решил вроде проблему, объявив TArea и еще несколько необходимых, как класс TPersistent, и свойства открылись. Кому интересен компонент и его развитие - пишите. Поддерживает на данный момент логарифмические оси и вертикальные мультиоси
Nostra Sunt
Daemvil вне форума Ответить с цитированием
Старый 05.03.2015, 12:03   #4
Daemvil
Пользователь
 
Регистрация: 23.12.2009
Сообщений: 56
По умолчанию

И снова здравствуйте. Подскажите, пожалуйста, как правильно надо объявлять классы, чтобы было такое вложение?

Area и Axes в данном случае имеют тип TComponent, TAxisArray - TCollection. При использовании TAxisArray непосредственно в TDiScope - коллекция отрабатывает нормально. Но когда делаю вложения (как на скриншоте) - коллекцию можно отредактировать, но при этом при работе и после завершения приложения количество элементов в коллекции снова сбрасывается в 1.
Код:
  TAxis = class(TCollectionItem)
  private
    FAxisType:TAxisType;
    procedure SetAxisType(Const AxisType_:TAxisType);
  public
    DimensPix:TDimensPix;                //
    Dimens:TDimens;                      //
    IndentAxis:integer;                  // для осей Y: величина отступа очередной оси от края BMap
    Color:TColor;                        // цвет оси
    Caption:TTitle;
    constructor Create(Collection: TCollection); override;
    destructor Destroy; override;
  published
    property AxisType:TAxisType read FAxisType write SetAxisType default atLinear;
  end;

  TAxes = class;
  TArea = class;
  TDiScope = class;

  TAxisArray = class(TCollection)
  private
    FAxCount:integer;
    FAxisArray: Array of TAxis;
    FAxes:TAxes;
 //   procedure SetAxCount(const Value: integer);
    function GetItem(Index: Integer): TAxis;
    procedure SetItem(Index: Integer; const Value: TAxis);
//  protected

  public
    function add: TAxis;
    property items[Index: Integer]: TAxis read GetItem write SetItem; default;
    constructor create(Axes:TAxes);
  published
  //  property Count:integer read FAxCount write SetAxCount default 0;
  end;

  TAxes = class(TComponent)
  private
    FCAxisArray:TAxisArray;
    FArea:TArea;
    procedure setAxisArray(const Value: TAxisArray);
  public
    IndentFactor:integer;                // приращение отступа очередной оси от края BMap
    x:TAxis;
    constructor Create(AOwner:TComponent);
  published
    property y:TAxisArray read FCAxisArray write setAxisArray;
  end;

  TArea = class(TComponent)
  private
    FAxes:TAxes;
    FDiscope:TDiscope;
    FTestPr:integer;
    procedure SetAxes(Const Axes:TAxes);
    procedure settestpr(const Value: integer);
  public
    Color:TColor;
    BrushStyle:TBrushStyle;
    Channels:Array of TChannel;
    Grid:TGrid;
    Title:TTitle;
    Legend:TLegend;
    BMap:TBitMap;
    AreaDrawRect:TRect;
    // CurvesBMap:TBitMap;
    constructor Create(AOwner:TComponent);
  published
    property Axes:TAxes read FAxes write SetAxes;
    property testprop:integer read FTestPr write settestpr;
  end;

  TDiScope = class(TCustomControl)
  private
    { Private declarations }
    FWidth:integer;
    FHeight:integer;
    FArea:TArea;
.........
  public
    constructor Create(AOwner: TComponent); override;
Nostra Sunt

Последний раз редактировалось Daemvil; 05.03.2015 в 14:26.
Daemvil вне форума Ответить с цитированием
Старый 16.03.2015, 10:48   #5
Daemvil
Пользователь
 
Регистрация: 23.12.2009
Сообщений: 56
По умолчанию

Доброго времени суток всем!
Понятно, что DiScope в первую очередь нужен мне, но хотелось бы узнать, на каких ресурсах можно выложить свои наработки, чтобы вообще узнать, насколько людям нужен данный компонент? и найдутся ли люди, которые будут помогать его развивать?
Выложу напоследок последние наработки, теперь можно таскать графики за вертикальные оси (передвигать шкалу), ну и в дизайнтайме можно маломальски нормально редактировать компонент (шрифты, цвета, размеры).
https://www.dropbox.com/s/2m94ogu8kd...Scope.zip?dl=0
Nostra Sunt
Daemvil вне форума Ответить с цитированием
Старый 16.03.2015, 10:56   #6
Toxa
Форумчанин Подтвердите свой е-майл
 
Аватар для Toxa
 
Регистрация: 01.12.2006
Сообщений: 514
По умолчанию

а чем компонент будет отличаться от TeeChart ?
Пишу на Delphi за еду
Toxa вне форума Ответить с цитированием
Старый 16.03.2015, 14:40   #7
Daemvil
Пользователь
 
Регистрация: 23.12.2009
Сообщений: 56
По умолчанию

Цитата:
Сообщение от Toxa Посмотреть сообщение
а чем компонент будет отличаться от TeeChart ?
проще сказать, что в нем будет такого, что нет в тичарте:
- мультиоси, доступные в дизайнере
- оси можно таскать
- быстрота работы
возможно, еще какие-либо преимущества найдут
Nostra Sunt
Daemvil вне форума Ответить с цитированием
Старый 16.03.2015, 17:11   #8
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
оси можно таскать
А в стандартном разве нельзя?
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 17.03.2015, 13:48   #9
Daemvil
Пользователь
 
Регистрация: 23.12.2009
Сообщений: 56
По умолчанию

Цитата:
Сообщение от Stilet Посмотреть сообщение
А в стандартном разве нельзя?
в стандартном не таскаются (имеется ввиду перетаскивание шкал мышью)
Nostra Sunt
Daemvil вне форума Ответить с цитированием
Старый 17.03.2015, 15:05   #10
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

В стандартном таскается сама канва. Этого достаточно в 100% случаев.
Или есть случаи когда нужно перетаскивать конкретно нить оси?
I'm learning to live...
Stilet вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
программка для построения графиков тригонометрических функций sin cos tg ctg [delphi] Николай.А Помощь студентам 3 06.10.2011 08:46
Компонент для построения трёхмерных графиков rocky7 Компоненты Delphi 2 29.09.2009 14:15
программа для построения графиков Kris007 Microsoft Office Word 1 04.11.2008 23:37
Компонент для построения графика Rusl92 Общие вопросы Delphi 2 07.09.2008 22:18
Компонент для построения графиков из таблицы БД Glizer Компоненты Delphi 3 18.04.2008 13:29