На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
! ПРАВИЛА РАЗДЕЛА · FAQ раздела Delphi · Книги по Delphi
Пожалуйста, выделяйте текст программы тегом [сode=pas] ... [/сode]. Для этого используйте кнопку [code=pas] в форме ответа или комбобокс, если нужно вставить код на языке, отличном от Дельфи/Паскаля.
Следующие вопросы задаются очень часто, подробно разобраны в FAQ и, поэтому, будут безжалостно удаляться:
1. Преобразовать переменную типа String в тип PChar (PAnsiChar)
2. Как "свернуть" программу в трей.
3. Как "скрыться" от Ctrl + Alt + Del (заблокировать их и т.п.)
4. Как прочитать список файлов, поддиректорий в директории?
5. Как запустить программу/файл?
... (продолжение следует) ...

Вопросы, подробно описанные во встроенной справочной системе Delphi, не несут полезной тематической нагрузки, поэтому будут удаляться.
Запрещается создавать темы с просьбой выполнить какую-то работу за автора темы. Форум является средством общения и общего поиска решения. Вашу работу за Вас никто выполнять не будет.


Внимание
Попытки открытия обсуждений реализации вредоносного ПО, включая различные интерпретации спам-ботов, наказывается предупреждением на 30 дней.
Повторная попытка - 60 дней. Последующие попытки бан.
Мат в разделе - бан на три месяца...
Модераторы: jack128, D[u]fa, Shaggy, Rouse_
  
> TChart , Как сделать вот такую штуку?
    Скажите пожалуйста можно ли в TChart сделать такой курсор его стандартными методами? Нужно чтобы при нажатии скрола появлялся курсор ввиде креста и от него отходили лучи которые доходили до осей и с месте их пересечения позывалось значение по конкретной оси.
    Конкретно пока не получается даже сделать постоянным вид курсора, при нажатии он становиться ввиде креста, стоит только шевельнуть мышкой как он тут же становиться по дефолту.
    Для лучей думаю использовать Tools Color Line, но вот пока не знаю как там отображать значение по оси в точке пересечения.
    Помогите советом плиз...
    Пример желаемого состояния на рисунке.
    Заранее большое спасибо.
    Прикреплённый файлПрикреплённый файлCursor.JPG (32.71 Кбайт, скачиваний: 589)
      Цитата Star62 @
      Скажите пожалуйста можно ли в TChart сделать такой курсор его стандартными методами?
      Нет.
        Цитата Testudo @
        Нет.

        Почему сразу нет, мне например, пришлось делать что-то подобное. Сначала просто рисовал на Canvas, но на печать он это не выводил, пришлось кое-как извратиться и сделать.
          Да можно все.

          ExpandedWrap disabled
            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 на ту картинку, которая нравится.
          Сообщение отредактировано: parle -
            В том варианте ,что идет в поставке Дельфи - надо прорисовывать самому. В версии TChart Professional есть и это и многое другое.
              Цитата WildBear @
              В том варианте ,что идет в поставке Дельфи - надо прорисовывать самому. В версии TChart Professional есть и это и многое другое.
              Он спрашивал про стандартные методы. Стандартно такой функции нет. В TChart Professional - есть, ручками сделать можно.
                Цитата parle @
                Да можно все.

                ExpandedWrap disabled
                  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, по нажатию на среднюю кнопку мыши.
                  Цитата Star62 @
                  А где лежит TRect
                  uses Types

                  Цитата Star62 @
                  А подскажите, как сделать чтобы при перемещении мыши курсор не менялся на Defaul, после того как я его поменял на crCross, по нажатию на среднюю кнопку мыши.
                  Покажи как меняешь курсор.

                  Цитата Star62 @
                  И еще вопросик, а зачем переменная dy, она даже не описана как переменная.
                  И как переменная описана, и используется.
                    Цитата Testudo @
                    Покажи как меняешь курсор.

                    ExpandedWrap disabled
                      procedure TMDIChildStatisticalParameters.ChartFunctionAvtokorellMouseUp(
                        Sender: TObject; Button: TMouseButton; Shift: TShiftState; X,
                        Y: Integer);
                      begin
                        if Button = mbMiddle then ChartFunctionAvtokorell.Cursor:=crCross;
                      end;
                    Как правильно не знаю, думал так, но он возвращается в Default при движении мышки.
                    Цитата Testudo @
                    И как переменная описана, и используется.

                    Сори, мой косяк, проглядел, невнимательность.
                      По-моему в старших версиях TChart (например, для Delphi 2006) это штатно. А может только в Professional. Видел где-то в демках.
                        Я так и не понял, как мне сделать, чтобы курсор оставался в заданном состоянии при перемещении указателя мыши? А не изменялся на crDefault.
                        Подскажите плиз.
                          Цитата Star62 @
                          Я так и не понял, как мне сделать, чтобы курсор оставался в заданном состоянии при перемещении указателя мыши? А не изменялся на crDefault.
                          Подскажите плиз.

                          Все разобрался, сам тупил, все просто. :)
                          Но тут вот еще одна проблемка появилась, можно ли мне создать свой вид курсора, встроить в проект его и использовать?
                            Свой курсор нарисовать можно, конечно, я не помню - чем, но для этого какие-то штатные есть средства (не дельфийские), затем его включить в систему и установить на чарте не программным кодом, а путем выбора в инспекторе.Я, впрочем, сам не пробовал, а просто взял обычный "крестик". Кто-нибудь это делал.
                            Насчет еще xy и bxy и связанные с этим дела - в рабочей программе, конечно, все эти определения выноси за тело процедуры - его незачем каждый раз определять.
                              Цитата parle @
                              Свой курсор нарисовать можно, конечно, я не помню - чем, но для этого какие-то штатные есть средства (не дельфийские), затем его включить в систему и установить на чарте не программным кодом, а путем выбора в инспекторе.Я, впрочем, сам не пробовал, а просто взял обычный "крестик". Кто-нибудь это делал.

                              Так вот у меня проблема, если обычный крестик, тогда он у меня получается белым, когда курсор не перемещаешь, т.е когда линии проходят точно по нему, а когда двигаешь мышку и линии не успевают за курсором, тогда он черный как и положено.
                              Вот я и решил сделать другой курсор, просто тотже, но линии у него толще сделать, тогда он получиться в точности как у меня на примере (картинке) в первом сообщении.
                              А курсор можно сделать в BorlandImageEditor у меня ставиться вместе с Delphi7.
                              Только я не знаю как его включить в систему, подскажите плиз.
                              Цитата parle @
                              Насчет еще xy и bxy и связанные с этим дела - в рабочей программе, конечно, все эти определения выноси за тело процедуры - его незачем каждый раз определять.

                              Я очень извиняюсь, т.к. у меня нет help по TChart и я могу только догадываться о назначении Chart1.ChartRect; и Chart1.boundsrect; по названиям, можно ли мне подсказать что они делают или ссылки на источники.
                              Я так по прикидкам своим представляю что вычисление xy и bxy надо повесить на OnResize? Правильно или нет?
                              Сообщение отредактировано: Star62 -
                              1 пользователей читают эту тему (1 гостей и 0 скрытых пользователей)
                              0 пользователей:


                              Рейтинг@Mail.ru
                              [ Script execution time: 0,0639 ]   [ 15 queries used ]   [ Generated: 26.05.24, 08:47 GMT ]