Info-bulles et Tchart

Résolu
furax13 Messages postés 90 Date d'inscription mardi 28 octobre 2003 Statut Membre Dernière intervention 24 avril 2008 - 16 oct. 2007 à 11:03
cs_Loda Messages postés 814 Date d'inscription vendredi 3 novembre 2000 Statut Membre Dernière intervention 30 juillet 2009 - 18 oct. 2007 à 08:58
bonjour,
j'utilise le composant TeeChart founri avec Delphi.
Je trace environ 16 courbes de couleurs différentes.

J'aimerai lorsque l'on passe la souris sur une courbe faire afficher une info-bulles(tooltip) relative à la courbe (afficher le nom de la courbe + un commentaire)

Les courbes sont des TFastLineSeries

Comment faire?

merci beaucoup

12 réponses

Caribensila Messages postés 2527 Date d'inscription jeudi 15 janvier 2004 Statut Membre Dernière intervention 16 octobre 2019 18
17 oct. 2007 à 15:18
Salut,

Un exemple:

function DesktopColor(const X, Y: Integer): TColor;
var
  c: TCanvas;
begin
  c := TCanvas.Create;
  try
    c.Handle := GetWindowDC(GetDesktopWindow);
    Result   := GetPixel(c.Handle, X, Y);
  finally  c.Free;  end;
end;





procedure TForm1.Chart1MouseMove(Sender: TObject; Shift: TShiftState; X,
  Y: Integer);
 var
    Pos: TPoint;
    Couleur:TColor;
 begin
 GetCursorPos(Pos);
 Couleur := DesktopColor(Pos.X, Pos.Y);



 case Couleur of
   clWhite   : begin
                Chart1.Hint := 'blanc';
                Chart1.ShowHint := true;
                end;
   clBlack  : begin
                Chart1.Hint := 'noir';
                Chart1.ShowHint := true;
                end;
  else Chart1.ShowHint := false;
 end;
end;
3
cs_cantador Messages postés 4720 Date d'inscription dimanche 26 février 2006 Statut Modérateur Dernière intervention 31 juillet 2021 13
16 oct. 2007 à 14:24
Utilises l'évènement OnMouseMove du TeeChart

cantador
0
furax13 Messages postés 90 Date d'inscription mardi 28 octobre 2003 Statut Membre Dernière intervention 24 avril 2008
16 oct. 2007 à 16:46
pourrais-tu être plus explicite?

merci
0
cs_cantador Messages postés 4720 Date d'inscription dimanche 26 février 2006 Statut Modérateur Dernière intervention 31 juillet 2021 13
16 oct. 2007 à 19:13
procedure TForm1.Chart1MouseMove(Sender: TObject; Shift: TShiftState; X,
  Y: Integer);
begin
// et là tu mets ce que tu veux..
// Application.MessageBox(.....);
// ex:
ShowMessage('Vous êtes passé sur mon graphique !");

end;

cantador
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
furax13 Messages postés 90 Date d'inscription mardi 28 octobre 2003 Statut Membre Dernière intervention 24 avril 2008
17 oct. 2007 à 08:37
ce n'est pas ce que je veux faire.
Dans l'objet TChart, je crée dynamiquement n TFastLineSeries.
Lorsque la souris passe sur une TFastLineSeries, je veux afficher sous forme d'info-bulles le nom de la courbe suivi d'un # et du contenu d'un fichier commentaire.

J'arrive à faire cela en cliquant sur la courbe puis en écrivant le code suivant :
PROCEDURE TForm1.Chart1ClickSeries(Sender: TCustomChart; Series: TChartSeries;
  ValueIndex: Integer; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
....
    Series.parentChart.Hint := Series.Title + ' # ' + stringgrid1.Cells[2, numCourbe];
    Series.parentChart.ShowHint := true;
  series.parentChart.refresh;
...

J'utilise alors la propriété hint du chart.

Meerci
0
cs_Loda Messages postés 814 Date d'inscription vendredi 3 novembre 2000 Statut Membre Dernière intervention 30 juillet 2009 3
17 oct. 2007 à 09:11
salut,

perso j'utilise un chart tool de type TCursorTool:

procedure TMaForm.ChartTool_HintCursorChange(Sender: TCursorTool; x, y: Integer;
  const XValue, YValue: Double; Series: TChartSeries; ValueIndex: Integer);
var
    tmpSt:String;

    Msg   : TMessage;
    tmp : Double;

begin

  if valueindex=-1 then
    ValueIndex:=Sender.NearestPoint(cssVertical,tmp);

  // underMouseHint :

  //prevent range error
  if not ( InRange(X,low(Smallint),High(smallint)) and
           InRange(y,low(Smallint),High(smallint)) ) then exit;

  // cree le text du hint
  tmpSt:= MonGetHint(Series,ValueIndex); // le text que tu veux.

  //ajout ici une condition pour afficher / masque le hint.
 
 if Chart1.Hint<>tmpSt then begin
    Chart1.Hint:=tmpSt;
    Application.CancelHint;
    TWMMouse(Msg).XPos := X;
    TWMMouse(Msg).YPos := Y;
    Application.HintMouseMessage(Chart1,msg);
  end;{if}

end;

tu peux aussi remplacer le .hint par un object avec du text ou un memo sous le graphique.

/!\ ce code rique d'être executer souvent! utilise des buffer pour les partie invariables.

bon code,

Loda
Se poser les bonnes questions est le premier pas pour trouver les bonnes réponses.
0
cs_Loda Messages postés 814 Date d'inscription vendredi 3 novembre 2000 Statut Membre Dernière intervention 30 juillet 2009 3
17 oct. 2007 à 09:14
PS: je suis pas certain que cela fonctionne pour n courbes. mais pour une, ça marche bien.
0
furax13 Messages postés 90 Date d'inscription mardi 28 octobre 2003 Statut Membre Dernière intervention 24 avril 2008
17 oct. 2007 à 09:54
je ne connais pas TcursorTool. C'est un composant fourni avec Delphi2005 ou Delphi2006?
0
cs_cantador Messages postés 4720 Date d'inscription dimanche 26 février 2006 Statut Modérateur Dernière intervention 31 juillet 2021 13
17 oct. 2007 à 12:07
Autre solution utiliser dans le OnMouseMove (car c'est bien sur le passage de la souris et non sur un clique que tu veux le déclenchement) les coordonnées de la souris (x, y).

Il faut pouvoir dire que x, y sont sur telle ou telle TchartSeries...

cantador
0
cs_Loda Messages postés 814 Date d'inscription vendredi 3 novembre 2000 Statut Membre Dernière intervention 30 juillet 2009 3
17 oct. 2007 à 13:47
re,

TCursorTool. c'est un compo de TChart. (onglet outils dans l'editeur de chart.)

il y a aussi TChartSeries.OnMouseEnter qui pourrait bien t'aider.

si jamais, dans le forum[EN] TChart:
http://www.teechart.net/support/search.php
tu peux trouver pas mal de solution a ce genre de problème.

Loda
Se poser les bonnes questions est le premier pas pour trouver les bonnes réponses.
0
Caribensila Messages postés 2527 Date d'inscription jeudi 15 janvier 2004 Statut Membre Dernière intervention 16 octobre 2019 18
17 oct. 2007 à 15:29
... Bien sûr, choisir des couleurs pour tes courbes qu'on ne retrouve pas ailleurs dans le TChart.

Tu peux régler le Hint avec Application.HintHidePause, Application.HintShortPause, etc...
0
cs_Loda Messages postés 814 Date d'inscription vendredi 3 novembre 2000 Statut Membre Dernière intervention 30 juillet 2009 3
18 oct. 2007 à 08:58
re,

ho! approche très intéressante. évidement, ça ne marche que si les courbes sont d'une seul couleur. Mais très intéressant quand même!

bon code,

Loda
Se poser les bonnes questions est le premier pas pour trouver les bonnes réponses.
0
Rejoignez-nous