TeeChartでグラフの縦横比を固定にして表示するには?

解決


HMMA  2008-08-04 21:48:44  No: 31478

こんにちは
TeeChartは座標を与えるだけで、適当な大きさでグラフを表示してくれ、マウスで表示の拡大まで出来てしまい大変便利ですが・・・フォームのサイズを変えたり、拡大すると縦横比が変わってしまいます。

ポイントや折れ線で、縦横比を変えないで(1:1)で表示、拡大しようとするときは、どのプロパティをどんなふうにすれば良いのでしょうか。

TeeChartはプロパティも多く、その分機能も多いのでしょう。付属のヘルプとデモを見てもわからず質問させていただきます。
また、入門者向けの解説ページがあったら紹介をお願いしたい。
よろしくお願いします。
環境:xp + delphi6 pro +付属TeeChart


3K  2008-08-05 20:28:59  No: 31479

1:1ならFormResizeに
Chart1.ClientHeight := Chart1.ClientWidth;
で良いのでは


HMMA  2008-08-06 01:05:08  No: 31480

3Kさん、早速の回答ありがとうございます。
Chart1Resizeで試してみたところ、フォーム全体のサイズを変えても縦横比が変わらなくなりました。
でも、Zoomの方はやはり変わらずです。
FormResizeにもOnZoomにも貼り付けてみたのですが、違うようです。
ほかに何かお気付きでしたら教えてください。


3K  2008-08-06 02:24:37  No: 31481

Zoomも1:1で行なうのは、ZoomRectを使用すれば出来そうでがちょっと厄介かも。
たとえば、X軸で50動かし、Y軸で10しか動かさなくても1:1にしなければならないので?
ほかにも...。


HMMA  2008-08-06 17:34:34  No: 31482

ヘルプにZoomRectメソッドがありました。
例 Chart1.ZoomRect( Rect( 5,5,Chart1.Width-5,Chart1.Height-5 ) );

MouseDownとMouseUpで座標を得て、XYの差を比べ大きいほうをRectに入れWidthとHeightにする・・・という様な事で出来そうな気がしてきました。

>ほかにも...。

すぐに実現できるだけの能力がありませんが、ヒントを頂ければ時間を掛けて試してみたいと思います
よろしくお願いします。


3K  2008-08-06 18:02:53  No: 31483

私もZoomRectを使用したことがありません。
これ以上の情報を与えるのには私自身も試行錯誤しないと出来ませんので
申し訳ないのですが、これ以上の情報は私からは出来ません。

>ほかにも...。
は、ZoomRectを使用するには、Zoom機能をOFFにしないと出来ないと思います。
とすると、標準のZoom機能のときに表示されていた枠(マウスをドラッグしていたときに)も
表示されなせんので自分で枠を表示させる事が必要になるかも知れません。
とすると、「X軸で50動かし、Y軸で10しか動かさなくても1:1にしなければならないので」で
枠はどう表現するの?って事が問題に?


HMMA  2008-08-06 20:46:41  No: 31484

もちろん、これでだけでは使い物に成りませんが、
MouseDownで Mx1:=x; My1:=y;
MouseUpで 
  Mx2:=x;My2:=y;
  mx2:=mx2-mx1;  my2:=my2-my1;
  ・・・何らかの比較調整をする・・・
  chart1.ZoomRect( Rect( Mx1,My1,Mx2,my2 ) );
・・・としたら、自前で拡大縮小ができる事がわかりました。

