Guest Fernando R. Piccini Postado Abril 2, 2007 Denunciar Share Postado Abril 2, 2007 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 gratovlw Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Micheus Postado Abril 12, 2007 Denunciar Share Postado Abril 12, 2007 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 gratovlwFernando, 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 Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Guest Fernando R. Piccini Postado Abril 12, 2007 Denunciar Share Postado Abril 12, 2007 Ola Micheus,Valeu pela ajuda ai :) Funcionou...ValeuBlumenau / Xanxerê - SC Citar Link para o comentário Compartilhar em outros sites More sharing options...
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
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.