• ベストアンサー

delphi 画面のちらつき

delphi6です imageに描画する時、ちらつきがでます。 doublebufferdを設定すると良いみたいなんですが、コードの記述のしかたがわかりません。 どなたかお救いを・・・

質問者が選んだベストアンサー

  • ベストアンサー
回答No.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 等で塗りつぶさないことです。確実にチラつきます(経験則です)。

situmonnsya
質問者

お礼

良回答でした。 お答えを参考にいろいろやってみました。 PaintBoxを使用する限りDoubleBufferedの設定はしなくてもちらつきはでないみたいです。 ありがとうございました。

その他の回答 (1)

回答No.1

こんにちは。 どのような描画をしようとしているのか、ちょっと気になりますが……。 単に DoubleBuffered を設定したいだけであれば、オブジェクト(コンポーネント)の DoubleBuffered プロパティに TRUE をセットするだけです。 FormCreate の中などで、 Image1.DoubleBuffered := true (だったと思います。↑の Pascal 文法が間違ってなければ…) とすれば良いと思います。

situmonnsya
質問者

補足

ふたつのimage1とimage2が重なって配置されてます。 下のimage1に絵があって、上のimage2はTransparentをTrueにして透かしています。 image2にマウスが移動した分、線が描かれます。 CADのラバーライン(?)みたいな感じです。 imageのオブジェクトインスペクタにはDoubleBuffered プロパティはないんです。 でも、コードで記述して設定できるみたいなんです。(質問番号QNo.144887の回答より) >Image1.DoubleBuffered := true としても [エラー] Unit1.pas(73): 未定義の識別子 : 'DoubleBuffered' となります。 Image1.Canvas.DoubleBuffered := true としてもダメでした。

関連するQ&A