Delphi: TField.OnGetText イベントの DisplayText パラメータについて

Delphi, TIPS, プログラム, 開発 No Comments »

Delphi でデータベースを扱う場合、表示系のコンポーネントには TField クラスが項目コンポーネントとして利用されています。

そして、この TField クラスの OnGetText イベントには DisplayText パラメータがあるのですが、その解釈がちょっとわかりづらかったのでメモしておきます。

*

何がわかりづらかったかと言うと、TField クラスには DisplayText というプロパティが存在するんです。

引数ではなく、プロパティ。

一緒だと思うと混乱します。

何せ前者は Boolean 型、後者は string 型を扱うプロパティですから。

*

まず TField は、

  1. 編集中で無い時は DisplayText プロパティの値を表示し、
  2. 編集中の時は Text プロパティの値を表示します。

そして、1. の<編集中で無い場合>の表示について、独自の書式などを適用したい場合に使うのが、OnGetText イベントなんですね。

たとえばこんな感じで、通常なら数値が直接表示される項目の表示を変えることができるわけです。

procedure TMyQuery.XXXGetText(Sender: TField;
  var Text: String; DisplayText: Boolean);
begin
  if Sender.AsInteger = 0 then begin
    Text := 'nothing'
  end else begin
    Text := 'not zero';
  end;
end;

表示したい値を Text パラメータに代入します。

ただし、DisplayText パラメータが True の時 Text パラメータに代入した値が有効になります(と言っても DisplayText パラメータは、デフォルト値 True ですが)。

DisplayText パラメータが False の場合(自分で値を代入した場合)、AsString の値が採用されます。

ちなみに、DisplayText を True にセットするのみのコードを記述すると、「’DisplayText’ に代入された値は使われていません」DCC 警告が出ます。

  • Share/Bookmark

Delphi: x2269: オーバーライドされた仮想メソッド ‘%s.%s’ の可視性が %s となり基本クラス ‘%s’ での可視性 (%s) より低くなりました

Delphi, TIPS, プログラム, 開発 No Comments »

「x2269: オーバーライドされた仮想メソッド ‘%s.%s’ の可視性が %s となり基本クラス ‘%s’ での可視性 (%s) より低くなりました」

現在、あるプロジェクト(他の会社製)の修正を行っているのですが、上記警告がかなり出ます。

この警告は、オーバーライドしたメソッドについて、基本クラスよりも派生クラスの可視性が低い場合に表示されるやつですね。

つまり、
基本クラスのメソッドが protected,public,published で宣言されているのに、
派生クラスのメソッドがで private,protected で宣言された場合です。

Delphi では、可視性の範囲が次の通りだからですね。

private < protected < public, published, automated

ヘルプには解決方法として3つありましたが、基本クラスに合わせるのが一番まっとうな解決策だと思います。

というか、無視するって言う解決方法って解決なのか?(笑

  • Share/Bookmark

田町 「トロバカ」の「生まぐろ丼トロ盛り」と「まぐろのつみれ汁」

雑記 No Comments »

大根、にんじん
トロ旨い
薄切り

  • Share/Bookmark
WP Theme & Icons by N.Design Studio
Entries RSS Comments RSS ログイン