こんばんは。また、よろしくお願いします。
XE2、64bitで使ってます。
下記のようなプログラムで、棒グラフを最終日を変えて、連続表示させています。
左右の矢印を押しっぱなしにすると、棒グラフが左右に移動して、毎日の売り上げの変化を見ることができます。
ところが、LaVieでは、グラフは動かずに日付を示すNCの値だけが変化します。押すのをやめるとNCが示す日までのグラフを表示します。
Vaioでは、グラフと日付が変化して、売り上げの変化を見れます。
今までのバージョンでも経験はあるのですが、あまり考えずにいました。
なぜこのような違いが出るのでしょうか。
解決方法がわかれば、教えてください。
applicationは試してみましたが、効果ありません。
s:=edit1.text;
if (key=VK_Left) and (S='') then
begin
NC:=NC-1;
if NC<=130 then NC:=130;
MG:=''; Disp(sina,NC);
end;
if (key=VK_Right) and (S='') then
begin
NC:=NC+1;
if NC>MC then NC:=MC;
MG:=''; Disp(sina,NC);
// application.processMessages;
end;
そのifの中でそれぞれ Key に 0を代入して返すようにしても
挙動は変わりますか?
提示されたコードをどのオブジェクトの何のイベントで実行しているのかとか、Disp()が何をしているのかわからないので、あくまで一般論ですが……
描画というのは比較的時間のかかる処理なので、普通は何か変化のあるたびにいちいち再描画することはしません。
変化があったことだけ覚えておき、他に何も処理するイベントがない時にまとめて描画を行います。
(と言っても、コンピュータからすると人間の動作はノロノロで隙間だらけなので、通常はすぐに画面が変わるように見えます)
ただし「ここはすぐに画面を更新してほしい」という時には、Updateメソッドを呼んで強制的に再描画させることができます。
2つの環境で動きに差があるとしたら、考えられるのは変化のたびに「強制的に再描画」をしているかどうかの違いか、
でなければキーリピートの間にグラフまで再描画を行う余裕があるかどうかの違いだと思います。
ありがとうございました。
強制描画で解決しました。
ツイート | ![]() |