|
16番会議室「玉石混淆みんなで作るSample蔵」に寄せられたサンプル
"フォームに絵を敷き詰める例"
// フォームに絵を敷き詰める例(for Delphi)
デスクトップの壁紙のように絵をならべて描画します。
procedure TForm1.FormPaint(Sender: TObject);
var
R: TRect;
x, y: Integer;
Graphic: TGraphic;
begin
// ここで壁紙を指定します
Graphic := Image1.Picture.Graphic;
if not Graphic.Empty then
begin
// 更新領域(再描画する部分)の取得
//if not GetUpdateRect(Handle, R, Graphic.Transparent) then
if not GetUpdateRect(Handle, R, FALSE) then
R := ClientRect;
// 壁紙の必要枚数(行・列)を計算する
R.Left := R.Left div Graphic.Width;
R.Right := (R.Right - 1) div Graphic.Width;
R.Top := R.Top div Graphic.Height;
R.Bottom := (R.Bottom - 1) div Graphic.Height;
// 壁紙を描画する
for y := R.Top to R.Bottom do
for x := R.Left to R.Right do
Canvas.Draw(x * Graphic.Width, y * Graphic.Height, Graphic);
end;
end;
ただし、OnPaint イベントハンドラや Paint メソッドをオーバーライド
して、上記のコードを実行してみると、再描画し損ないが発生しました。
再描画しそこないを確認したのは 486DX66機(VL-busビデオカード)で
「ウインドウを描画しながらドラッグ」を行った場合です。
WM_PAINT のメッセージハンドラを記述した場合には大丈夫でした。
'97/11/11、河邦 正(GCC02240@niftyserve.or.jp)
Original document by 河邦 正 氏 ID:(GCC02240)
ここにあるドキュメントは NIFTY SERVEの Delphi Users' Forum の16番会議室「玉石混淆みんなで作るSample蔵」に投稿されたサンプルです。これらのサンプルはボーランド株式会社がサポートする公式のものではありません。また、必ずしも動作が検証されているものではありません。これらのサンプルを使用したことに起因するいかなる損害も投稿者、およびフォーラムスタッフはその責めを負いません。使用者のリスクの範疇でご使用下さい。
Copyright 1996-2002 Delphi Users' Forum
|