前後を省略しますが、
begin
xaxis:=20;
yaxis:=50;
Chart1.Canvas.TriangleWithZ( Point(xaxis,yaxis), Point(xaxis-15,yaxis), Point(xaxis,yaxis+15) ,10);
Chart1.Canvas.MoveTo(xaxis-10, yaxis);
Chart1.Canvas.LineTo(xaxis, yaxis+10);
Chart1.Canvas.MoveTo(xaxis-5,yaxis);
Chart1.Canvas.LineTo(xaxis, yaxis+5);
end;
のChartに図形を表示させるプログラムを書いたのですが、
イベントのFormActivateやFormCreateで実行させると
うまくいかないのですが
ほかのイベントで実行させるとうまくいきます。。
いろいろ試してみたのですが、わかりません。。
ご教授お願いします。。
Halbow です。
> イベントのFormActivateやFormCreateで実行させると
> うまくいかないのですが
> ほかのイベントで実行させるとうまくいきます。。
うまくいったときでも、フォームを最小化させて、また元に戻したとき
描画が消えてしまいませんか?
Windows では、何かを描く必要が生じたとき、たとえば Label1 の
テキストやボタンの外見などですが、「描いてください」という
メッセージが飛んできます。このタイミングに同期して描画を行わない
と、再描画が起こったとき消えてしまいます。TChart に限らず、
TForm や TPaintBox の Canvas に ButtonClick で描いても、上に
別のウィンドウが乗っかったり、最小化から復帰すると再描画のメッセ
ージが飛んできて、せっかく描いた図形が消えてしまいます。
OnCreate や OnActivate は、この再描画のタイミングである OnPaint
より前に起こるイベントですから、何を描いても上書きされてしまいます。
永続的な描画を実現するなら、再描画のタイミングで描画コードを実行
しなければなりません。通常は、OnPaint イベントハンドラですが、
TChart の場合は、D5のヘルプによると OnAfterDraw イベントに
上記のコードを書けば良いと思います。
ありがとうございます。。
大変参考になりました。。
ツイート | ![]() |