Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Gráficos (https://www.clubdelphi.com/foros/forumdisplay.php?f=8)
-   -   Mostrar Hint de una serie con clic del Mouse sobre un Tchart (https://www.clubdelphi.com/foros/showthread.php?t=69561)

jalexc 25-08-2010 20:17:17

Mostrar Hint de una serie con clic del Mouse sobre un Tchart
 
De ante mano muchas gracias por cualquier colaboración que me puedan brindar.

Estoy diseñando un gráfico con un Tchart , pero me gustaría adicionarle un pequeño detalle, que la hacer clic encima de un área del gráfico(porción de la serie) pueda mostrar una breve descripción de ésta con la propiedad hint.

Gracias :)

cloayza 25-08-2010 22:22:01

Si te fijas cada serie que agregas al grafico posee eventos...

Por ejmplo, si agregas un TFastLineSeries, este posee varios eventos y uno que te serviria para lo que deseas es OnClick...que tiene esta forma:

Código Delphi [-]
{Un Click en la serie...}
procedure TForm1.Series3Click(Sender: TChartSeries; ValueIndex: Integer;
  Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
begin
....
end;

{Doble Click en la serie...}
procedure TForm1.Series3DblClick(Sender: TChartSeries; ValueIndex: Integer;
  Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
begin
....
end;

Lo demas es investigar y probar...Saludos

jalexc 25-08-2010 22:40:08

Mostrar Hint de una serie con clic del Mouse sobre un Tchart
 
Hola cloayza, gracias por la pronta respuesta..
haber te explico mejor, lo de los eventos ps lo tengo claro..para ser mas exacto mira este codigo de otro post con el cual me base en parte..
"lo hizo Angel Fernández hace un tiempo en su tema Tchart y cálculo de valores en coordenadas del ratón (mouse)"

Código Delphi [-]
 for i:=0 to dbChart1.SeriesList.Count do
  if dbChart1.Series[i].Clicked(x,y)<>-1 then
  begin
    txt:='Sensor '+dbChart1.SeriesList.Series[i].Title;
    Break;
  end;

  dbchart1.Hint:=txt;
  Application.HintPause:=1; //para que muestre enseguida el hint
  dbchart1.ShowHint:=True;
  Application.ActivateHint(Mouse.CursorPos); //muestra el hint



lo que sucede es que en ésa solucion muestra la implementacion del hint..pero solo me muestra un solo mensaje general, el de la variable txt como puedes apreciar..pero no me carga el titulo que pertenece a cada serie..y ps mas que todo eso es lo q necesito..que al darle clic a cada area pintada del grafico me muestre el hint, pero no se como es..si es dimensionar el tchart por areas y si es asi podrias explicarme o darme una idea de como seria?.

Gracias de antemano

cloayza 25-08-2010 23:24:22

Probe tu codigo y al parecer funciona bien.

Lo unico que podria ser es que la propiedad Title no se le haya asignado un valor...


Verifica el contenido de la propiedad Title de cada serie.

Saludos

cloayza 25-08-2010 23:32:37

Me tome la libertad de hacer este codigo incorporando el tuyo...

Este muestra el hint cuando te mueves sobre el grafico...

TChartClickedPart contiene informacion sobre que parte del grafico esta el mouse...

Saludos

Código Delphi [-]
procedure TForm1.Chart1MouseMove(Sender: TObject; Shift: TShiftState; X,
  Y: Integer);
var
     pt:TPoint;
     part:TChartClickedPart;
     i:Integer;
     txt:string;
begin
     pt.x:=X; pt.y:=Y;

     {Obtiene informacion sobre el punto del grafico donde esta el mouse...}
     Chart1.CalcClickedPart(pt,Part);

     memo1.lines.clear;

     chart1.ShowHint:=False;

     {Determina en que parte del grafico esta el mouse...}
     case (Part.Part) of
          cpNone  :memo1.lines.add('cpNone');
          cpLegend:memo1.lines.add('cpLegend');
          cpAxis  :begin
                        memo1.lines.add('cpAxis');
                        memo1.lines.add('Axis.Title:'+part.AAxis.Title.Caption);
                   end;
          cpSeries:begin
                         {Si esta sobre una serie...}
                         memo1.lines.add('cpSeries');
                         memo1.lines.add( Part.ASeries.Title);

                         memo1.lines.add( part.ASeries.XLabelsSource);
                         {TU CODIGO con unos pequenisimos cambios....}
                        for i:=0 to Part.ASeries.Count do
                         if Part.ASeries.Clicked(X,Y)<>-1 then
                         begin
                              txt:='Sensor '+Part.ASeries.Title;
                              Break;
                         end;
                         
                         chart1.Hint:=txt;
                         Application.HintPause:=1;
                         chart1.ShowHint:=True;
                         Application.ActivateHint(Mouse.CursorPos);
                         {FINAL DE TU CODIGO...}
          end;
          cpTitle :memo1.lines.add('cpTitle');
          cpFoot  :memo1.lines.add('cpFoot');
          cpChartRect:memo1.lines.add('cpChartRect');
     end;

end;

Espero te ayude...
Saludos

jalexc 26-08-2010 23:19:54

Mostrar Hint de una serie con clic del Mouse sobre un Tchart
 
Hola cloayza, muchas gracias eso fue mas que perfecto quedo muy agradecido... :D

Saludos


La franja horaria es GMT +2. Ahora son las 12:21:43.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi