Ir para conteúdo
Fórum Script Brasil
  • 0

Tchart


Guest Fernando R. Piccini

Pergunta

Guest Fernando R. Piccini

Ola Pessoal,

Gostaria de saber como posso pegar o valor do "eixo X" de um TChart quando clico com o mouse em uma determinada area do gráfico.

Ex: Tenho um grafico onde os intervalos são valores inteiros de 2 em dois: 0..2..4..6..8..10...

Suponha-se que clico com o mouse no gráfico entre os valores 4 e 6, +/- "na posição 5" gostaria que me retornasse "5"...

Verifiquei alguns métodos/functions, por exemplo: CalcXPos, GetHorizAxismas mas não tive muito sucesso...

Se alguém puder me ajudar ficaria grato

vlw

Link para o comentário
Compartilhar em outros sites

2 respostass a esta questão

Posts Recomendados

  • 0
Ola Pessoal,

Gostaria de saber como posso pegar o valor do "eixo X" de um TChart quando clico com o mouse em uma determinada area do gráfico.

Ex: Tenho um grafico onde os intervalos são valores inteiros de 2 em dois: 0..2..4..6..8..10...

Suponha-se que clico com o mouse no gráfico entre os valores 4 e 6, +/- "na posição 5" gostaria que me retornasse "5"...

Verifiquei alguns métodos/functions, por exemplo: CalcXPos, GetHorizAxismas mas não tive muito sucesso...

Se alguém puder me ajudar ficaria grato

vlw

Fernando, demorou um pouquinho, mas não estava fácil de encontrar uma pista - achei apenas hoje (fonte).

O exemplo proposto mostra, em um label (poderia ser um hint), os valores no eixo X e Y quando o mouse é clicado dentro da área de fundo (painel delimitado pelos eixos - cpChartRect) do gráfico, sendo que pelo teste da Part a que representa a posição clicada, ocorre que não há obtenção do valor quando o mouse é clicado sobre a barra (quando for deste tipo). Para gráfico de linhas isso não se repetiu:

procedure TForm1.Chart1ClickBackground(Sender: TCustomChart; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
var
  XValue,
  YValue :Double;
  ChartClickedPart :TChartClickedPart;
begin
  Sender.CalcClickedPart(Point(X, Y), ChartClickedPart);
  if ChartClickedPart.Part = cpChartRect then
  begin
    XValue := Sender.BottomAxis.CalcPosPoint(X);
    YValue := Sender.LeftAxis.CalcPosPoint(Y);
    Label1.Caption := Format('X:%f, Y:%f', [XValue, YValue]);
  end else
    Label1.Caption := '';
end;
Uma variação, fazendo testes mais "demorados", possibilita a leitura de valores em qualquer posicionamento dentro dos limites do painel de fundo:
procedure TForm1.Chart1ClickBackground(Sender: TCustomChart; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
var
  XValue,
  YValue :Double;
begin
  XValue := (Sender as TCustomChart).BottomAxis.CalcPosPoint(X);
  YValue := (Sender as TCustomChart).LeftAxis.CalcPosPoint(Y);
  if ((XValue > (Sender as TCustomChart).BottomAxis.Minimum) and
      (XValue < (Sender as TCustomChart).BottomAxis.Maximum)) and
     ((YValue > (Sender as TCustomChart).LeftAxis.Minimum) and
      (YValue < (Sender as TCustomChart).LeftAxis.Maximum)) then
    Label1.Caption := Format('X:%f, Y:%f', [XValue, YValue])
  else
    Label1.Caption := '';
end;

Estes procedimentos também podem ser utilizados no evento OnMouseMove - testei e fica muito bom.

Abraços

Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,3k
    • Posts
      652,4k
×
×
  • Criar Novo...