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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 15.11.2013, 14:55   #1
impeee
Пользователь
 
Регистрация: 11.09.2013
Сообщений: 56
По умолчанию неправильный zoom в TChart

Всем привет! Тут такая проблема. Когда работал с TChart на Delphi7, зум в нем происходил одним образом, а когда взялся за TChart в RAD XE5, зум происходит иным образом, нежелательным )

Такой вот был код зума на Delphi7:

Код:
procedure TFrmMainInfo.Zoom1;
begin
  if AverageZoom1 = 1 then
   begin
    Chart3c.UndoZoom;
    Chart3c.ZoomPercent(125);
   end;
  if AverageZoom1 = 2 then
   begin  
    Chart3c.UndoZoom;
    Chart3c.ZoomPercent(130);
   end;
  if AverageZoom1 = 3 then
   begin   
    Chart3c.UndoZoom;
    Chart3c.ZoomPercent(135);
   end;
    Chart3c.LeftAxis.Minimum:= 0;
    Chart3c.LeftAxis.Maximum:= 100;
    Chart3c.BottomAxis.PositionPercent:= 0;
end;
т.е. при изменении переменной AverageZoom1 на единицу происходило увеличение или уменьшение TCharta на 5%. вот. а в RAD XE5 этот же самый код работает не так ) т.е. он суммирует предыдущий зум при каждом изменении этого параметра, и выходит так, что TChart постоянно увеличивается в арифметической прогрессии. Даже если сделать так

Код:
    Chart3c.UndoZoom;
    Chart3c.ZoomPercent(135);
Даже если поставить UndoZoom - картина таже самая, он сначала сбрасывает зум (на 100%, в исходное состояние), ну а потом опять увеличивает с предыдущим зумом. Как же так? Как избавиться от этого )

Настройки TCharta в обоих случаях - идентичные абсолютно.
impeee вне форума Ответить с цитированием
Старый 15.11.2013, 22:58   #2
wexter
 
Регистрация: 01.04.2010
Сообщений: 8
По умолчанию

после

procedure TForm1.Chart1MouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer);
begin
Chart1.SetFocus;
end;

в чарте при прокрутке мишкой...прокручивается график по оси Y....как ето отключить?


обработка прокрутки колеса вниз идет хорошо



procedure TForm1.Chart1MouseWheelDown(Sender: TObject; Shift: TShiftState;
MousePos: TPoint; var Handled: Boolean);
begin
// Детекция движения колеса вниз
Chart1.ZoomPercent(90);
end;

procedure TForm1.Chart1MouseUp(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
Chart1.ZoomPercent(110);
end;


а прокрутка вверх - прокручивается график по оси Y

при зуме в кнопочном режиме....работает хорошо....
wexter вне форума Ответить с цитированием
Старый 17.11.2013, 21:24   #3
wexter
 
Регистрация: 01.04.2010
Сообщений: 8
По умолчанию

вообщето не Chart1MouseUp, а Chart1MouseWheelUp...натупил немного.....

но при масштабировании... график смещается относительно центра то вверх...то вниз...




сделал.....может кому то пригодится...

procedure TForm1.Chart1MouseWheel(Sender: TObject; Shift: TShiftState;
WheelDelta: Integer; MousePos: TPoint; var Handled: Boolean);
begin
Handled:=true;
if WheelDelta>0 then
Chart1.ZoomPercent(110)
else
if WheelDelta<0 then
Chart1.ZoomPercent(90)
end;


Handled поставил тру...запретил прокручивание.....а с помощью параметра WheelDelta определил направление прокручивания....
wexter вне форума Ответить с цитированием
Старый 17.11.2013, 22:06   #4
ReportCube
Форумчанин
 
Аватар для ReportCube
 
Регистрация: 11.03.2011
Сообщений: 426
По умолчанию

А вы не пробовали просто выделить квадратиком нужно место для зума?
ReportCube вне форума Ответить с цитированием
Старый 17.11.2013, 23:47   #5
wexter
 
Регистрация: 01.04.2010
Сообщений: 8
По умолчанию

Цитата:
Сообщение от ReportCube Посмотреть сообщение
А вы не пробовали просто выделить квадратиком нужно место для зума?
ет совсем не то что надо......етого мне было мало....
wexter вне форума Ответить с цитированием
Старый 12.12.2013, 11:01   #6
impeee
Пользователь
 
Регистрация: 11.09.2013
Сообщений: 56
По умолчанию

ребята, возвращаясь к первому посту этой темы.. пожалуйста, откликнитесь кто-нибудь, помогите )) нужен нормальный зум в тчарт, ведь он способен на это же...
существует кнопка "+" и кнопка "-". когда щелкаем по плюсу, то по логике, должно происходить увеличение чарта на 25%:

