![]() |
Прежде чем задать вопрос, смотрите FAQ.
Рекомендуем загрузить DRKB.
![]() |
*kitty* |
![]() ![]()
Сообщение
#1
|
Новичок ![]() Группа: Пользователи Сообщений: 28 Пол: Женский Репутация: ![]() ![]() ![]() |
Проблема в следующем: есть TChart и несколько серий, количество которых заранее неизвестно, поэтому серии создаются динамически по необходимости. Каждая серия - это графическое представление сигнала. Каждый сигнал имеет собственное имя. Имена содержатся в массиве, например: Name_of_signals: array [1..N] of string. Нужно, чтобы по оси У (LeftAxis) напротив каждого сигнала стояло его имя (как на рис.2). Используя событие OnGetAxisLabel ,
procedure TForm1.Chart1GetAxisLabel(Sender: TChartAxis; метка появляется только напротив первого сигнала, т.е только для первой серии (рис.1). Как сделать, чтобы напротив каждой серии стояло нужное имя? Что-то никак не получается... На рисунках ниже показано как примерно это должно выглядеть. ![]() ![]() |
![]() ![]() |
volvo |
![]()
Сообщение
#2
|
Гость ![]() |
Показывай, как создаются серии динамически (в частности - каким образом получается расположение серий "одна под другой"). К тому же в приведенном фрагменте кода i - локальная переменная, которой нигде не присваивается никакое значение, там мусор, а не номер серии.
|
*kitty* |
![]()
Сообщение
#3
|
Новичок ![]() Группа: Пользователи Сообщений: 28 Пол: Женский Репутация: ![]() ![]() ![]() |
К тому же в приведенном фрагменте кода i - локальная переменная, которой нигде не присваивается никакое значение, там мусор, а не номер серии. Да это понятно, я просто хотела на простом примере разобраться, написала так просто для вида ![]() Реальная же программа гораздо объёмнее, все данные считываются с текстового файла, определённого вида. Наверное, в ней будет сложно разобраться, но если это так принципиально, то, конечно, выложу. |
*kitty* |
![]()
Сообщение
#4
|
Новичок ![]() Группа: Пользователи Сообщений: 28 Пол: Женский Репутация: ![]() ![]() ![]() |
Выкладываю образец файла и программу.
Файл текстовый, каждому столбцу соответствует один сигнал, каждой строке - состояние сигналов на определённый момент времени, имена сигналов в начале файла в комментариях (/*.....*/), т.е имя первого сигнала Р3.7, второго Р3.6, третьего Р3.5, ... , последнего RST; всего 38 столбцов - 38 сигналов. Программа осуществляет графическое представление этих сигналов по определённым правилам в зависимости от символов, которыми представлен сигнал. По оси Х моменты времени, а вот по У должно быть соответствующее имя для каждого сигнала. Это пока и не получается осуществить. Сейчас в программе просто нумерация сигналов по оси У, а внизу легенда, где прописаны имена... Для просмотра файла лучше всего использовать WordPad или открывать через FAR. Прикрепленные файлы ![]() |
volvo |
![]()
Сообщение
#5
|
Гость ![]() |
Как-то вот так:
1) добавляешь procedure TForm1.FormCreate(Sender: TObject);, чтобы включить альтернативное отображение меток (они будут отображаться в 2 столбца, если не хватает места отобразить ВСЕ в одном столбце. Попробуй, увидишь...) 2) и в OnGetAxisLabel - вот такая "уличная магия": procedure TForm1.Chart1GetAxisLabel(Sender: TChartAxis; Series: TChartSeries;Естественно, что Name_of_signals должна быть описана глобально, а не локально в TForm1.Button1Click. Просто перенеси определения мессива на несколько строк выше. Да, и отключи Легенду, она только место занимает. Теперь она тебе не нужна. Так же, как и заполнение Chart1.Series[j-1].Title Вот так это выглядит: ![]() |
*kitty* |
![]()
Сообщение
#6
|
Новичок ![]() Группа: Пользователи Сообщений: 28 Пол: Женский Репутация: ![]() ![]() ![]() |
Chart1.LeftAxis.LabelsAlternate := True;Не было у меня для LeftAxis свойства LabelsAlternate, пришлось просто уменьшить шрифт, чтобы всё уместилось. Сути это не изменило, всё получилось ![]() volvo, огромное Вам спасибо ![]() Сообщение отредактировано: *kitty* - 24.07.2009 12:16 |
![]() ![]() |
![]() |
Текстовая версия | 8.07.2025 10:13 |