Info-bulles et Tchart

Résolu
Signaler
Messages postés
90
Date d'inscription
mardi 28 octobre 2003
Statut
Membre
Dernière intervention
24 avril 2008
-
Messages postés
814
Date d'inscription
vendredi 3 novembre 2000
Statut
Membre
Dernière intervention
30 juillet 2009
-
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

Messages postés
2527
Date d'inscription
jeudi 15 janvier 2004
Statut
Membre
Dernière intervention
16 octobre 2019
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;
Messages postés
4720
Date d'inscription
dimanche 26 février 2006
Statut
Modérateur
Dernière intervention
31 juillet 2021
14
Utilises l'évènement OnMouseMove du TeeChart

cantador
Messages postés
90
Date d'inscription
mardi 28 octobre 2003
Statut
Membre
Dernière intervention
24 avril 2008

pourrais-tu être plus explicite?

merci
Messages postés
4720
Date d'inscription
dimanche 26 février 2006
Statut
Modérateur
Dernière intervention
31 juillet 2021
14
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
Messages postés
90
Date d'inscription
mardi 28 octobre 2003
Statut
Membre
Dernière intervention
24 avril 2008

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
Messages postés
814
Date d'inscription
vendredi 3 novembre 2000
Statut
Membre
Dernière intervention
30 juillet 2009
3
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.
Messages postés
814
Date d'inscription
vendredi 3 novembre 2000
Statut
Membre
Dernière intervention
30 juillet 2009
3
PS: je suis pas certain que cela fonctionne pour n courbes. mais pour une, ça marche bien.
Messages postés
90
Date d'inscription
mardi 28 octobre 2003
Statut
Membre
Dernière intervention
24 avril 2008

je ne connais pas TcursorTool. C'est un composant fourni avec Delphi2005 ou Delphi2006?
Messages postés
4720
Date d'inscription
dimanche 26 février 2006
Statut
Modérateur
Dernière intervention
31 juillet 2021
14
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
Messages postés
814
Date d'inscription
vendredi 3 novembre 2000
Statut
Membre
Dernière intervention
30 juillet 2009
3
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.
Messages postés
2527
Date d'inscription
jeudi 15 janvier 2004
Statut
Membre
Dernière intervention
16 octobre 2019
18
... 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...
Messages postés
814
Date d'inscription
vendredi 3 novembre 2000
Statut
Membre
Dernière intervention
30 juillet 2009
3
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.