フォーラム


ゲスト  

ようこそ ゲスト さん。このフォーラムに投稿するには 登録が必要です。

ページ: [1]
トピック: 項目エディタを使用して,DBGrid 等への表示形式を変更
Mr.XRAY
メンバー
投稿数: 192
項目エディタを使用して,DBGrid 等への表示形式を変更
on: 2013/04/27 18:28 Sat

データベースのデータを TDBGrid 等の表示コントロールに表示する祭の参考です.
表示形式を変える方法は,いくつかありますが,項目エディタを使用する方法もあります.
扱うフィールド (項目) が決まっている.持続的項目であれば,下図のように項目エディタを表示し,
GetText と SetText イベントを作成します.


  
イベントのコードを例えば次のようにします.

//-----------------------------------------------------------------------------
// ADOQuery1のSaleDateフィールド(項目)のGetTextイベント
// これは,ADOQuerty1の項目エディタで設定したもの
//
// 対象項目のデータが読みだされる時に実行される
// ここで設定した文字列tがTDBGridに表示される
// 多くの場合,SetTextと対で使用される
//-----------------------------------------------------------------------------
procedure TForm1.ADOQuery1SaleDateGetText(Sender: TField; var Text: string;
DisplayText: Boolean);
begin
Text := FormatDateTime('hh時nn分ss秒', TDateTimeField(Sender).Value);
end;

//-----------------------------------------------------------------------------
// ADOQuery1のSaleDateフィールド(項目)のSetTextイベント
// これは,ADOQuerty1の項目エディタで設定したもの
//
// 対象項目のデータをデータベースに書き込む時に実行される
// ここでTDBGridに表示されている文字列をTDateTime型の値に変換する
// 多くの場合,GetTextと対で使用される
// ここでは時刻だけ設定し,年月日は元のままとする
//-----------------------------------------------------------------------------
procedure TForm1.ADOQuery1SaleDateSetText(Sender: TField; const Text: string);
var
ADate : TDate;
begin
ADate := Trunc(TDateTimeField(Sender).Value);
TDateTimeField(Sender).Value := ADate + VarToDateTime(Text);
end;

  
実行すると,次のように表示されます.(インプレイスエディタでの) 編集時にも時刻しか表示されません.


  
動作確認は,Windows 7 U64(SP1) + Delphi XE Pro です.
  
参考
[項目エディタ]
http://docwiki.embarcadero.com/RADStudio/XE3/ja/%E9%A0%85%E7%9B%AE%E3%82%A8%E3%83%87%E3%82%A3%E3%82%BF
[持続的項目を作成する]
http://docwiki.embarcadero.com/RADStudio/XE4/ja/%E6%8C%81%E7%B6%9A%E7%9A%84%E9%A0%85%E7%9B%AE%E3%82%92%E4%BD%9C%E6%88%90%E3%81%99%E3%82%8B

Mr.XRAY
メンバー
投稿数: 192
Re: 項目エディタを使用して,DBGrid 等への表示形式を変更
on: 2013/04/28 16:09 Sun

上のサンプルは,項目エディタを使用した項目コンポーネントの SetText, GetText の使用例です.
実際に,時刻を入力するには,この方法は適切ではありません.
なぜなら,利用者が 時,分,秒 等の文字を削除してしまうかも知れません.
そうすると,入力した値を日付時刻型に変換できなくなってしまいます.

そのような誤操作を防ぐために,マスクという機能が提供されています.
以下を参考にしてください.

[Data.DB.TField.EditMask]
http://docwiki.embarcadero.com/Libraries/XE4/ja/Data.DB.TField.EditMask

[System.MaskUtils.TEditMask] マスクの書式設定の参考
http://docwiki.embarcadero.com/Libraries/XE4/ja/System.MaskUtils.TEditMask

ページ: [1]
WP Forum Server by ForumPress | LucidCrew
バージョン: 1.7.5 ; ページロード: 0.025 sec.