<p>DateTimePicker で中身の日付を表示したくない場合、どの様な対応をしているだろうか？<br />Delphi に関わらず、他の言語処理系にも共通する問題なのだ。この問題を解決するために、DateTimePicker に最初からあるチェックボックスを使用して空白を表現している方もいるのではないだろうか？くろねこも最初そう考えた。<br />しかし、ある時とある設定ミスから発見したある方法がこの問題の解決にぴったりだと思った。<br />その方法は、書式設定に <em>"g"</em> を使うという物である。<br />Windows 上での日付書式フォーマットでは "g" は元号を表す記号である。しかし、DateTimePicker はこの元号に対応していないらしく、"g", "gg", "ggg" などのフォーマットが指定された時に何も表示しない。これを逆手にとって表示すべき日付が無いときに、これを設定するのだ。<br />これで、<em>データベース中の日付を表示するときなどに現れる Null を DateTimePicker で表現できる。</em><br />このときの書式には Delphi の書式ではなく、Windows の日付書式を使用する。また commctrl ユニットを uses 節に追加する必要がある。 <br /><br />※ Delphi で月をあらわす書式は "mm" だが、Windows では "MM" となる。<br />&nbsp;</p>
<pre class="brush: delphi">uses
  commctrl;

procedure NullDateFormat;
var
  szFormat: PChar;
begin
  szFormat := 'g';           // Windows の日付書式
  SendMessage(DateTimePicker1.Handle, DTM_SETFORMAT, 0, longint(szFormat));
end;
</pre>
<p class="add">2012/04/07 追記<br />Delphi2010 on Windows7 で上記を試してみたところ、"g", "gg", "ggg"のいずれも"西暦"と表示された。よってこの方法はすでに使えなくなっている。おそらくOSに依存しているものと思われる。<br />よって、何も表示しないDateTimePickerの実現方法を別途考えないといけないようだ。</p>