でも、3Kさんの仰るように、Zoom機能をOFFにしたら、ほかの機能も自分で自前で作らないといけない様で、私には難しいですね・・・(^^ゞ
どこかでZoom機能をONにしたりOFFにしたり、都合の良い方法を考えてみようと思います。


アキラメないで  2008-08-06 21:47:56  No: 31485

真琴:「ハルコさん、こんなんじゃダメ?」
春子:「ふ〜ん、これはドラッグした長方形のどっちの辺を優先するか決められるンだね」
真琴:「そぅ、それにZoomRectは使わないよ」
春子:「これでイケル気もするけど、このPC環境で試せないから落とし穴あるかもヨ」
真琴:「落とし穴?…でも、参考にはなるんじゃない?」
春子:「まぁネ、アキラメないでって、エールを送るコトにも」

type
  TPriorityCoord = (pcHorz, pcVert);
  TChart = class(Chart.TChart)
  private
    FPriorityCoord: TPriorityCoord;
    DownPosX, DownPosY: Integer;
    procedure WmLButtonDown(var Msg: TMessage); Message WM_LBUTTONDOWN;
    procedure WmLButtonUp(var Msg: TMessage); Message WM_LBUTTONUP;
  published
    property PriorityCoord: TPriorityCoord read FPriorityCoord write FPriorityCoord;
  end;

  TForm1 = class(TForm)
    Chart1: TChart;
    ......

procedure TChart.WmLButtonDown(var Msg: TMessage);
begin
  DownPosX := Msg.LParamLo;
  DownPosY := Msg.LParamHi;
  inherited;
end;

procedure TChart.WmLButtonUp(var Msg: TMessage);
begin
  if (Msg.LParamLo > DownPosX)and(Msg.LParamHi > DownPosY) then begin
   case FPriorityCoord of
    pcHorz: Msg.LParamHi := WORD((DownPosY + Msg.LParamLo - DownPosX) * ChartHeight div ChartWidth);
    pcVert: Msg.LParamLo := WORD((DownPosX + Msg.LParamHi - DownPosY) * ChartWidth div ChartHeight);
   end;
  end;
  inherited;
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
  Chart1.PriorityCoord := pcHorz; // pcVert;
  ........

真琴:「ね、話は変るんだけど、なんとかハヅキさんに来てもらう方法ないかなぁ」
春子:「ン? ナンのコト?」
真琴:「土曜の花火大会の夜のバーベキューに、ハヅキさんも是非って誘ったの、でも…」
春子:「あぁ〜そのコトね、それで、ハヅキさんに断られちゃったの?」
真琴:「そうなの、おじいちゃんも残念がって…、ねぇ、ナンでだろぅ、楽しいと思うのに」
春子:「ハヅキさんは心臓弱いンでしょ? 健康なヒトが大勢でワイワイ楽しンでるのを観るのはツライのかも」
真琴:「あ、そういうことなのかぁ…、じゃぁ、やっぱりアキラメるしかないネ」
春子:「そんな簡単にアキラメないで、別の日に内輪だけの静かなバーベキューなんて、どう?」
真琴:「あッそうだよね、アタシ、おじいちゃんに頼んでみる、お客様のいない日に」
春子:「マサルさんが作るバーベキュー料理は格別美味しいもんネ」
真琴:「うん、だから、ハヅキさんにも食べて欲しいの、ゼッタイ」
春子:「…でも、花火大会が過ぎると夏も終わるなぁって気がするネ、さびしいけど」
真琴:「え? まだ半分も残ってるじゃない、夏休みだって」
春子:「そぅ半分、だから花火大会は夏の折り返し点なの、終わりの始まりってワケ」
真琴:「そんなコト言わないでよ、ハルコさん、夏はまだまだ終わらないンだから」
春子:「終わらせたくない? なら、いっそ夏の始めに戻ってみれば? マコト」
真琴:「ハルコさん、アタシは自由にタイムトラベル出来ないって言ったじゃん」
春子:「そっか、じゃぁ、そのやり方教えてあげようか? マコト」
真琴:「もしかして、また冗談話ってコト? モウいいよ、ハルコさん^^;」


HMMA  2008-08-07 03:29:18  No: 31486

「アキラメないで」さん、ありがとうございます。
>「落とし穴?…でも、参考にはなるんじゃない?」
意味の理解には相当時間が掛かりそうですが、取り合えずコピペしただけで、全く問題なく思っていた事が出来ました。

便利な「TChart」なのに、解説が見当たらず困っていましたが、
3Kさん、真琴くんに春子さん、ありがとうございました。
感謝感激で解決です。


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加