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

Delphi Sources



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

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 18.12.2017, 22:31
Konstantin-78 Konstantin-78 вне форума
Новичок
 
Регистрация: 27.04.2015
Сообщения: 76
Версия Delphi: Delphi7
Репутация: 10
По умолчанию TChart не всегда отображает hint

Доброе время суток,

Есть TСhart (chDiagram) и у него 2 серии - sDayContribution и sDiffPower, при подводе мышки к точкам на TChart должен появляться hint.

Проблема в том что в следующем коде, hint появляется только для той серии, которая (в коде) указана последней (т.е. в конкретном случае для "sDiffPower")

Код:
procedure TFDiagram.chDiagramMouseMove(Sender: TObject; Shift: TShiftState;
  X, Y: Integer);
var
  SeriesIndexDiff, SeriesIndexContrib: Integer;
begin

  SeriesIndexContrib := sDayContribution.Clicked(X, Y);
  chDiagram.ShowHint := SeriesIndexContrib <> -1;
  if (chDiagram.ShowHint) then  
    chDiagram.Hint:= DateToStr(sDayContribution.XValue[SeriesIndexContrib]); 

  

  SeriesIndexDiff := sDiffPower.Clicked(X, Y);
  chDiagram.ShowHint := SeriesIndexDiff <> -1;
  if (chDiagram.ShowHint) then  
    chDiagram.Hint:= DateToStr(sDiffPower.XValue[SeriesIndexDiff]); 
 
end;

При "Step over", hint значения присваиваются (chDiagram.Hint), только hint не выводится.

Пушут, что понять на какой серии мышь находится можно строками
Код:
if sDayContribution.Clicked(X, Y) >= 0 then
и
Код:
if sDiffPower.Clicked(X, Y) >= 0 then
но как-то не очень помогает, то... да оно конечно различает серии, но тем неменее hint всеравно блокируется чем-то

Только помогает, если я создам приватную переменную и буду подставлять вместо "if sDayContribution.Clicked(X, Y) >= 0 then" и "if sDiffPower.Clicked(X, Y) >= 0 then"


Как быть?

Последний раз редактировалось Konstantin-78, 18.12.2017 в 23:05.
Ответить с цитированием
  #2  
Старый 19.12.2017, 02:04
Аватар для Alegun
Alegun Alegun вне форума
LMD-DML
 
Регистрация: 12.07.2009
Адрес: Богородское
Сообщения: 3,025
Версия Delphi: D7E
Репутация: 1834
По умолчанию

Цитата:
Сообщение от Konstantin-78
...Как быть?
Код:
procedure TForm1.chDiagramMouseMove(Sender: TObject; Shift: TShiftState; X,
  Y: Integer);
var
 i, b: integer;
begin
  with chDiagram do
   begin
    b:= -1;
    for i := 0 to SeriesCount-1 do
     if Series[i].Clicked(X, Y) <> -1 then
      begin
       b:= Series[i].Clicked(X, Y);
       Hint:= DateToStr(Series[i].XValue[b]);
      end;
    ShowHint:= b > -1;
   end;{with}
end;
Проверил, работает

Последний раз редактировалось Alegun, 19.12.2017 в 02:08.
Ответить с цитированием
Этот пользователь сказал Спасибо Alegun за это полезное сообщение:
Konstantin-78 (19.12.2017)
  #3  
Старый 19.12.2017, 02:28
Konstantin-78 Konstantin-78 вне форума
Новичок
 
Регистрация: 27.04.2015
Сообщения: 76
Версия Delphi: Delphi7
Репутация: 10
По умолчанию

А всеже почему в моем примере, в первом куске

Код:
SeriesIndexContrib := sDayContribution.Clicked(X, Y);
  chDiagram.ShowHint := SeriesIndexContrib <> -1;
  if (chDiagram.ShowHint) then 
    chDiagram.Hint:= DateToStr(sDayContribution.XValue[SeriesIndexContrib]); 

hint не выводился, он заполнялся (я при отладке видел), но не выводился?
Ответить с цитированием
  #4  
Старый 19.12.2017, 02:31
Аватар для Alegun
Alegun Alegun вне форума
LMD-DML
 
Регистрация: 12.07.2009
Адрес: Богородское
Сообщения: 3,025
Версия Delphi: D7E
Репутация: 1834
По умолчанию

Потому как свойство chDiagram.ShowHint было отключено вторым куском
Ответить с цитированием
  #5  
Старый 19.12.2017, 19:40
Konstantin-78 Konstantin-78 вне форума
Новичок
 
Регистрация: 27.04.2015
Сообщения: 76
Версия Delphi: Delphi7
Репутация: 10
По умолчанию

Цитата:
Сообщение от Alegun
Потому как свойство chDiagram.ShowHint было отключено вторым куском

Я бы с удовольствием в это поверил, еслиб перед тем как задавать на форуме вопрос, не проверил бы этот блок с "условием" .Clicked(X, Y) <> -1

Код:
procedure TFDiagram.chDiagramMouseMove(Sender: TObject; Shift: TShiftState; X,
  Y: Integer);
var
  SeriesIndexDiff, SeriesIndexContrib: Integer;
begin
  if sDayContribution.Clicked(X, Y) <> -1 then
  begin  
    SeriesIndexContrib := sDayContribution.Clicked(X, Y);
    chDiagram.ShowHint := SeriesIndexContrib <> -1;
    if (chDiagram.ShowHint) then 
      chDiagram.Hint:= DateToStr(sDayContribution.XValue[SeriesIndexContrib]); 
  end;
   
  if sDiffPower.Clicked(X, Y) <> -1 then
  begin  
    SeriesIndexDiff := sDiffPower.Clicked(X, Y);
    chDiagram.ShowHint := SeriesIndexDiff <> -1;
    if (chDiagram.ShowHint) then 
      chDiagram.Hint:= DateToStr(sDiffPower.XValue[SeriesIndexDiff]);
  end;
end;

в данном примере, всегда при наведении мышей на одну из линий на TChart, выполняется только один конкретный if.
Та он вообщем говоря криво работает, т.к. первый раз выводит hint нормально, а все последующие разы, если мышкой не выйти за границы TChart (т.е. мышку на форму не завести), то hint вообще перестает показываться. При этом при наведении мышкой опять на TChart, hint отображается как только мышка проходит границу TChart

Последний раз редактировалось Konstantin-78, 19.12.2017 в 19:57.
Ответить с цитированием
  #6  
Старый 19.12.2017, 20:05
Аватар для Alegun
Alegun Alegun вне форума
LMD-DML
 
Регистрация: 12.07.2009
Адрес: Богородское
Сообщения: 3,025
Версия Delphi: D7E
Репутация: 1834
По умолчанию

Проверок блоков в первом посте небыло, да всё ведь правильно, не хватает начальной инициализации переменных, в них всегда "положительный" мусор
Ответить с цитированием
Ответ


Delphi Sources

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

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

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

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


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


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

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

ВКонтакте   Facebook   Twitter