Migaro. 技術Tips

                       

ミガロ. 製品の技術情報
IBMiの活用に役立つ情報を掲載!


【Delphi】ローカル通知の表示方法

Delphi/400では、画面右下などに表示されるローカル通知(バルーン通知・プッシュ通知)を
いくつかの方法で表示させることが可能です。
本記事では、その手順を紹介します。

 

通知表示手順1(VCL:スタンダード)

コンポーネントパレットの「Additional」タブにある
TTrayIconコンポーネントを使用します。

これはシステムトレイ(タスクトレイ)の右下部分に表示されるアイコンを
作成するためのコンポーネントで、主にアプリケーションをタスクバー内ではなく
システムトレイに格納する場合に使用します。

しかしその機能を使用するのではなく、システムトレイから表示される
ポップアップ通知機能のみを活用することも可能です。

VisibleプロパティはFalseにするとポップアップごと非表示になるため、Trueを設定します。

BalloonTitleプロパティはポップアップのタイトル、BalloonHintプロパティは本文を設定します。
※BalloonTitleがブランクの場合、BalloonHintの値がタイトルとして表示されます。
※BalloonHintがブランクの場合はポップアップが表示されません。

BalloonFlagsプロパティはアイコンを設定します。以下の4通りから選択可能です。

  • bfNone(アイコンなし)
  • bfInfo(情報)
  • bfWarning(警告)
  • bfError(エラー)

ShowBalloonHintメソッドで、設定したポップアップを画面に表示させます。

例えば以下のようにコードを記述します。

  TrayIcon1.Visible      := True;   // トレイアイコン表示(True必須)
  TrayIcon1.BalloonFlags := bfInfo; //  アイコンの種類
  TrayIcon1.BalloonTitle := 'Title ポップアップのタイトル'; // メッセージ設定1
  TrayIcon1.BalloonHint  := 'Hint ポップアップの本文';      // メッセージ設定2
  TrayIcon1.ShowBalloonHint;        // メッセージ表示

また、TTrayIconのOnBalloonClickイベントを設定しておくと、
ポップアップがクリックされた時の処理を記述することができます。

 

 


通知表示手順2(VCL:Bonus KSVC使用時)

以前の記事でご紹介したBonus KSVC(※11 Alexandria向け)の
TRzTrayIconコンポーネントを使用すると、
1メソッドでポップアップを表示させることが可能です。
また、上記の手順1と異なり、連続表示も可能です。

通知を表示するShowBalloonHintメソッドの引数は以下のようになっています。
基本的には手順1のスタンダードなパターンと同様です。

①ポップアップのタイトル(ブランクだと②がタイトルになる)
②ポップアップの本文(ブランクだとポップアップが表示されない)
③ポップアップアイコンの設定(bhiNone・bhiInfo・bhiWarning・bhiError)
④タイムアウト時間(Windows 10以降では設定が反映されないため、10~30の間で任意の整数を指定)

例えば以下のようにコードを記述することが可能です。

  RzTrayIcon1.ShowBalloonHint('通知タイトルのサンプル',
                              'これはKSVCを使った通知のサンプルです。',
                              bhiWarning,
                              10);
  RzTrayIcon1.ShowBalloonHint('通知タイトルのサンプル2',
                              'これはKSVCを使った通知のサンプルです。2',
                              bhiInfo,
                              10);
  RzTrayIcon1.ShowBalloonHint('',
                              'これはKSVCを使った通知のサンプルです。3',
                              bhiNone,
                              10);
連続表示した際の表示イメージ

こちらでは、OnBalloonHintClickイベントを設定しておくことで
ポップアップがクリックされた時の処理を記述することができます。

 

 


通知表示手順3(VCL・FireMonkey両用:TNotificationの使用)

ここまでの手順1・2はVCL専用ですが、
通知センターの処理に特化したTNotificationCenterコンポーネントを使用すると、
FireMonkeyのスマートデバイス向けの通知も作成できます。(※10 Seattle~)

