こんにちは。
開発環境が、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に'____/__/__'と表示したいです。
空文字が表示できるなら、'____/__/__'より、空文字を表示したいです。
よろしくお願いします。
これですかね?
https://www.petitmonte.com/bbs/answers?question_id=1671
XP SP3 + XE3 Starter において 以下の変更で動作確認しました。
SendMessage -> SendMessageA
'日付を選択してね♪' -> ' ' (半角スペース2個)
Integer(PChar('〜〜')) -> Integer(PAnsiChar('〜〜'))
また、Win7 SP1 で実行しても問題なさそうです。
>サイトを参考にして、以下のようなコードを書いてみました。
特別な理由が無い限り、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適用済みの状態で正常に動く環境を、なんとしても構築した方が良いと思います。
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); に変えればいいと思います。
私は、何か大きな勘違いをしていたような気が。
>DateTimePickerは「yyyy/mm/dd」の書式で入力できるようになっています。
>DateTimePickerに'____/__/__'と表示したいです。
>空文字が表示できるなら、'____/__/__'より、空文字を表示したいです。
キー入力時に、ってことだったんですよね、きっと。
ドロップダウンカレンダーのことだけと思い込んでしまいました。失礼しました。
正攻法としては、TMaskEdit+TMonthCalendarという手もあるんじゃないかと思います。
いろいろ試してみて、TEdit+DateTimePickerにしました。
お騒がせしました。
ありがとうございました。
Formatをスペースにするとかはダメ?
ツイート | ![]() |