Bài viết này, chúng tôi tiếp tục giới thiệu đến bạn đọc thêm một điều khiển nữa để lấy kết hợp cả ngày/tháng/năm và giờ/phút từ người sử dụng. Đó là điều khiển DateTimePicker của bada form.

Ở các bài viết trước chúng tôi đã có dịp giới thiệu đến điều khiển DatePicker và TimePicker cũng như là cách sử dụng 2 điều khiển đó. Bài này chúng tôi không nhắc lại chúng mà chỉ giới thiệu đến bạn điều khiển kết hợp giữ 2 điều khiển trên.

Tại bài viết này, bạn đọc sẽ biết thêm thông tin về điều khiển DateTimePicker, cách gắn nó vào form, lấy ngày/tháng/năm và thời gian từ người sử dụng, hiển thị giá trị trên điều khiển DateTimePicker.

Bạn đọc phải tạo một ứng dụng mẫu, gắn vào đó một điều khiển DateTimePicker để lấy ngày/tháng/năm và thời gian từ người sử dụng. Thêm vào đó là một Label để hiển thị giá trị trên điều khiển DateTimePicker khi người sử dụng click vào nút “Save” trên điều khiển DateTimePicker.

Ví dụ:

Hiển thị kết quả khi click vào nút “Save”:

Để làm được như vậy, bạn tạo tập tin “DateTimePickerForm.h” với nội dung như sau:

/*
 * DateTimePickerForm.h
 *
 *  Created on: Jul 3, 2010
 *      Author: AWK
 */

#ifndef DATETIMEPICKERFORM_H_
#define DATETIMEPICKERFORM_H_

#include <FUi.h>
#include <FLocales.h>

class DateTimePickerForm :
    public Osp::Ui::Controls::Form,
    public Osp::Ui::IDateTimeChangeEventListener
{
public:
    DateTimePickerForm(void)
    :__pDateTimePicker(null),
     __pLabel(null){}
    ~DateTimePickerForm(void){}
    bool Initialize(void);

public:
    virtual result OnInitializing(void);
    virtual void OnDateTimeChanged(const Osp::Ui::Control& source, int year, int month, int day, int hour, int minute);
    virtual void OnDateTimeChangeCanceled(const Osp::Ui::Control& source);

private:
    Osp::Ui::Controls::DateTimePicker* __pDateTimePicker;
    Osp::Ui::Controls::Label* __pLabel;
};

#endif /* DATETIMEPICKERFORM_H_ */

Trong đó:

- Form của bạn phải được kế thừa từ giao diện “IDateTimeChangeEventListener” để có thể lắng nghe các sự kiện trả về từ điều khiển DateTimePicker

Tiếp đến, bạn tạo tập tin “DateTimePickerForm.cpp” với nội dung cài đặt như sau:

/*
 * DateTimePickerForm.cpp
 *
 *  Created on: Jul 3, 2010
 *      Author: AWK
 */

#include "DateTimePickerForm.h"

using namespace Osp::Base;
using namespace Osp::Ui;
using namespace Osp::Ui::Controls;
using namespace Osp::Graphics;
using namespace Osp::Locales;

bool
DateTimePickerForm::Initialize(void){
	Construct(FORM_STYLE_NORMAL | FORM_STYLE_TITLE );
	SetTitleText(L"DateTimePicker example");
	SetBackgroundColor(Color(85,104,114));
	return true;
}

result
DateTimePickerForm::OnInitializing(void)
{
    result r = E_SUCCESS;

    // Create a DateTimePicker.
    __pDateTimePicker = new DateTimePicker();
    __pDateTimePicker->Construct(L"DateTimePicker");
    // Add a DateTimeChangeEvent listener.
    __pDateTimePicker->AddDateTimeChangeEventListener(*this);
    // Show the DateTimePicker
    __pDateTimePicker->Show();

    // Create a Label
    __pLabel = new Label();
    __pLabel->Construct(Rectangle(50, 200, 380, 40), L"DateTimePicker");
    AddControl(*__pLabel);

    return r;
}

void
DateTimePickerForm::OnDateTimeChanged(const Osp::Ui::Control& source, int year, int month, int day, int hour, int monute)
{
	DateTime datetime;
	String formattedString;
	DateTimeFormatter* pDateTimeFormatter = null;
	Locale locale(LANGUAGE_ENG, COUNTRY_GB);

	pDateTimeFormatter = DateTimeFormatter::CreateDateTimeFormatterN(
						locale,
						DATE_TIME_STYLE_DEFAULT);
	datetime = __pDateTimePicker->GetDateTime();
	pDateTimeFormatter->Format(datetime, formattedString);
	__pLabel->SetText(formattedString);
	__pLabel->Draw();
}

void
DateTimePickerForm::OnDateTimeChangeCanceled(const Osp::Ui::Control& source)
{
	AppLog("Canceled.\n");
}

Trong đó:

- DateTimePicker(): để tạo một thể hiện của lớp DateTimePicker

- AddDateTimeChangeEventListener(): đăng ký nhận sự kiển trả về của điều khiển DateTimePicker cho form.

- Show(): để hiển thị điều khiển DateTimePicker

- GetDateTime(): để lấy giá trị ngày/tháng/năm, giờ/phút trên điều khiển DateTimePicker

- CreateDateTimeFormatterN(): để định dạng giá trị lấy được trên điều khiển.

Chú ý:

Bạn cần phải khai báo sử dung thư viện “FLocales” với trình biên dịch bằng cách: chọn vào Project > Properties > C/C++ Build > Setting > Tool Settings > bada C++ Linker > Libraries


Những thận trọng khi chọn ngày/tháng/năm chúng tôi đã có dịp trình bày trong bài “DatePicker Example”. Bạn đọc hãy đọc nó để biết thêm nhé!.

Giờ thì bạn có thể xem kết quả của mình rồi đó!.

Chúc bạn thành công!