AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

TChart werte anzeigen

Ein Thema von renekr · begonnen am 19. Sep 2005 · letzter Beitrag vom 21. Jun 2007
Antwort Antwort
Seite 1 von 2  1 2      
renekr

Registriert seit: 27. Feb 2005
Ort: Karlsbad
534 Beiträge
 
Delphi 2007 Enterprise
 
#1

TChart werte anzeigen

  Alt 19. Sep 2005, 06:32
Hi,
Kann mir jemand sagen wie ich bei dem TChart bei onclick oder ev auch wenn man nur mit der Maus über den Wert geht ,den Wert ev im Hint anzeigen zu lassen.

Danke.
  Mit Zitat antworten Zitat
Benutzerbild von BrunoT
BrunoT

Registriert seit: 23. Jan 2003
Ort: Sandbeiendorf
360 Beiträge
 
Delphi 8 Professional
 
#2

Re: TChart werte anzeigen

  Alt 19. Sep 2005, 08:11
Hallo René,

ich weiss zwar nicht, welche Tchart-Version du hast, aber es sollte so gehn:

Delphi-Quellcode:
procedure TForm1.Chart1MouseMove(Sender: TObject; Shift: TShiftState;
  X, Y: Integer);
  Var
  i:Integer;
begin
  chart1.ShowHint:=True;
  For i:=0 To Chart1.SeriesCount-1 do
  If Chart1.Series[i].GetCursorValueIndex >0 Then
 Chart1.Hint:=(Chart1.Series[i].ValueMarkText[Chart1.Series[i].GetCursorValueIndex]);
end;
mfg

BrunoT
Holger

EDV- Ende der Vernunft
Meine Calcedit-Kompo
  Mit Zitat antworten Zitat
renekr

Registriert seit: 27. Feb 2005
Ort: Karlsbad
534 Beiträge
 
Delphi 2007 Enterprise
 
#3

Re: TChart werte anzeigen

  Alt 19. Sep 2005, 09:19
Hi,
Danke für die rasche Antwort.
Also ich benutze den normalen Chart in der Delphi 2005 Version.

Ich befülle ihn mit 3 Serien ( Punkt Serien ).

Ich will wenn man den Chart Move ( click benötige ich ja für den Zoom ) ( einen wert,egal welche Serie( also alle 3 )) das er dann im Hint anzeigt den Seriennamen,Y Value,X Spaltenbeschriftung.

HAbe das von dir probiert ,aber er bringt immer fehler Listenindex überschreitet maximun -1. oder halt keinen wert.
  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#4

Re: TChart werte anzeigen

  Alt 19. Sep 2005, 10:33
Hallo René,

ich würde es ungefähr so machen:

Delphi-Quellcode:
interface
...
type
  TMainForm = class(TForm)
    TheChart: TChart;
    ActionButton: TButton;
    procedure FormCreate(Sender: TObject);
  private
    procedure ActionButtonClick(Sender: TObject);
    procedure AppShowHint(var HintStr: string; var CanShow: boolean; var HintInfo: THintInfo);
  end;

var
  MainForm: TMainForm;

implementation

{$R *.dfm}

procedure TMainForm.ActionButtonClick(Sender: TObject);
var
  bs: TBarSeries;
  i: integer;
begin
  bs := TBarSeries.Create(myChart);
  TheChart.AddSeries(bs);
  with bs do begin
    Add(40, 'labelA', clRed);
    Add(50, 'labelB', clGreen);
    Add(70, 'labelC', clBlue);
    Add(30, 'labelD', clYellow);
  end;
  with bs do
    for i := 0 to Count - 1 do
      XLabel[i] := IntToStr(i * 100);
end;

procedure TMainForm.FormCreate(Sender: TObject);
begin
  Application.OnShowHint := AppShowHint;
end;

procedure TMainForm.AppShowHint(var HintStr: string; var CanShow: boolean;
  var HintInfo: THintInfo);
var
  part: TChartClickedPart;
  index: integer;
  c: TChart;
  cs: TChartSeries;
begin
  if (hintinfo.HintControl is TChart) then
  begin
    c := TChart(HintInfo.HintControl);
    c.CalcClickedPart(HintInfo.CursorPos, part);
    if Assigned(part.ASeries) then begin
      cs := part.ASeries;
      index := cs.GetCursorValueIndex;
      if index >= 0 then
        HintStr := cs.YValueToText(cs.YValues[index]);
      HintInfo.ReshowTimeout := 50;
    end;
  end;
end;

end.
Grüße vom marabu

ValueMarkText() durch YValueToText() ersetzt
  Mit Zitat antworten Zitat
Benutzerbild von BrunoT
BrunoT

Registriert seit: 23. Jan 2003
Ort: Sandbeiendorf
360 Beiträge
 
Delphi 8 Professional
 
#5

Re: TChart werte anzeigen

  Alt 19. Sep 2005, 11:28
Hallo René,

Das mit dem Listenindex liegt an Deinem anderen Code. Ich habe das noch einmal unter D2005 getestet und noch mal abgeändert, da das falsche angezeigt wurde.

Delphi-Quellcode:
procedure TForm1.Chart1MouseMove(Sender: TObject; Shift: TShiftState; X,
  Y: Integer);
  Var
  i:Integer;
begin
  chart1.ShowHint:=True;
  For i:=0 To Chart1.SeriesCount-1 do
  If Chart1.Series[i].GetCursorValueIndex >=0 Then
    Chart1.Hint:=Chart1.Series[i].YValueToText(Chart1.Series[i].YValues[Chart1.Series[i].GetCursorValueIndex])
  else
    Chart1.Hint:='';
end;

@marabu: warum verwendest du den Hint der Application? Bei ClickPart fällt ja die Schleife weg(kannte ich noch nicht)
Holger

EDV- Ende der Vernunft
Meine Calcedit-Kompo
  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#6

Re: TChart werte anzeigen

  Alt 19. Sep 2005, 11:47
Hallo Holger,

Zitat von BrunoT:
warum verwendest du den Hint der Application?
wenn du damit Application.ShowHint meinst, dann deshalb:

Delphi-Quellcode:
...
HintInfo.ReshowTimeout := 50;
...
Ich weiß momentan nicht, wie ich die Aktualisierung des Hint anders sicherstellen kann. Standardmäßig aktualisiert die VCL das hint window ja nur, wenn ich vorher mit der Maus die Komponente verlasse. Kennst du eine einfachere Methode?

marabu
  Mit Zitat antworten Zitat
Benutzerbild von BrunoT
BrunoT

Registriert seit: 23. Jan 2003
Ort: Sandbeiendorf
360 Beiträge
 
Delphi 8 Professional
 
#7

Re: TChart werte anzeigen

  Alt 19. Sep 2005, 12:28
@marabu,

1. die Frage war nicht so gemeint, dass ich Deine weisen (-Marabu-) Fähigkeiten in Frage gestellt habe.
2. nein, kenne ich nicht, da ich folgendes nicht wusste.
Zitat:
Standardmäßig aktualisiert die VCL das hint window ja nur, wenn ich vorher mit der Maus die Komponente verlasse.
Ich habe mich mit Hints noch gar nicht beschäftigt, da ich solche^^ Informationen eigentlich immer in der Statusbar anzeige. Da habe ich keine Verweildauer .

Aber: mein Quelltext geht auch! und aktualisiert sich!

mfg

BrunoT
Holger

EDV- Ende der Vernunft
Meine Calcedit-Kompo
  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#8

Re: TChart werte anzeigen

  Alt 19. Sep 2005, 12:59
Holger, ich bin erst durch deinen Code auf die Idee gekommen nach einer Lösung zu forschen. Natürlich funktioniert dein Ansatz über das Ereignis OnMouseMove(). Mir fiel nur auf, dass dabei (der value mit dem index 0 unterschlagen und) das hint window nicht aktualisiert wurde. Zum Testen habe ich ein Balken Diagramm verwendet. Wenn ich die Maus von einem zum nächsten Balken führe ohne die Komponente zu verlassen, dann wird nur der zuerst von der Maus erfasste Value im hint window angezeigt. Wenn das bei dir wirklich anders ist, dann suche ich mir schonmal einen Besen zum fressen...

marabu
  Mit Zitat antworten Zitat
renekr

Registriert seit: 27. Feb 2005
Ort: Karlsbad
534 Beiträge
 
Delphi 2007 Enterprise
 
#9

Re: TChart werte anzeigen

  Alt 19. Sep 2005, 13:02
Hi @,
erstmal Danke schön das Ihr so schnell Antwortet.

HAbe das von marabu getestet und folgendes festgestellt:

Ich habe wie gesagt 3 Serien :
Y Value 50-150 ca.
X gebe ich keine Value mit,sondern setze nur den Text mit 2005 KW : 41 zb.:

Wenn ich auf 1 Serie gehe kommt der Wert im Hint bei den anderen 2 die X Beschriftung .

MAch i da was falsch?

Danke.
  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#10

Re: TChart werte anzeigen

  Alt 19. Sep 2005, 13:17
Hallo René,

ich habe, als ich bei Holger abgeschrieben habe, einen Fehler mit abgeschrieben (mich so reinzulegen - das merke ich mir). Ich habe die notwendige Änderung an meinem Code angebracht.

marabu
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 04:33 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz