お知らせ

電子会議

ライブラリ

パレット

Delphi FAQ検索

Delphi FAQ一覧

サンプル蔵





FDelphi FAQ
16番会議室「玉石混淆みんなで作るSample蔵」に寄せられたサンプル

"スクリーンセーバを作成する人へ"



スクリーンセーバーを作ろうとしている人へ

フォームにコンポーネントを貼り付け、スクリーンセーバー本体を
作るだけで、スクリーンセーバーになるコンポーネントを作りました。

キャンバスに描画できる人なら
誰でもスクリーンセーバーを作る事が出来ると思います

データライブラリのVCLコンポーネント(フリー配布)816番に登録してあります。

|ファイル名 : ScreenServer.zip
|サイズ     : 12539
| 検索キー  : TScreenServer , Component|

以下のプログラムはサンプルです。

見てもらえばわかりますが、スクリーンセーバー本体しかありません。

unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  ScreenServer;

type
  TForm1 = class(TForm)
    ScreenServer1: TScreenServer;
    procedure FormCreate(Sender: TObject);
    procedure ScreenServer1ScreenServer(Sender: TObject);
  private
    { Private 宣言 }
  public
    { Public 宣言 }

  end;

var
  Form1: TForm1;
  LocateE,LocateF,LocateX,LocateY,MoveE,MoveF,MoveX,MoveY : array[0..15] of 
Integer;

implementation

{$R *.DFM}

procedure TForm1.FormCreate(Sender: TObject);
var
    I : Integer;
begin
    with ScreenServer1 do
    begin
      for I:=0 to 15 do
      begin
        LocateE[I] := Random(BitMap.Width );
        LocateF[I] := Random(BitMap.Height);
        LocateX[I] := Random(BitMap.Width );
        LocateY[I] := Random(BitMap.Height);
        MoveE[I] := Random(8)+8;
        MoveF[I] := Random(8)+8;
        MoveX[I] := Random(8)+8;
        MoveY[I] := Random(8)+8;
      end;
      BitMap.Canvas.Pen.Color   := clRed;
      BitMap.Canvas.Brush.Color := clBlack;
    end;
    Exit;
end;

procedure TForm1.ScreenServer1ScreenServer(Sender: TObject);
var
    I : Integer;
begin

    with ScreenServer1.BitMap do
    begin
      {背景をクリアーする場合}
      Canvas.FillRect (Rect(0,0,Width,Height));
      {背景をクリアーせずディスクトップ上に描画する場合}
      Canvas.Draw (0,0,ScreenServer1.BitBak);
    end;

    for I:=0 to 15 do
    begin
      with ScreenServer1 do
      begin
        BitMap.Canvas.LineTo (LocateE[I],LocateF[I]);
        BitMap.Canvas.MoveTo (LocateX[I],LocateY[I]);
        LocateE[I] := LocateE[I] + MoveE[I];
        LocateF[I] := LocateF[I] + MoveF[I];
        LocateX[I] := LocateX[I] + MoveX[I];
        LocateY[I] := LocateY[I] + MoveY[I];
        if (LocateE[I]<0) or (LocateE[I]>BitMap.Width ) 
          then MoveE[I] := MoveE[I] * -1;
        if (LocateF[I]<0) or (LocateF[I]>BitMap.Height) 
          then MoveF[I] := MoveF[I] * -1;
        if (LocateX[I]<0) or (LocateX[I]>BitMap.Width ) 
          then MoveX[I] := MoveX[I] * -1;
        if (LocateY[I]<0) or (LocateY[I]>BitMap.Height) 
          then MoveY[I] := MoveY[I] * -1;
      end;
    end;
    Exit;
end;

                                                    KHE00221 t.matsui

Original document by t.matsui        氏 ID:(KHE00221)


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

Copyright 1996-2002 Delphi Users' Forum