Article View: japan.comp.lang.delphi
Article #10Re: 画面モード切替後のグラフィックパフォーマンスの低下
From: 林 知紀
Date: Mon, 27 Dec 1999 00:00
Date: Mon, 27 Dec 1999 00:00
91 lines
4681 bytes
4681 bytes
K.Takaoka <saepro@din.or.jp> wrote in message news:38661455.CECA03D4@din.or.jp... > える@海豚ぞな > > 林 知紀 wrote: > > ただTForm.CanvasとTPainBox.Canvasに共通する欠点として > > フォームが他のアプリケーションのウインドウに隠されたときなどの > > フォームの自動描画が行われないことがあります。 > > もしかして、根本的に「Windows の描画アルゴリズム」を誤解されていま > せんか ? いや、確かによくわかっていない事だらけなんですが、 (しかもDelphiの前はN88BASICだったので いろいろと変な癖がついてるし) ちょっと補足しますので その上でやっぱり変なところを指摘してやってください。 > Windows では (C/C++/VB/Delphi/なんでも) アタリマエのことなのですが、 > > Form1.Canvas や PaintBox1.Canvas に、OnPaint 以外の場所で描画を行う > ことは無意味に近いです。 Delphi以外は分からないのでとりあえず僕の環境での現象ですが コードのどの部分でも PaintBox1.Canvas.Draw(0,0,Bitmap); を実行すると即座にBitmapの内容がPaintBox上に表示されます。 しかし、フォームをドラッグするなどOnPaintイベントが発生すると 画像が消えてしまいます。 不思議なのはもう一度同じコードを実行した後は 画面の端や別のウインドウ等で隠された部分だけしか消えません。 で、PaintBox1のOnPaintイベントに PaintBox1.Canvas.Draw(0,0,Bitmap); を書き込むと上記の不都合が解消されました。 (不都合というより仕様なんだろうけど) 以上の現象からOnPaintイベントは OSが「君の窓が動いたり隠れていた場所が見えたりしたよ」と アプリケーションに通知してきたのを受けて 発生するイベントではないかと思ったのですが 間違った理解なのでしょうか? ただ、LineToで直接PaintBox1.Canvasに書き込んだり PaintBox1.Canvas.Draw(0,0,Bitmap2); とBitmap以外のものを書き込んでも フォームが動くなどOnPaintイベントが発生するたびに 画面がBitmapの内容に戻ってしまうので Bitmap.Assign(Bitmap2); PaintBox1.Canvas.Draw(0,0,Bitmap); と若干冗長なコードが必要なのが面倒くさいところです。 > 同様に無効にならないと Windows は描画をしようとしないので、 > > Form1 や PaintBox1 で > > PaintBox1.Canvas.Draw(0, 0, bitmap); > > のようなことをしている状態で、bitmap に変更を加えても何も画面上に > は変化が現れないことになります。 > > PaintBox1.Invalidate; > > と、PaintBox1 を「無効」な状態にすると、Windows はもし PaintBox1 が > 画面上に見えていたら、そこを有効にするために、PaintBox1.Paint を呼び > だして、PaintBox1.OnPaint で再び bitmap を書くことで画面上の状態が > 変化する、という具合です。 多分この点に誤解があったのではないかと思うのですが もちろんオフスクリーンの状態でBitmapの内容を書き換えてから PaintBox1に書き込んでいます。 最終的にVGAサイズのフルスクリーンにしようと思ってるので OnPaintイベントはなかなか発生しないんじゃないかと 思っています。 ちなみに(Sender :TObject)の謎がなんとなく分かりました。 ありがとうございました。 -- くるくるくるくるくるくるくるくるくるくるくるくる 林 知紀 fwhx4467@mb.infoweb.ne.jp くるくるくるくるくるくるくるくるくるくるくるくる
Technical Details
Message-ID:
<845ji4$1l$1@nw042.infoweb.ne.jp>Path:
arc1-ca.pugleaf.net!unknown!not-for-mailReferences:
<83ou3d$jvv$1@nw041.infoweb.ne.jp> <3860CAFB.E16988D7@po.teleway.ne.jp> <83u3iq$i92$1@nw041.infoweb.ne.jp> <842u63$fpk@www.net0726.or.jp> <8451vt$ojp$1@nw042.infoweb.ne.jp> <38661455.CECA03D4@din.or.jp>Show Full Headers
Complete Article Headers
X-Google-Language: Japanese,JIS X-Google-Thread: 110a07,f2bd283c630b1b34 X-Google-Attributes: gid110a07,public X-Google-Thread: feb2e,f2bd283c630b1b34 X-Google-Attributes: gidfeb2e,public X-Google-Thread: fecfa,f2bd283c630b1b34 X-Google-Attributes: gidfecfa,public From: 林 知紀 <fwhx4467@mb.infoweb.ne.jp> Subject: Re: 画面モード切替後のグラフィックパフォーマンスの低下 Date: 1999/12/27 Message-ID: <845ji4$1l$1@nw042.infoweb.ne.jp> X-Deja-AN: 565060643 Content-Transfer-Encoding: 7bit References: <83ou3d$jvv$1@nw041.infoweb.ne.jp> <3860CAFB.E16988D7@po.teleway.ne.jp> <83u3iq$i92$1@nw041.infoweb.ne.jp> <842u63$fpk@www.net0726.or.jp> <8451vt$ojp$1@nw042.infoweb.ne.jp> <38661455.CECA03D4@din.or.jp> X-Priority: 3 Content-Type: text/plain; charset="iso-2022-jp" X-MimeOLE: Produced By Microsoft MimeOLE V5.00.2314.1300 X-Complaints-To: - X-Trace: nw042.infoweb.ne.jp 946229636 53 202.219.28.209 (26 Dec 1999 17:33:56 GMT) Organization: Nifty News Service X-MSMail-Priority: Normal Mime-Version: 1.0 NNTP-Posting-Date: 26 Dec 1999 17:33:56 GMT Newsgroups: japan.comp.lang.delphi,fj.comp.lang.pascal,fj.os.ms-windows.programming