Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2004.08.15;
Скачать: [xml.tar.bz2];

Вниз

Как масштабировать график (TChart) по заданным границам?   Найти похожие ветки 

 
Вопрос   (2004-07-28 19:28) [0]

У меня есть график. И есть некоторые границы (горизонтальные линии - например, минимум и максимум.. или желаемое значение), которые я рисую на канве с помощью обычного 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-28 20:40) [1]

У осей (левой, правой, нижней и конечно верхней) есть свойство Automatic(AutomaticMax/Min). Поставить их в false и делать что вздумается.


 
Вопрос   (2004-07-28 20:55) [2]

Так я хочу, чтобы оси масштабировались, но не по дефолту - подстраивались под график, а автоматически подстраивались под моё значение (чтобы, например, максимум - 4). Как это сделать "ручками" не подскажите?


 
olookin ©   (2004-07-28 20:57) [3]

Automatic:=false
Minimum:=Твое_значение
Maximum:=Твое_второе_значение

Обратим внимание на то, что если при текущей установке Miniimum больше Maximum то лезет ошибка.


 
olookin ©   (2004-07-28 21:00) [4]

Типа пример

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;


 
Вопрос   (2004-07-30 19:16) [5]

Спасибо, всё отлично масштабируется теперь. И совсем не сложно оказалось.

Только 1 вопрос остался: как рефрешить график? Я поместил код рисования границ на канве в обработчик события Chart1AfterDraw(Sender: TObject). Соответственно как заканчивается прорисовка графика - тогда начинают рисоваться границы. Но, допустим, я хочу нажатием кнопки убрать границы. Для этого надо как-то рефрешить график, но границы в обработчике Chart1AfterDraw не рисовать (флаг). Вопрос: как это (рефреш Chart1) сделать?


 
olookin ©   (2004-07-30 20:32) [6]

Chart1.Refresh?



Страницы: 1 вся ветка

Форум: "Основная";
Текущий архив: 2004.08.15;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.46 MB
Время: 0.036 c
3-1090329439
jonik
2004-07-20 17:17
2004.08.15
Lookup поля и SQL сервера


14-1090481423
CHES
2004-07-22 11:30
2004.08.15
пример использования интерфейсов


3-1090225525
AlexanderSK
2004-07-19 12:25
2004.08.15
Как работает IBQuery?


1-1091259123
Antonmm
2004-07-31 11:32
2004.08.15
SelStart в RichEdit


14-1091197323
menart
2004-07-30 18:22
2004.08.15
Проблемы админов и программистов





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский