DateTimePickerに空を表示するには?

解決


やまだ  2013-09-10 20:52:58  No: 45221

こんにちは。
開発環境が、win7(sp1)、delphi XE3 enterpriseです。

DateTimePickerに空文字を表示するには、どうすれば良いのでしょうか?

そもそも空文字を表示するなんて出来るのでしょうか?

サイトを参考にして、以下のようなコードを書いてみました。

uses
  commctrl;

var
  szFormat: PChar;

  szFormat := 'g';           // Windows の日付書式
  SendMessage(DateTimePicker1.Handle, DTM_SETFORMAT, 0, longint(szFormat));

全然ダメで、コントロールを張り付けた日付が表示されてしまいました。

DateTimePickerは必ず日付データが入っていなくてはいけないというサイトも
ありましたし、空データを表示出来るか分からなくなってきました。

DateTimePickerは「yyyy/mm/dd」の書式で入力できるようになっています。

DateTimePickerに'____/__/__'と表示したいです。

空文字が表示できるなら、'____/__/__'より、空文字を表示したいです。

よろしくお願いします。


おかぽん  2013-09-11 02:21:53  No: 45222

これですかね?
https://www.petitmonte.com/bbs/answers?question_id=1671

XP SP3 + XE3 Starter において 以下の変更で動作確認しました。
SendMessage  -> SendMessageA
'日付を選択してね♪' -> '  ' (半角スペース2個)
Integer(PChar('〜〜')) ->  Integer(PAnsiChar('〜〜')) 

また、Win7 SP1 で実行しても問題なさそうです。


Harry  2013-09-11 07:53:18  No: 45223

>サイトを参考にして、以下のようなコードを書いてみました。
特別な理由が無い限り、URLで出典を明らかにしてほしいです。

単純に以下で出来ましたがどうでしょう。(Delphi6 Personal、WindowsXP)
OSにより結果に違いが出そうな気がしますが。

procedure TForm1.Button1Click(Sender: TObject);
begin
  DateTimePicker1.Format:='g';
end;

procedure TForm1.DateTimePicker1Change(Sender: TObject);
begin
  DateTimePicker1.Format:='';
end;

ところで…
以前の質問で最後にigyさんがアップデートについて重要なアドバイスをされていますが、ご存知ですか?

SQLite3に接続するには?
https://www.petitmonte.com/bbs/answers?question_id=8074

過去の事例を見る限り、アップデートは必須です。
XE3がUpdate2適用済みの状態で正常に動く環境を、なんとしても構築した方が良いと思います。


おかぽん  2013-09-11 22:24:30  No: 45224

SendMessage+DTM_SETFORMATで、'g'を指定する方法が記載されているコードは
いくつかみつかりますが、Windows 7 において、正しく表示されない(エラーになる?)ようです。
この情報は、ここで取得しました。
http://www.zero.co.jp/blog/2011/05/27/develop/net/156/

実際に、'g' を指定した場合、空白ではなく '西暦' の文字が表示されました。

そこで、空白2文字と'g'を使った場合の結果を調べたところ以下のようになりました(等幅フォントで見てください)。

                       XP  7
SendMessage      '  '  ○  ○
SendMessage      'g'   ○  ×
Formatプロパティ '  '  △  △
Formatプロパティ 'g'   △  ×

△:初期表示で空白は可能だが、再度実行しても空白にならない
×:前述の通り '西暦' の文字が表示される

Formatプロパティを繰り返し設定しても動作しないのは、プロパティ値の変更がないため、
実際には、何も行われないせいでしょう。
ウインドウハンドルを作り直しでよさそうなので、2回目以降は
Perform(CM_RECREATEWND, 0, 0);  に変えればいいと思います。


Harry  2013-09-12 21:56:25  No: 45225

私は、何か大きな勘違いをしていたような気が。

>DateTimePickerは「yyyy/mm/dd」の書式で入力できるようになっています。
>DateTimePickerに'____/__/__'と表示したいです。
>空文字が表示できるなら、'____/__/__'より、空文字を表示したいです。

キー入力時に、ってことだったんですよね、きっと。
ドロップダウンカレンダーのことだけと思い込んでしまいました。失礼しました。

正攻法としては、TMaskEdit+TMonthCalendarという手もあるんじゃないかと思います。


やまだ  2013-09-16 04:24:06  No: 45226

いろいろ試してみて、TEdit+DateTimePickerにしました。

お騒がせしました。

ありがとうございました。


Nov  2013-09-16 05:44:23  No: 45227

Formatをスペースにするとかはダメ?


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加