早速ですが質問です。
今、フォーム上の画像の上にもう一つ画像を重ねて、timerを使って段々下にずらし、徐々に下の画像が現れてくる、というようなものを作ってるんですが、再描画するときにちらちらし、下の画像がうっすらと見えてしまうのです。なにか、いい方法はありませんか?
メモリ内のキャンバスに描いて、それを必要なぶんだけコピーすればいいです。
VBにはメモリ内のキャンバスとして、stdPictureというオブジェクトがあるので、それと、
あとはそれを画面に移す処理が必要です。
"画面に移す"のでは、BitBltというAPIがありますけど、
stdPictureとBitBltとの相性は悪くて、使うぶんに問題はないものの、ともに使うのはすごく手間がかかります。
APIでメモリのキャンバスを作ると、もっと面倒なのでお勧めできません^^;
なので、素直にVBにある、PaintPictureというメソッドを使います。
使いかたはヘルプ参照です。
これで、あらかじめstdPictureに描いた絵を、必要な大きさだけコピー(Refreshメソッドを使わないと再描画されないので、お忘れなく)、
次にいったん画面をクリアして、また必要な大きさをコピー
これを繰り返せばそうそうちらつくことはないはずです。
それでもちらつくようならば、LockWindowUpdateというAPIがあるので、
それを使って一時的に描画をストップさせます。
書き終わったらLockWindowUpdateAPIに0を送って描画をできる状態にしてみてください。
余談ですけど、IEで使えるとかの、画像のトランジションやワイプ効果も、
これを使って実現できます(計算方法はややこしそうですけど)。
どうもありがとうございました。
早速試してみようと思います。
ツイート | ![]() |