1

ユーザーが日付形式 (dd/mm/yyyy または dd mmmm yyyy など) を選択する必要がありますが、これらのオプションを表示すると混乱します。私ができるようにしたいのは、「2012 年 9 月 14 日」、「2012 年 9 月 14 日」、「2012 年 9 月 14 日金曜日」などで満たされた TComboBox アイテムを持ち、ユーザーがこれらの日付形式のいずれかを選択すると、コンボボックスが取得されることです。テキスト「dd mmmm yyyy」または日付形式が何であれ(ただし、「d/m/yy」などの他の何かを入力できるようにしたいのですが)。

しかし、私はこれを行う簡単な方法を見つけていません.TComboBoxでこれを行う方法がない場合、選択オプションを含むフォームを開くTSpeedButtonを備えたTEditを除いて、これは私の2番目の選択肢です。

質問: TComboBox ドロップダウンに日付を表​​示するにはどうすればよいですか?しかし、日付が選択されると、テキスト プロパティは日付形式を取得しますか?

4

3 に答える 3

4

TCombobox の ownerdraw はどうですか?

procedure TForm16.cbLongDateFormatDrawItem(Control: TWinControl; Index: Integer;
  Rect: TRect; State: TOwnerDrawState);
begin
  with Control as TComboBox do
  begin
    if not (odSelected in State) then
      Canvas.Brush.Color:=clWindow
    else
      Canvas.Brush.Color:=clHighlight;
    Canvas.FillRect(Rect);
    Canvas.TextOut(Rect.Left +2 , Rect.Top, FormatDateTime(cbLongDateFormat.Items[Index], Now));
  end;
end;

procedure TForm16.FormCreate(Sender: TObject);
begin
  cbLongDateFormat.Items.Add('ddddd');
  cbLongDateFormat.Items.Add('dddddd');
  cbLongDateFormat.Items.Add('dd/mm/yyyy');
  cbLongDateFormat.Items.Add('d mmmm yyyy');
end;

ここに画像の説明を入力

于 2012-09-14T03:47:40.993 に答える
2

ComboBox の OnChange イベントを介して直接これを行うことはできません。OnChange イベントの後にテキスト プロパティがユーザーが選択したものに戻されるためです。ただし、フォームにメッセージを送信して変更を加えることができます。

procedure TfINISettings.cbLongDateFormatChange(Sender: TObject);
begin
  PostMessage(Handle, WM_USER, 0, 0);
end;

フォームインターフェイスでプロシージャを宣言します

procedure DateFormatComboBoxChange(var msg: TMessage); message WM_USER;

このメッセージを処理するため、および実装で

procedure TfINISettings.DateFormatComboBoxChange(var msg: TMessage);
begin
  if cbLongDateFormat.ItemIndex <> -1 then
    cbLongDateFormat.Text := DateFormats[cbLongDateFormat.ItemIndex];
end;

DateFormats は、日付形式を含む TStringList です。FormCreate メソッドは次のようになります

procedure TfINISettings.FormCreate(Sender: TObject);
var
  d: String;
begin
  DateFormats := TStringList.Create;
  DateFormats.Add('ddddd');
  DateFormats.Add('dddddd');
  DateFormats.Add('d mmmm yyyy');
  for d in DateFormats do
    cbLongDateFormat.Items.Add(FormatDateTime(d, now));
end;

改善に関する提案を歓迎します。

于 2012-09-14T01:29:25.060 に答える
1

日付/時刻形式の文字列を別TStringListの に保存すると、TComboBox.OnChangeイベントでプロパティを使用して、TComboBox.ItemIndexどのドロップダウン リスト項目が選択されたかを知ることができるため、対応するTStringList項目をTComboBox.Textプロパティに割り当てることができます。

于 2012-09-14T00:43:17.467 に答える