• ベストアンサー

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

  • delphi マウスカーソル

    delphi6 です。 イメージエディタで作ったマウスカーソルを実際に使用する為のコード記述を教えて下さい。

  • Delphi

    Delphi delphi初心者です。 ボタンを押すたびに、(0からはじめて)1ずつ足して、その値が空白(Edit1.Text)に 表示をしていくいくプログラムを作りたいのですが どうすればいいのでしょうか。 初期値の設定から、できるだけ簡単なコードを使って教えていただきたいです。 よろしくお願いします。

  • delphiのStringGridで特定のcellの色を変える

    delphiのStringGridで、指定したcellの色を変えることは出来るでしょうか? cells[5,5]だけ色が付いてる、みたいなイメージです。 初心者のためサンプルコードをご教示いただけると大変ありがたいです。

  • 【Delphi】 Canvasへの描画について疑問

    まず、Form1の上にimage1を配置し、その奥にTGraphicControlを継承した描画コンポーネントを置いています。 そして、image1のTransparentを設定し、描画が見えるようにします。 つまりimage1が窓枠で、ガラス(透過)越しに風景の描画が見えると考えてください。 そこで、描画コンポーネント側でTGraphicControl.Canvas.Drawで風景の描画を行います。すると、描画したものが窓枠より手前に表示されてしまい、窓枠&透過の意味が無くなってしまいました。 image1の下に普通のTimageを置き、Timage.Canvas.Drawで行うと、異常は起きません。何故なのでしょうか・・・?

  • Delphi6で3ペイン画面の作成方法

    Delphiで3ペインの画面を作成しようとしています、 次の場合の画面を作成することは可能なのですが、 画面イメージ ■■■■■■■■■■■■ ■___■______■ ■_1_4_2_____■ ■___■______■ ■■5■■■5■■■■■ ■__________■ ■___3______■ ■__________■ ■■■■■■■■■■■■ 1:TTreeView(Win32) Align : alLeft Anchors akLeft : True akTop : True akRight : False akBottom : True 2:TListView(Win32) Align : alClient Anchors akLeft : True akTop : True akRight : True akBottom : True 3:TMemo(Standard) Align : alBottom Anchors akLeft : True akTop : False akRight : True akBottom : True 4:TSplitter(Additional) Align : alLeft 5:TSplitter(Additional) Align : alBottom 次の画面を作成することが出来ません。 画面イメージ ■■■■■■■■■■■■ ■___■______■ ■___4_2_____■ ■___■______■ ■_1_■■5■■■■■ ■___■______■ ■___4_3_____■ ■___■______■ ■■■■■■■■■■■■ 1:TTreeView(Win32) 2:TListView(Win32) 3:TMemo(Standard) 4:TSplitter(Additional) 5:TSplitter(Additional) 各コンポーネントのプロパティの設定値へは何を設定すればよろしいのでしょうか? 長くてすいませんm(_ _)m 環境 Delphi: Delphi6 Personal (パッチはRTL アップデートパック #3まで全て適用済み)

  • 画面の再描画について

    VCのMDI(CFormView)での画面の拡大・縮小などをした時の再描画の仕方がわかりません。OnInitialUpdateに何かを記述するか、WM_PAINTを追加したりすればいいのですか?初心者なのでよろしくお願いします。

  • Delphi:実行形式ファイルのサイズ

    Delphiで、フォームにコントロールを貼り付けただけのプログラムをコンパイルし、 実行形式ファイルを作成しましたら、約500KBになりました。 あまりにも大きいので、小さくならないものかとネット上を探しましたら、 URL : http://f29.aaa.livedoor.jp/~morg/wiki/index.php?Delphi >環境設定 >ファイルサイズを小さくするには > >Delphiの実行ファイルは通常かなりサイズが大きいですが、 >小さくすることができます。 >「ライブラリの参照」から、 動作させる環境で必要のないものだけを除きます。 >(除いた後の動作確認を忘れずに) >そして、プロジェクトオプションの、「実行時のパッケージで再構築」の、 >部分に、必要なものだけを記述して再構築します。 というものがありました。 実際には、「プロジェクト」-「オプション」-タブ「パッケージ」の 「実行時パッケージを使って構築」にチェックを入れました。 結果、約20KBになりました。 これは、いったいどういうこのなのでしょうか? (実行時にはランタイムライブラリ等が必要になる?) ヘルプを見てみましたが、よく分かりませんでした。 また、URLのページで説明にある 1:『「ライブラリの参照」から、 動作させる環境で必要のないものだけを除きます。』 2:『「実行時のパッケージで再構築」の、部分に、必要なものだけを記述して…』 とありますが、具体的にどのように指定するのでしょうか? (1はパス指定のようだが、2はdcpファイルを指定?)

  • コンボボックスの幅の変更について

    CB_SETDROPPEDWIDTHを使用して幅を変更しているのですが、 右に伸びてしまいます。 これを左に伸びるようにしたいと思っています。 DelphiでのQAで以下のようなページがあったのですが、 Delphiを全く知らないため、コードが読めませんでした・・・ このページにあるように、何らかの方法でVBでも左に伸ばすことは 可能でしょうか? よろしくお願いします。 ※Delphiで左に伸びる記述があったページ http://homepage1.nifty.com/MADIA/delphi/delphi_bbs/200312_03120078.html

  • Delphiでデバッグ時の識別はできますか?

     現在、2重起動防止のため下記のようなコードにしています。 Delphiではデバッグ実行時のフォームも2重起動の対象となるため、開発環境があるときは、2重起動のチェックをしないようにしてあります。  これでうまく行くのですが、何だか野暮ったい気がします。 こう少しスマートな解決策はないでしょうか? program Sample; uses  Forms,  Windows, Dialogs,  uFrmSample in 'uFrmSample.pas' {frmSample}; {$R *.res} var  MainWnd: THandle; begin  {Delphi開発環境の存在をチェックする}  MainWnd := FindWindow(nil, 'delphi 6');  if MainWnd = 0 then begin   {間発環境が実行中でなければ2重起動をチェックする}   MainWnd := FindWindow('TFrmSample', nil);   if MainWnd <> 0 then begin    ShowMessage('既に起動しています');    SetForegroundWindow(MainWnd);    Exit;   end;  end;  Application.Initialize;  Application.CreateForm(TfrmSample, frmSample);  Application.Run; end. 以上、よろしくおねがいします。

  • Delphiでビデオキャプチャー画像の上にビットマップを重ねたい

    プリクラもどきのようなアプリを作ることになりまして,そのため,とりあえずコンポーネントを探してきて,Delphi Super PageにあったTVideoというコンポーネントで,ビデオ入力の画面への表示はできるようになりました。 コンポーネントの機能で,クリップボードやビットマップへの書き出しが可能なので,撮影した後の処理は自力でできると思っているのですが,プリクラもどきであるので,「キャプチャーされて流れている映像の上にビットマップを重ねたい」のです。 透明色を設定してあるビットマップのフレームをメニューから選択して,撮影するときにビデオ入力を画面に表示して,その上にフレームを重ねたいということです。 しかし,コンポーネントのエリアにTImageを重ねても,何をしても,キャプチャー画面が最上位に来てしまいます。高速描画なとこなのでそうなってるのだとは思うんですが,ビットマップを重ねる方法や,その他の実現方法などありましたら教えてください。 VFWを直接いじればいいんでしょうが,VCLしか使えてないような人間なので。 開発環境は,Delphi 3.1です。今は6のPersonalを使っていますが,コンポーネントが対応していないので。 よろしくお願いします。

専門家に質問してみよう