🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Article View: japan.comp.lang.delphi
Article #10

Re: 画面モード切替後のグラフィックパフォーマンスの低下

#10
From: 林 知紀
Date: Mon, 27 Dec 1999 00:00
91 lines
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-mail
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>

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