TChartの縦棒グラフの軸の下にあるラベルの表記で、縦棒数が多くなると重
なるので、上と下等のようにずらして表示したいのですが、どのように行っ
たらよいか、わからずにいます。過去ログも確認したのですが、今一つわか
らずにいます。
どなたかご教授いただけないのでしょうか?
環境 Delphi7 TChart 4
OS WinXP
直接な回答ではありませんがお許しください。
視点を変えて、ラベルを回転させて表示させるのは如何でしょう?
procedure TForm1.Chart1ClickBackground(Sender: TCustomChart;
Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
var
BottomAxisPos: integer;
begin
//マウス左ボタンが押されたら
if Button = mbLeft then
begin
//ボトムのY座標を取得
BottomAxisPos := TChart(Sender).Series[0].CalcYPosValue(0);
//マウス押下時のY座標とボトムY座標を比較
if Y > BottomAxisPos then
//ボトムのラベルを180度回転
TChart(Sender).BottomAxis.LabelsAngle := (TChart(Sender).BottomAxis.LabelsAngle + 90) mod 180;
end;
end;
レスありがとうございます。
>直接な回答ではありませんがお許しください。
いえいえ、回答があるだけでありがたいです。
@っしーさんの処理を試してみました。
個々の縦棒のラベルが回転するならOKなのですが、
全体が回転してしまうので、結局は見えにくくなってしまいました・・・。
TChartのVerをあげれば解決するような気はするのですが、予算が無いので・・・。
他にも何か回避策がありましたら、どなたか教えていただけないでしょうか?
>> 縦棒数が多くなると重なるので
Tchartってラベルが重ならないように勝手に間引きしてラベルが表示されませんか?
また、仮に棒数が100本あって、たとえば10の倍数本目だけ表示っていうのであれば簡単に表示できますが
また、上記はダメでどうしてもTopに表示させたいのであればcanvasにTextOutで表示させるしかないかと思います、
>>> 縦棒数が多くなると重なるので
>Tchartってラベルが重ならないように勝手に間引きしてラベルが表示されま
>せんか?
縦棒それぞれのLabelのTitleを変えているので、できれば全て表示させたいのです。
>また、上記はダメでどうしてもTopに表示させたいのであればcanvasに
>TextOutで表示させるしかないかと思います、
3kさんの仰るとおりTextOutを使用して記述しようと思ったのですが、縦棒それぞれの左・下の位置というのは取得できるものなのでしょうか?
質問ばかりで申し訳ございません。これができれば、解決するのでよろしくお願いいたします。
>縦棒それぞれの左・下の位置というのは取得できるものなのでしょうか?
できますよ。
ヒントは、初めの回答にある”TChart(Sender).Series[0].CalcYPosValue(0)”です。
軸分割が増えてくると、2段にしてもラベルの重なりは避けられないと思いますが、、、
3Kさん、@っしーさん
返信が遅れてしまい申し訳ございませんでした。
GridとQReportをゴリゴリ力技で作らなければいけない作業が割り込んでしまい、
そちらに時間がかかってしまっていました。
お二人のヒントで完成することができました。
>軸分割が増えてくると、2段にしてもラベルの重なりは避けられないと思いますが、、、
そうですね、この部分はクライアントに納得してもらう予定です。
本当にありがとうございました。
ツイート | ![]() |