Код:
    Chart1.UndoZoom;
    Chart1.ZoomPercent(125);
при минусе, уменьшение на 25%:

Код:
    Chart1.UndoZoom;
    Chart1.ZoomPercent(75);
..но, он увеличивает больше, чем уменьшает, понимаете.. и если по разу нажимать на каждую из кнопок, то график будет увеличиваться в арифметической прогрессии, а хотелось бы равномерного увеличения. т.е. UndoZoom не работает, он просто игнорируется, но есть еще ОДНО НО (!). если в TChart.OnUndoZoom написать
Код:
ShowMessage('asd');
то будет происходить следующее:

при нажатии кнопки +, график возвращается в исходное состояние (100%), вылезает ShowMessage, нажимаем ОК, и график увеличивается на 25%. При нажатии кнопки "минус" - аналогично, но уменьшается на 75%. Только в этом случае, предыдущий зум уже не запоминается, он сбрасывается действительно, и происходит увеличение/уменьшение именно на указанное число. Так в чем же здесь соль?

--------------

еще одно наблюдение. если после прорисовки графика например, сразу же прописать Chart1.ZoomPercent(X); (где X - любое число, хоть 1, хоть миллиард), график увеличивается на огромное число, всегда одинаковое, и в дальнейшем, команда ZoomPercent игнорируется в принципе.. вот это все мои наблюдения.что вы могли бы сказать?

Последний раз редактировалось impeee; 12.12.2013 в 11:08.
impeee вне форума Ответить с цитированием
Старый 12.12.2013, 11:46   #7
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 19,042
По умолчанию

А что сказать. Уменьшение и увеличение от текущего состояния идет. 125% от 1 даст 1,25. 75% от 1,25 даст 0,8875, а не 0,75 как ожидаете. Нужно пересчитывать процент для арифметической прогресси - второй раз 125% нужно превратить в 120%, третий - в 116.66% и т.д.
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию

Последний раз редактировалось Аватар; 12.12.2013 в 11:51.
Аватар вне форума Ответить с цитированием
Старый 12.12.2013, 11:53   #8
impeee
Пользователь
 
Регистрация: 11.09.2013
Сообщений: 56
По умолчанию

Цитата:
Сообщение от Аватар Посмотреть сообщение
А что сказать. Уменьшение и увеличение от текущего состояния идет. 125% от 1 даст 1,25. 75% от 1,25 даст 0,8875, а не 0,75 как ожидаете
как считаете, есть способ как-то сделать все "по-человечески", с равномерным увеличением/уменьшением? Ведь в TChart на Delphi7 было все по уму сделано. Я подозреваю, что нужно что-то прописать в TChart.OnUndoZoom, вот только не знаю что.. ((

Я пытался убирать/включать всякие свойства вроде HistoricalZoom, FullRepaint, KeepAspectRatio, но никакой реакции не следует. я так понимаю, они предназначены для того самого увеличения, когда пользователь зажатой мышкой рисует квадрат зума на графике.


может есть какие-то winapi функции)) или еще что-то. я не знаю, ступор и отчаяние. я бы бросил все это давно, не стал бы возиться с этим маразмом, но тут вот принципиально приспичило человеку ((

Последний раз редактировалось impeee; 12.12.2013 в 11:59.
impeee вне форума Ответить с цитированием
Ответ


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

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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Zoom в делфи. Rockot Общие вопросы Delphi 2 14.01.2013 04:50
Chart + Zoom WorldMaster C# (си шарп) 0 04.11.2012 23:24
zoom по горизонтали tchart sautina Компоненты Delphi 2 13.07.2012 23:50
JS + CSS zoom Gennadiy JavaScript, Ajax 1 12.05.2012 14:23