お知らせ

電子会議

ライブラリ

パレット

Delphi FAQ検索

Delphi FAQ一覧

サンプル蔵





FDelphi FAQ
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 メソッドをオーバーライド
して、上記のコードを実行してみると、再描画し損ないが発生しました。
  再描画し損ないを確認したのは Windows95 + Plus! をインストールした
486DX2-66MHz機(VL-busビデオカード)で「ウインドウを描画しながらド
ラッグ」を激しく行った場合です。
 WM_PAINT のメッセージハンドラを記述した場合には大丈夫でした。
 
              '97/11/21、河邦 正(GCC02240@niftyserve.or.jp)

Original document by 河邦 正         氏 ID:(GCC02240)


ここにあるドキュメントは NIFTY SERVEの Delphi Users' Forum の16番会議室「玉石混淆みんなで作るSample蔵」に投稿されたサンプルです。これらのサンプルはボーランド株式会社がサポートする公式のものではありません。また、必ずしも動作が検証されているものではありません。これらのサンプルを使用したことに起因するいかなる損害も投稿者、およびフォーラムスタッフはその責めを負いません。使用者のリスクの範疇でご使用下さい。

Copyright 1996-2002 Delphi Users' Forum