- ベストアンサー
delphi 画面のちらつき
delphi6です imageに描画する時、ちらつきがでます。 doublebufferdを設定すると良いみたいなんですが、コードの記述のしかたがわかりません。 どなたかお救いを・・・
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
こんにちは。 失礼しました。TImage は TWinControl から派生したクラスではないので DoubleBuffered プロパティは使えませんね。 なるほど、やりたいことはよくわかりました。というか、私も同じようなことをやっています。 私は C++Builder を使用していますが、概念は一緒です。 まず、TScrollBox を配置し、その中に TImage と TPaintBox を配置します。TImage には画像を読み込んで表示し、その上に重なるように置いた TPaintBox で作図機能を実装します。マウスによる作図機能は、 TPaintBox の OnMouseDown, OnMouseMove 等のイベントで処理します。 で、実際に DoubleBuffered を設定するのは、TScrollBox のほうです。やりかたは、先の回答と同じで、ScrollBox1.DoubleBuffered := true です。 situmonnsya さんの Image2 に該当するのが TPaintBox となりますが、TPaintBox での描画内容は便宜 Bitmap や Jpeg 等に出力できるので、この方法で問題ないでしょう。あと、注意事項としては、TPaintBox の中身を FillRect 等で塗りつぶさないことです。確実にチラつきます(経験則です)。
その他の回答 (1)
- esperantisto
- ベストアンサー率39% (32/82)
こんにちは。 どのような描画をしようとしているのか、ちょっと気になりますが……。 単に DoubleBuffered を設定したいだけであれば、オブジェクト(コンポーネント)の DoubleBuffered プロパティに TRUE をセットするだけです。 FormCreate の中などで、 Image1.DoubleBuffered := true (だったと思います。↑の Pascal 文法が間違ってなければ…) とすれば良いと思います。
補足
ふたつのimage1とimage2が重なって配置されてます。 下のimage1に絵があって、上のimage2はTransparentをTrueにして透かしています。 image2にマウスが移動した分、線が描かれます。 CADのラバーライン(?)みたいな感じです。 imageのオブジェクトインスペクタにはDoubleBuffered プロパティはないんです。 でも、コードで記述して設定できるみたいなんです。(質問番号QNo.144887の回答より) >Image1.DoubleBuffered := true としても [エラー] Unit1.pas(73): 未定義の識別子 : 'DoubleBuffered' となります。 Image1.Canvas.DoubleBuffered := true としてもダメでした。
お礼
良回答でした。 お答えを参考にいろいろやってみました。 PaintBoxを使用する限りDoubleBufferedの設定はしなくてもちらつきはでないみたいです。 ありがとうございました。