お知らせ

電子会議

ライブラリ

パレット

Delphi FAQ検索

Delphi FAQ一覧

サンプル蔵





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

"スクリーンセーバーを起動させない(改)"



スクリーンセーバーを起動させないコンポーネント(改)です。

<TComponent><サブクラス化>
-----------------------------------------------------------------------------
unit NoScreenServer;

interface

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

type
  TNoScreenServer = class(TComponent)
  private
    WHandle     : THandle;
    FOldWndProc : Pointer;
    FNewWndProc : Pointer;
  protected
    procedure WndProc(var Message: TMessage);virtual;
  public
    constructor Create(AOwner: TComponent); override;
    destructor Destroy;override;
  published
  end;

procedure Register;

implementation

constructor TNoScreenServer.Create(AOwner:TComponent);
begin
    inherited Create(AOwner);
    if  Not(csDesigning in ComponentState) then
    begin
      with TCustomForm(Owner) do
      begin
        WHandle:=Handle;
        FNewWndProc :=MakeObjectInstance(WndProc);
        FOldWndProc :=Pointer(GetWindowLong(WHandle, GWL_WNDPROC));
        SetWindowLong(WHandle, GWL_WNDPROC, Integer(FNewWndProc));
      end;
    end;

end;

destructor TNoScreenServer.Destroy;
begin
    if  Not(csDesigning in ComponentState) then
    begin
      SetWindowLong(WHandle, GWL_WNDPROC,Longint(FOldWndProc));
      FreeObjectInstance(FNewWndProc);
    end;
    inherited Destroy;
end;

procedure TNoScreenServer.WndProc(var Message: TMessage);
begin
    try
      with Message do
      begin
        if Msg = WM_SYSCOMMAND then
        begin
          with TWMSysCommand(message) do
          begin
            if (CmdType and $FFF0) = SC_SCREENSAVE
            then Result := 0
            else Result := CallWindowProc(FOldWndProc, WHandle, Msg, WParam, 
LParam);
          end;
        end
        else
        begin
          Result := CallWindowProc(FOldWndProc, WHandle, Msg, WParam, 
LParam);
        end;
      end;
    except
      begin
        Application.HandleException(Self);
      end;
    end;
end;

procedure Register;
begin
  RegisterComponents('Samples', [TNoScreenServer]);
end;

end.
-----------------------------------------------------------------------------
                                                         KHE00221 t.matsui


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


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

Copyright 1996-2002 Delphi Users' Forum