![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Как масштабировать график (TChart) по заданным границам? [D5, Win2k]
Вопрос © (2004-07-28 19:28:00)У меня есть график. И есть некоторые границы (горизонтальные линии - например, минимум и максимум.. или желаемое значение), которые я рисую на канве с помощью обычного lineTo. Пример:
MoveTo(15,Chart1.LeftAxis.CalcYPosValue(max));
LineTo(852,Chart1.LeftAxis.CalcYPosValue(max));
Линии рисуются правильно. Но одна беда - они не являются сериями точек TChart'a и поэтому, если допустим максимальное значение по Y у графика - 2, а верхняя граница равна 4-м, то она попросту "уезжает" вверх. Как в ходе работы программы смаштабировать график (например уменьшить), чтобы сверху было максимальное значение 4, при максимальном значении графика 2 (по умолчанию график сам масштабируется под максимальное значение 2). Подскажите пожалуйста наиболее простой способ. Первое, что пришло в голову - нарисовать ещё 2 серии точек (пусть по одной точке) - минимум и максимум, но это "некрасивое" решение, неужели нет другого?
olookin (2004-07-30 20:32:00) [1]Chart1.Refresh?
Вопрос (2004-07-30 19:16:00) [2]Спасибо, всё отлично масштабируется теперь. И совсем не сложно оказалось.
Только 1 вопрос остался: как рефрешить график? Я поместил код рисования границ на канве в обработчик события Chart1AfterDraw(Sender: TObject). Соответственно как заканчивается прорисовка графика - тогда начинают рисоваться границы. Но, допустим, я хочу нажатием кнопки убрать границы. Для этого надо как-то рефрешить график, но границы в обработчике Chart1AfterDraw не рисовать (флаг). Вопрос: как это (рефреш Chart1) сделать?
olookin (2004-07-28 21:00:00) [3]Типа пример
procedure TForm1.Button1Click(Sender: TObject);
begin
chart1.leftaxis.automatic:=false;
chart1.leftaxis.Minimum:=-100;
chart1.leftaxis.Maximum:=100;
end;
procedure TForm1.FormShow(Sender: TObject);
var i: integer;
begin
for i:=0 to 10 do chart1.series[0].addxy(i,random(i*20));
end;
olookin (2004-07-28 20:57:00) [4]Automatic:=false
Minimum:=Твое_значение
Maximum:=Твое_второе_значение
Обратим внимание на то, что если при текущей установке Miniimum больше Maximum то лезет ошибка.
Вопрос (2004-07-28 20:55:00) [5]Так я хочу, чтобы оси масштабировались, но не по дефолту - подстраивались под график, а автоматически подстраивались под моё значение (чтобы, например, максимум - 4). Как это сделать "ручками" не подскажите?
olookin (2004-07-28 20:40:00) [6]У осей (левой, правой, нижней и конечно верхней) есть свойство Automatic(AutomaticMax/Min). Поставить их в false и делать что вздумается.