Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > [ "Начинающим" ]
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 26.05.2009, 23:11
Roxanne Roxanne вне форума
Прохожий
 
Регистрация: 24.05.2009
Сообщения: 7
Репутация: 10
По умолчанию Проблема с графиком функции (Delphi)

Доброго дня всем участникам форума! =)
Имеется программа для построения графиков функций. Нужно сделать так, чтобы при наведении мышкой на график функции (при условии, что нажата, скажем, заданная горячая клавиша) курсор мыши "приклеивается" к графику, после чего его нельзя убрать с линии графика, а лишь водить курсором по ней (пока нажата клавиша). При этом программа должна отображать текущие координаты по осям X и Y, над которыми в текущий момент находится этот "приклеенный" к линии графика курсор. Мне говорили, подобное есть в какой-то из версий MathCAD. Как это можно реализовать?
Спасибо заранее за ответы!
Ответить с цитированием
  #2  
Старый 26.05.2009, 23:12
Roxanne Roxanne вне форума
Прохожий
 
Регистрация: 24.05.2009
Сообщения: 7
Репутация: 10
По умолчанию

Извините пожалуйста, браузер сбоит - тема продублировалась. Удалите ее, если можно. Спасибо!
Ответить с цитированием
  #3  
Старый 27.05.2009, 00:18
Nyctos Kasignete Nyctos Kasignete вне форума
Активный
 
Регистрация: 29.03.2009
Сообщения: 300
Репутация: 94
По умолчанию

Это достаточно легко сделать, если вы рисуете график с помощью компонента типа 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. Ну, примерно. Может, вам предложат лучше.
Ответить с цитированием
Ответ


Delphi Sources

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

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 18:44.


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2023

ВКонтакте   Facebook   Twitter