|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#1
|
|||
|
|||
Проблема с графиком функции (Delphi)
Доброго дня всем участникам форума! =)
Имеется программа для построения графиков функций. Нужно сделать так, чтобы при наведении мышкой на график функции (при условии, что нажата, скажем, заданная горячая клавиша) курсор мыши "приклеивается" к графику, после чего его нельзя убрать с линии графика, а лишь водить курсором по ней (пока нажата клавиша). При этом программа должна отображать текущие координаты по осям X и Y, над которыми в текущий момент находится этот "приклеенный" к линии графика курсор. Мне говорили, подобное есть в какой-то из версий MathCAD. Как это можно реализовать? Спасибо заранее за ответы! |
#2
|
|||
|
|||
Извините пожалуйста, браузер сбоит - тема продублировалась. Удалите ее, если можно. Спасибо!
|
#3
|
|||
|
|||
Это достаточно легко сделать, если вы рисуете график с помощью компонента типа TChart. У него есть методы, возвращающие экранные координаты точек графика. Поскольку я не знаю, график какой функции вы рисуете, покажу очень приблизительно лишь суть на примере какого-нибудь синуса. А дальше, думаю, разовьете идею самостоятельно. Пишите примерно такой обработчик события OnMouseMove для объекта TChart, на котором рисуется график.
Код:
procedure TForm1.Chart1MouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer); var newY: Integer; curX, curY: Double; begin if not (ssCtrl in Shift) then Exit; curX := Chart1.Series[0].XScreenToValue(X); curY := Sin(curX); // ваша функция вместо синуса newY := Chart1.Series[0].CalcYPosValue(curY); Form1.Caption := FormatFloat('0.000E+00', curX) + ' : ' + FormatFloat('0.000E+00', curY); SetCursorPos(Mouse.CursorPos.X, Form1.Top + Chart1.Top + newY); end; Вполне возможно, ко второму параметру функции SetCursorPos понадобится дополнительная поправка на то, что у объекта TChart имеется бордюр (точнее, отступ от края объекта до рамки графика). P.S. Ну, примерно. Может, вам предложат лучше. |