お知らせ

電子会議

ライブラリ

パレット

Delphi FAQ検索

Delphi FAQ一覧

サンプル蔵





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

"イベントハンドラは1度だけで良い。。。"





■概要
 使い古された手ではありますが。。。(((^^;)
 1度実行されたイベントハンドラをそれ以後無効にするサンプルです。

■コンポーネント
 Form1 に ApplicationEvents1, Button1 を適当に配置し, Button1.OnClick
ApplicationEvents1.OnActivate 等を以下の様にして下さい。

■その他
 ・Windows98SE + Delphi5 Pro で動作確認。
 ・Delphi4以前のバージョンには TApplicationEvents はありません。(^^;)
 ・OnActivate 以外でも勿論この手は使えます。
 ・本サンプルは、ご自身の責任においてお試し下さい。m(_"_)m

■サンプルコード
//=========================================================================
{...略...}
type
  TForm1 = class(TForm)
    Button1: TButton;
    ApplicationEvents1: TApplicationEvents;
    procedure ApplicationEvents1Activate(Sender: TObject);
    procedure Button1Click(Sender: TObject);
  private
    { Private 宣言 }
    procedure LastActivate( Sender: TObject );
  public
    { Public 宣言 }
  end;

var
  Form1: TForm1;

implementation

{$R *.DFM}
{**************************************************************************
   定数・変数宣言
//************************************************************************}
const
  Msg: array[0..2] of String = (
           'こんにちは。えっ?お呼びじゃない?'#13#10
         + '失礼しました。m(_"_)m'#13#10
         + '次回からは出てきませんです。',
           'お呼びじゃないんでしょ!?'#13#10
         + 'これで最後にしてよね!(^^メ)',
           '悪いけど Button1.OnClick を無効にするよ!!(`´メ)'
       );{Msg[i]}
var
  Cnt: Integer = 0;  // 明示的に初期化(念のため ^^;)
{**************************************************************************
   ApplicationEvents1 OnActivate (当初)
//************************************************************************}
procedure TForm1.ApplicationEvents1Activate( Sender: TObject );
begin
  ApplicationEvents1.OnActivate := nil;  // 無効化(ここがミソ)
  ShowMessage( Msg[Cnt] );
  Inc( Cnt );
end;
{**************************************************************************
   ApplicationEvents1 OnActivate (実行時、動的に割り当てるもの)
   ・イベントハンドラ動的割当のサンプルを兼ねる意味で。。。((^^;) 冗長...
//************************************************************************}
procedure TForm1.LastActivate( Sender: TObject );
begin
  ApplicationEvents1.OnActivate := nil;  // 無効化
  ShowMessage( Msg[Cnt] );
  Button1.OnClick := nil;
end;
{**************************************************************************
   Button1 OnClick
//************************************************************************}
procedure TForm1.Button1Click( Sender: TObject );
begin
  {* イベントハンドラの割当 *}
  case Cnt of
    1: ApplicationEvents1.OnActivate := ApplicationEvents1Activate;
    2: ApplicationEvents1.OnActivate := LastActivate;
  end;{case Cnt of}
  Hide;
  Sleep( 1000 );  // 遅延、値は適当に。。。
  Show;
end;
{**************************************************************************
//************************************************************************}
end.
//=========================================================================

                              01/03/10(Sat) 00:35am  Fermion [KHF03264]

 


- FDELPHI  MES(16):玉石混淆みんなで作るSample蔵【見本蓄積】 01/03/10 -

Original document by Fermion         氏 ID:(KHF03264)


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

Copyright 1996-2002 Delphi Users' Forum