まずはVCLでのコード記述例です。
(TNotificationCenterは、VCL用とFireMonkey用の両方が存在します)

画面にTNotificationCenterコンポーネントを配置し、
そこからTNotificationクラスを生成して通知を表示します。
なおこの方法では、ポップアップアイコンを指定することはできません。

{*****************************************************************************
 目的: 検証用 プッシュ通知 TNotification VCL
*****************************************************************************}
procedure TForm1.Button3Click(Sender: TObject);
var
  MyNotification: TNotification;
begin
  MyNotification := NotificationCenter1.CreateNotification;
  try
    MyNotification.Name        := 'test'; // 任意の名前を指定
    MyNotification.Title       := '通知のタイトル';
    MyNotification.AlertBody   := 'これはTNotificationCenterを使った通知のサンプルです。';

    NotificationCenter1.PresentNotification(MyNotification);
  finally
    FreeAndNil(MyNotification);
  end;
end;

 


 

FireMonkeyのスマートデバイス向けの通知も作成できます。

また、Windowsでは改行を伴う長い文字列も表示できますが、
iOSやAndroidでは最初の1~2行しか表示されないようです。

{*****************************************************************************
 目的: 検証用 プッシュ通知 TNotification FireMonkey
*****************************************************************************}
procedure TForm1.Button4Click(Sender: TObject);
var
  MyNotification: TNotification;
begin

  // 通知用クラスを生成
  MyNotification := NotificationCenter1.CreateNotification;
  try
    // 通知内容を設定
    MyNotification.Name      := 'MIGARO TIPS APP';  // 任意の名前
    MyNotification.Title     := '技術TIPS 通知のタイトル';
    MyNotification.AlertBody := '通知をお知らせします。' + #13#10 +
      '株式会社ミガロ.の各製品ページへの短縮URLができました!' +
      '「https://www.migaro.co.jp/」 のあとに「valence」「delphi400」' +
      '「sp4i」と入力すると、それぞれの製品ページへジャンプするよ!!';

{$IFDEF IOS}     // iOS向け処理
    // 通知の許可要求
    // 【※コンパイル前に下記の「新しいバージョンキーを作成」の手順も必要】
    // 【※便宜上ここに記載しているが、実際にはこのイベントより前に記述しておく】
    NotificationCenter1.RequestPermission;

    // 5秒後に通知を表示させる
    MyNotification.FireDate  := IncSecond(Now, 5);
    NotificationCenter1.ScheduleNotification(MyNotification);
{$ELSE}
{$IFDEF Android} // Android向け処理
    // 5秒後に通知を表示させる
    MyNotification.FireDate  := IncSecond(Now, 5);
    NotificationCenter1.ScheduleNotification(MyNotification);
{$ELSE}          // それ以外(Windows)向け処理
    // 通知をすぐに表示させる(Windowsは予約非対応)
    NotificationCenter1.PresentNotification(MyNotification);
{$ENDIF}
{$ENDIF}

  finally
    FreeAndNil(MyNotification);
  end;
end;

※IncSecondを使用する場合は、uses節にSystem.DateUtilsが必要です。
 iOS・Androidでも「PresentNotification」で通知を即時表示させることは可能です。

 

iOSで通知を表示させる場合は、通知を許可させるために
 ①プロジェクトオプションで、新しいバージョンキーを作成
 ②事前にロジックで通知の許可を要求
する必要があります。

①については、プロジェクトオプションの「バージョン情報」にて
下図を参考に新しいバージョンキー「FMLocalNotificationPermission」を作成し、
値に「true」を設定します。

②については、通知表示ロジックより前(アプリ起動時など)に、TNotificationCenterの
RequestPermissionメソッドで通知の許可を要求する必要があります。(上ソースの赤字部分)

 
上記のロジックを各OS向けにコンパイルして実行すると、
それぞれ以下のようなイメージで通知が表示されます。

 

 


参考リンク