Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
||
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[18.227.46.229] |
|
Сообщ.
#1
,
|
|
|
Скажите пожалуйста можно ли в TChart сделать такой курсор его стандартными методами? Нужно чтобы при нажатии скрола появлялся курсор ввиде креста и от него отходили лучи которые доходили до осей и с месте их пересечения позывалось значение по конкретной оси.
Конкретно пока не получается даже сделать постоянным вид курсора, при нажатии он становиться ввиде креста, стоит только шевельнуть мышкой как он тут же становиться по дефолту. Для лучей думаю использовать Tools Color Line, но вот пока не знаю как там отображать значение по оси в точке пересечения. Помогите советом плиз... Пример желаемого состояния на рисунке. Заранее большое спасибо. Прикреплённый файлCursor.JPG (32.71 Кбайт, скачиваний: 589) |
Сообщ.
#2
,
|
|
|
Цитата Star62 @ Нет. Скажите пожалуйста можно ли в TChart сделать такой курсор его стандартными методами? |
Сообщ.
#3
,
|
|
|
Цитата Testudo @ Нет. Почему сразу нет, мне например, пришлось делать что-то подобное. Сначала просто рисовал на Canvas, но на печать он это не выводил, пришлось кое-как извратиться и сделать. |
Сообщ.
#4
,
|
|
|
Да можно все.
procedure TForm1.Chart1MouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer); var xy,bxy:trect; dy:integer; begin form1.Cursor:=0; xy:=Chart1.ChartRect; bxy:=Chart1.boundsrect; dy:=xy.top-bxy.top; if (x>=xy.left)and(x<=xy.right)and(y>=xy.top+1)and(y<=xy.bottom+1) then begin Chart1.Repaint; Chart1.Canvas.MoveTo(x,xy.top); Chart1.Canvas.LineTo(x,xy.bottom); Chart1.Canvas.MoveTo(xy.left,xy.top+y+dy+2); Chart1.Canvas.LineTo(xy.right,xy.top+y+dy+2); end else Chart1.Repaint; end; Нужно еще выбрать свойство chart1.cursor на ту картинку, которая нравится. |
Сообщ.
#5
,
|
|
|
В том варианте ,что идет в поставке Дельфи - надо прорисовывать самому. В версии TChart Professional есть и это и многое другое.
|
Сообщ.
#6
,
|
|
|
Цитата WildBear @ Он спрашивал про стандартные методы. Стандартно такой функции нет. В TChart Professional - есть, ручками сделать можно. В том варианте ,что идет в поставке Дельфи - надо прорисовывать самому. В версии TChart Professional есть и это и многое другое. |
Сообщ.
#7
,
|
|
|
Цитата parle @ Да можно все. procedure TForm1.Chart1MouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer); var xy,bxy:trect; dy:integer; begin form1.Cursor:=0; xy:=Chart1.ChartRect; bxy:=Chart1.boundsrect; dy:=xy.top-bxy.top; if (x>=xy.left)and(x<=xy.right)and(y>=xy.top+1)and(y<=xy.bottom+1) then begin Chart1.Repaint; Chart1.Canvas.MoveTo(x,xy.top); Chart1.Canvas.LineTo(x,xy.bottom); Chart1.Canvas.MoveTo(xy.left,xy.top+y+dy+2); Chart1.Canvas.LineTo(xy.right,xy.top+y+dy+2); end else Chart1.Repaint; end; Нужно еще выбрать свойство chart1.cursor на ту картинку, которая нравится. А где лежит TRect, у меня [Error] ImageOfTheStatisticalParameters.PAS(290): Undeclared identifier: 'Trect'. И еще вопросик, а зачем переменная dy, она даже не описана как переменная. А подскажите, как сделать чтобы при перемещении мыши курсор не менялся на Defaul, после того как я его поменял на crCross, по нажатию на среднюю кнопку мыши. |
Сообщ.
#8
,
|
|
|
Цитата Star62 @ uses TypesА где лежит TRect Цитата Star62 @ Покажи как меняешь курсор.А подскажите, как сделать чтобы при перемещении мыши курсор не менялся на Defaul, после того как я его поменял на crCross, по нажатию на среднюю кнопку мыши. Цитата Star62 @ И как переменная описана, и используется. И еще вопросик, а зачем переменная dy, она даже не описана как переменная. |
Сообщ.
#9
,
|
|
|
Цитата Testudo @ Покажи как меняешь курсор. procedure TMDIChildStatisticalParameters.ChartFunctionAvtokorellMouseUp( Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); begin if Button = mbMiddle then ChartFunctionAvtokorell.Cursor:=crCross; end; Цитата Testudo @ И как переменная описана, и используется. Сори, мой косяк, проглядел, невнимательность. |
Сообщ.
#10
,
|
|
|
По-моему в старших версиях TChart (например, для Delphi 2006) это штатно. А может только в Professional. Видел где-то в демках.
|
Сообщ.
#11
,
|
|
|
Я так и не понял, как мне сделать, чтобы курсор оставался в заданном состоянии при перемещении указателя мыши? А не изменялся на crDefault.
Подскажите плиз. |
Сообщ.
#12
,
|
|
|
Цитата Star62 @ Я так и не понял, как мне сделать, чтобы курсор оставался в заданном состоянии при перемещении указателя мыши? А не изменялся на crDefault. Подскажите плиз. Все разобрался, сам тупил, все просто. Но тут вот еще одна проблемка появилась, можно ли мне создать свой вид курсора, встроить в проект его и использовать? |
Сообщ.
#13
,
|
|
|
Свой курсор нарисовать можно, конечно, я не помню - чем, но для этого какие-то штатные есть средства (не дельфийские), затем его включить в систему и установить на чарте не программным кодом, а путем выбора в инспекторе.Я, впрочем, сам не пробовал, а просто взял обычный "крестик". Кто-нибудь это делал.
Насчет еще xy и bxy и связанные с этим дела - в рабочей программе, конечно, все эти определения выноси за тело процедуры - его незачем каждый раз определять. |
Сообщ.
#14
,
|
|
|
Цитата parle @ Свой курсор нарисовать можно, конечно, я не помню - чем, но для этого какие-то штатные есть средства (не дельфийские), затем его включить в систему и установить на чарте не программным кодом, а путем выбора в инспекторе.Я, впрочем, сам не пробовал, а просто взял обычный "крестик". Кто-нибудь это делал. Так вот у меня проблема, если обычный крестик, тогда он у меня получается белым, когда курсор не перемещаешь, т.е когда линии проходят точно по нему, а когда двигаешь мышку и линии не успевают за курсором, тогда он черный как и положено. Вот я и решил сделать другой курсор, просто тотже, но линии у него толще сделать, тогда он получиться в точности как у меня на примере (картинке) в первом сообщении. А курсор можно сделать в BorlandImageEditor у меня ставиться вместе с Delphi7. Только я не знаю как его включить в систему, подскажите плиз. Цитата parle @ Насчет еще xy и bxy и связанные с этим дела - в рабочей программе, конечно, все эти определения выноси за тело процедуры - его незачем каждый раз определять. Я очень извиняюсь, т.к. у меня нет help по TChart и я могу только догадываться о назначении Chart1.ChartRect; и Chart1.boundsrect; по названиям, можно ли мне подсказать что они делают или ссылки на источники. Я так по прикидкам своим представляю что вычисление xy и bxy надо повесить на OnResize? Правильно или нет? |