<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	xmlns:georss="http://www.georss.org/georss" xmlns:geo="http://www.w3.org/2003/01/geo/wgs84_pos#" xmlns:media="http://search.yahoo.com/mrss/"
	>

<channel>
	<title>Bada VN</title>
	<atom:link href="http://badavn.wordpress.com/feed/" rel="self" type="application/rss+xml" />
	<link>http://badavn.wordpress.com</link>
	<description>Tài nguyên cho lập trình phát triển ứng dụng Bada</description>
	<lastBuildDate>Tue, 13 Sep 2011 03:29:58 +0000</lastBuildDate>
	<language>vi</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.com/</generator>
<cloud domain='badavn.wordpress.com' port='80' path='/?rsscloud=notify' registerProcedure='' protocol='http-post' />
<image>
		<url>http://s2.wp.com/i/buttonw-com.png</url>
		<title>Bada VN</title>
		<link>http://badavn.wordpress.com</link>
	</image>
	<atom:link rel="search" type="application/opensearchdescription+xml" href="http://badavn.wordpress.com/osd.xml" title="Bada VN" />
	<atom:link rel='hub' href='http://badavn.wordpress.com/?pushpress=hub'/>
		<item>
		<title>Demo application &#8211; RSSReader</title>
		<link>http://badavn.wordpress.com/2010/08/16/demo-application-rssreader/</link>
		<comments>http://badavn.wordpress.com/2010/08/16/demo-application-rssreader/#comments</comments>
		<pubDate>Sun, 15 Aug 2010 17:33:35 +0000</pubDate>
		<dc:creator>kthangvd</dc:creator>
				<category><![CDATA[Ứng dụng]]></category>

		<guid isPermaLink="false">http://badavn.wordpress.com/?p=387</guid>
		<description><![CDATA[Với ứng dụng nhỏ này, người sử dụng có thể dễ dàng đọc các tin tức RSS của các trang web mà mình biết một cách nhanh chóng. Nhập địa chỉ của trang rss cần đọc, chọn ok -&#62; sẽ xuất hiện danh sách các tin tức trong tập tin rss cần đọc. Để xem [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=badavn.wordpress.com&amp;blog=12794397&amp;post=387&amp;subd=badavn&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Với ứng dụng nhỏ này, người sử dụng có thể dễ dàng đọc các tin tức RSS của các trang web mà mình biết một cách nhanh chóng.</p>
<p><span id="more-387"></span></p>
<p><a href="http://badavn.files.wordpress.com/2010/08/rss_reader1.png"><img class="aligncenter size-full wp-image-388" title="rss_reader1" src="http://badavn.files.wordpress.com/2010/08/rss_reader1.png?w=640" alt=""   /></a></p>
<p>Nhập địa chỉ của trang rss cần đọc, chọn ok -&gt; sẽ xuất hiện danh sách các tin tức trong tập tin rss cần đọc. Để xem chi tiết về mỗi tin tức chỉ cần touch vào mỗi mẫu tin.</p>
<p><a href="http://badavn.files.wordpress.com/2010/08/rss_reader2.png"><img class="aligncenter size-full wp-image-389" title="rss_reader2" src="http://badavn.files.wordpress.com/2010/08/rss_reader2.png?w=640" alt=""   /></a></p>
<p>Có thể touch vào History để xem các links đã được bạn viến thăm trước đó. Lưu trữ tối đa là 10 liên kết mới nhất mà bạn đã truy cập.</p>
<p>Chọn vào mỗi link sẽ tương đương với việc bạn nhập vào từ ô textbox.</p>
<p><a href="http://badavn.files.wordpress.com/2010/08/rss_reader3.png"><img class="aligncenter size-full wp-image-390" title="rss_reader3" src="http://badavn.files.wordpress.com/2010/08/rss_reader3.png?w=640" alt=""   /></a></p>
<p>Danh sách các items trong tập tin rss</p>
<p><a href="http://badavn.files.wordpress.com/2010/08/rss_reader4.png"><img class="aligncenter size-full wp-image-391" title="rss_reader4" src="http://badavn.files.wordpress.com/2010/08/rss_reader4.png?w=640" alt=""   /></a></p>
<p>Chi tiết cho từng mẫu tin</p>
<p><a href="http://badavn.files.wordpress.com/2010/08/rss_reader5.png"><img class="aligncenter size-full wp-image-392" title="rss_reader5" src="http://badavn.files.wordpress.com/2010/08/rss_reader5.png?w=640" alt=""   /></a></p>
<p>Screens flow</p>
<p><a href="http://badavn.files.wordpress.com/2010/08/rss_reader6.png"><img class="aligncenter size-full wp-image-393" title="rss_reader6" src="http://badavn.files.wordpress.com/2010/08/rss_reader6.png?w=640" alt=""   /></a></p>
<p>Classes</p>
<p><a href="http://badavn.files.wordpress.com/2010/08/rss_reader7.png"><img class="aligncenter size-full wp-image-394" title="rss_reader7" src="http://badavn.files.wordpress.com/2010/08/rss_reader7.png?w=640" alt=""   /></a></p>
<p>Chương trình này chúng tôi chỉ mới test trên Simulator thôi. Chúng tôi chưa có điều kiện để test trên thiết bị thực.</p>
<p><a href="http://www.mediafire.com/download.php?2o3a47560p15qa9">code demo</a>.</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/badavn.wordpress.com/387/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/badavn.wordpress.com/387/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/badavn.wordpress.com/387/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/badavn.wordpress.com/387/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/badavn.wordpress.com/387/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/badavn.wordpress.com/387/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/badavn.wordpress.com/387/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/badavn.wordpress.com/387/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/badavn.wordpress.com/387/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/badavn.wordpress.com/387/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/badavn.wordpress.com/387/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/badavn.wordpress.com/387/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/badavn.wordpress.com/387/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/badavn.wordpress.com/387/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=badavn.wordpress.com&amp;blog=12794397&amp;post=387&amp;subd=badavn&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://badavn.wordpress.com/2010/08/16/demo-application-rssreader/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/62fb63a5e94c0acaa9220db621441aaf?s=96&#38;d=wavatar&#38;r=G" medium="image">
			<media:title type="html">kthangvd</media:title>
		</media:content>

		<media:content url="http://badavn.files.wordpress.com/2010/08/rss_reader1.png" medium="image">
			<media:title type="html">rss_reader1</media:title>
		</media:content>

		<media:content url="http://badavn.files.wordpress.com/2010/08/rss_reader2.png" medium="image">
			<media:title type="html">rss_reader2</media:title>
		</media:content>

		<media:content url="http://badavn.files.wordpress.com/2010/08/rss_reader3.png" medium="image">
			<media:title type="html">rss_reader3</media:title>
		</media:content>

		<media:content url="http://badavn.files.wordpress.com/2010/08/rss_reader4.png" medium="image">
			<media:title type="html">rss_reader4</media:title>
		</media:content>

		<media:content url="http://badavn.files.wordpress.com/2010/08/rss_reader5.png" medium="image">
			<media:title type="html">rss_reader5</media:title>
		</media:content>

		<media:content url="http://badavn.files.wordpress.com/2010/08/rss_reader6.png" medium="image">
			<media:title type="html">rss_reader6</media:title>
		</media:content>

		<media:content url="http://badavn.files.wordpress.com/2010/08/rss_reader7.png" medium="image">
			<media:title type="html">rss_reader7</media:title>
		</media:content>
	</item>
		<item>
		<title>Bada location tutorial</title>
		<link>http://badavn.wordpress.com/2010/08/15/bada-location-tutorial/</link>
		<comments>http://badavn.wordpress.com/2010/08/15/bada-location-tutorial/#comments</comments>
		<pubDate>Sun, 15 Aug 2010 16:39:43 +0000</pubDate>
		<dc:creator>kthangvd</dc:creator>
				<category><![CDATA[Hướng dẫn]]></category>

		<guid isPermaLink="false">http://badavn.wordpress.com/?p=377</guid>
		<description><![CDATA[Bài viết này, chúng tôi muốn đề cập đến bạn đọc làm thế nào để lấy giá trị GPS vào chương trình ứng dụng của mình. Với giá trị này, ứng dụng của bạn sẽ dễ dàng xác định được vị trí của chiếc điện thoại trên bản đồ thế giới dựa vào giá trị [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=badavn.wordpress.com&amp;blog=12794397&amp;post=377&amp;subd=badavn&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Bài viết này, chúng tôi muốn đề cập đến bạn đọc làm thế nào để lấy giá trị GPS vào chương trình ứng dụng của mình. Với giá trị này, ứng dụng của bạn sẽ dễ dàng xác định được vị trí của chiếc điện thoại trên bản đồ thế giới dựa vào giá trị hoành độ (latitude), tung độ (longitude) và cao độ (altitude).</p>
<p><span id="more-377"></span></p>
<p>Khi cài đặt Bada SDK thành công, bạn có thể tìm thấy các ứng dụng mẫu có đề cập đến vấn đề location được hỗ trợ trên bada.</p>
<p>Trong bài viết này, chúng tôi chỉ trích chọn một số điểm đặc trưng, làm thế nào để lấy giá trị hoành độ, tung độ và cao độ. Sau đó, đưa giá trị lấy được đó vào google map để xác định vị trí hiện tại trên bản đồ thế giới.</p>
<p><em>Ví dụ</em>:</p>
<p>Cập nhật vị trí của mình trên bản đồ</p>
<p><a href="http://badavn.files.wordpress.com/2010/08/location11.png"><img class="aligncenter size-full wp-image-379" title="location1" src="http://badavn.files.wordpress.com/2010/08/location11.png?w=640" alt=""   /></a></p>
<p>Tìm kiếm đường đi và vị trí trên bản đồ</p>
<p><a href="http://badavn.files.wordpress.com/2010/08/location2.png"><img class="aligncenter size-full wp-image-380" title="location2" src="http://badavn.files.wordpress.com/2010/08/location2.png?w=640" alt=""   /></a></p>
<p>Để sử dụng được GPS, ứng dụng của bạn phải sử dụng lớp</p>
<pre>public Osp::Locations::ILocationListener</pre>
<p>để lắng nghe sự kiện cập nhật giá trị GPS.</p>
<p>Khai báo đối tượng localtion để lấy giá trị hoành độ, tung độ và cao độ.</p>
<pre>// Get Location

Osp::Locations::LocationProvider* __pLocProvider;
__pLocProvider = new LocationProvider();
__pLocProvider-&gt;Construct(LOC_METHOD_GPS);
__pLocProvider-&gt;RequestLocationUpdates(*this, 5, false);</pre>
<p>Phương thức RequestLocationUpdates() sẽ phát sinh sự kiện OnLocationUpdated sau thời gian timeout (ví dụ:  5 giây). Khi sự kiện được phát sinh thì kèm theo đó là object mô tả giá trị location (nếu có)</p>
<p>Tại đây, chúng ta xử lý để lấy giá trị hoành độ và tung độ như sau:</p>
<pre>MyForm::OnLocationUpdated (Location &amp;location)
{
	double latitude = 0;
	double longitude = 0;
	const QualifiedCoordinates* pQCoord = location.GetQualifiedCoordinates();
	if(pQCoord != null)
	{
		latitude = pQCoord-&gt;GetLatitude();
		longitude = pQCoord-&gt;GetLongitude();
		AppLog("Lat: %f, Long: %f", latitude, longitude);
	}
}
</pre>
<p>Sau khi có được giá trị hoành độ (latitude) và tung độ (longitude), bạn đưa nó vào google map để hiển thị là xong.</p>
<p>Google map cung cấp các API để chúng ta xác định vị trí, tìm đường, tìm địa chỉ và hiển thị vị trí trên bản đồ.</p>
<p>Bạn đọc phải có chút kiến thức cơ bản về cách sử dụng nó hoặc tìm hiểu các bài mẫu (tutorial) để đưa nó vào ứng dụng cho phù hợp.</p>
<p>Chúc bạn thành công!</p>
<p><a href="http://www.mediafire.com/download.php?afwt44qxp3dax2i">Code demo</a></p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/badavn.wordpress.com/377/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/badavn.wordpress.com/377/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/badavn.wordpress.com/377/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/badavn.wordpress.com/377/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/badavn.wordpress.com/377/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/badavn.wordpress.com/377/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/badavn.wordpress.com/377/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/badavn.wordpress.com/377/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/badavn.wordpress.com/377/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/badavn.wordpress.com/377/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/badavn.wordpress.com/377/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/badavn.wordpress.com/377/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/badavn.wordpress.com/377/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/badavn.wordpress.com/377/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=badavn.wordpress.com&amp;blog=12794397&amp;post=377&amp;subd=badavn&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://badavn.wordpress.com/2010/08/15/bada-location-tutorial/feed/</wfw:commentRss>
		<slash:comments>37</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/62fb63a5e94c0acaa9220db621441aaf?s=96&#38;d=wavatar&#38;r=G" medium="image">
			<media:title type="html">kthangvd</media:title>
		</media:content>

		<media:content url="http://badavn.files.wordpress.com/2010/08/location11.png" medium="image">
			<media:title type="html">location1</media:title>
		</media:content>

		<media:content url="http://badavn.files.wordpress.com/2010/08/location2.png" medium="image">
			<media:title type="html">location2</media:title>
		</media:content>
	</item>
		<item>
		<title>Database Tutorial</title>
		<link>http://badavn.wordpress.com/2010/07/30/database-tutorial/</link>
		<comments>http://badavn.wordpress.com/2010/07/30/database-tutorial/#comments</comments>
		<pubDate>Fri, 30 Jul 2010 14:20:57 +0000</pubDate>
		<dc:creator>kthangvd</dc:creator>
				<category><![CDATA[Hướng dẫn]]></category>
		<category><![CDATA[databases]]></category>

		<guid isPermaLink="false">http://badavn.wordpress.com/?p=371</guid>
		<description><![CDATA[Để đáp ứng nhu cầu lưu trữ và xử lý dữ liệu cho ứng dụng của bạn, bada cung cấp lớp (class) với các phương thức (methods) để thao tác với cơ sở dữ liệu một cách hiệu quả. Nếu bạn đọc đã từng sử dụng SQLlite trước đó thì đến với cơ sở dữ [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=badavn.wordpress.com&amp;blog=12794397&amp;post=371&amp;subd=badavn&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Để đáp ứng nhu cầu lưu trữ và xử lý dữ liệu cho ứng dụng của bạn, bada cung cấp lớp (class) với các phương thức (methods) để thao tác với cơ sở dữ liệu một cách hiệu quả.</p>
<p><span id="more-371"></span>Nếu bạn đọc đã từng sử dụng SQLlite trước đó thì đến với cơ sở dữ liệu của bada thật dễ dàng bởi đó là nền tảng cơ sở dữ liệu mở phổ biến hiện nay. Bài viết này, chúng tôi muốn đề cập đến bạn đọc cách sử dụng cũng như các thao tác xử lý cơ bản trên cơ sở dữ liệu của bada.</p>
<p><strong>Các lớp cần thiết để thao tác với cơ sở dữ liệu như:</strong></p>
<p>1. <strong>Database</strong>:  Thực hiện các tính năng cơ sở dữ liệu cơ bản để tạo ra (create) và xóa (delete) các tập  tin cơ sở dữ liệu, thực hiện các lệnh SQL, và thực hiện các nhiệm vụ  khác trong việc quản lý cơ sở dữ liệu chung.</p>
<p>2.<strong> DbStatement</strong>:  Cung cấp một phương thức  để tạo và đánh giá các lệnh trước khi biên dịch.</p>
<p>3.<strong> DbEnumerator</strong>:  Cung cấp một phương thức để điều hướng kết quả của DbStatement.</p>
<p><strong>Các thao tác cơ bản khi sử dụng cơ sở dữ liệu</strong>:</p>
<p><strong>a.  Tạo database mới hoặc mở database đã tồn tại.</strong></p>
<p>Trước khi bạn sử dụng một cơ sở dữ liệu (database) hoặc tạo các bảng (tables) cho cơ sở dữ liệu thì việc làm trước tiên nhất là phải mở một kết nối đến cơ sở  dữ liệu.</p>
<p>Khi bạn mở một cơ sở dữ liệu, thì một cơ sở dữ liệu rỗng (empty) sẽ tự động tạo ra nếu cơ sở dữ liệu đó chưa tồn tại. Và ngược lại.</p>
<pre>Database database;

DbStatement* pStmt;
DbEnumerator* pEnum;
String dbName(L"/Home/sampleDb");
String sql, sql2, sql3;
String statement;
String stringItem;

result r = E_SUCCESS;

r = database.Construct(dbName, true);</pre>
<p>Bạn cần chú ý đến quyền truy cập (permissions)  và chế độ đọc viết (read-write) của thư mục lưu trữ  cơ sở dữ liệu.  Với thưc mục &#8220;/Home&#8221; sẵn sàng chon ứng dụng của bạn có thể đọc và ghi tập tin.</p>
<p><strong>b. Tạo bảng (table) cho cơ sở dữ liệu</strong></p>
<p>Cú pháp quen thuộc của SQLlite sẽ được sự dụng tại đây. Nếu bạn chưa từng biết đến SQLlite thì có thể tìm hiểu thêm tài liệu<a href="http://www.sqlite.org/"> tại đây</a>!</p>
<pre>sql.Append(L"CREATE TABLE IF NOT EXISTS myTable1 ( column0 INTEGER PRIMARY KEY, column1 DOUBLE, column2 TEXT )");

r = database.ExecuteSql(sql, true);</pre>
<p><strong>c. Thêm dữ liệu mới</strong></p>
<p>Sử dụng &#8220;DbStatement&#8221; để đánh giá các câu lệnh truy vấn với dữ liệu thêm vào động. Và kết quả truy vấn được do &#8220;DbEnumerator&#8221; quản lý.</p>
<pre>database.BeginTransaction();

statement.Append(L"INSERT INTO myTable1 (column0, column1, column2) VALUES (?, ?, ?)");

pStmt = database.CreateStatementN(statement);

stringItem.Append(L"Initial Data");

for (int i=0; i&lt;10; i++) {    pStmt-&gt;BindInt(0, i);   // integer
   pStmt-&gt;BindDouble(1, i*0.1);   // double
   pStmt-&gt;BindString(2, stringItem);   // String

   pEnum = database.ExecuteStatementN(*pStmt);
}
database.CommitTransaction();</pre>
<p><strong>d. Cập nhật dữ liệu đã tồn tại</strong></p>
<pre>database.BeginTransaction();

sql3.Append(L"UPDATE myTable1 SET column2 = ‘Converted Data’ WHERE column2 = ‘Initial Data’");

r = database.ExecuteSql(sql3, true);
database.CommitTransaction();</pre>
<p><strong>e. Xóa dữ liệu đã tồn tại</strong></p>
<pre>database.BeginTransaction();

sql2.Append(L"DELETE FROM myTable1 WHERE column0 = 1&amp;");

r = database.ExecuteSql(sql2, true);

database.CommitTransaction();</pre>
<p><strong>f. Đóng và xóa cơ sở dữ liệu</strong></p>
<pre>delete pEnum;
r = Database::Delete(dbName);</pre>
<p>Với những thao tác cơ bản nêu trên, bạn đọc đã có thể sử dụng tốt cơ sở dữ liệu riêng cho từng ứng dụng của mình rôi.</p>
<p>Chúc bạn thành công!</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/badavn.wordpress.com/371/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/badavn.wordpress.com/371/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/badavn.wordpress.com/371/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/badavn.wordpress.com/371/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/badavn.wordpress.com/371/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/badavn.wordpress.com/371/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/badavn.wordpress.com/371/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/badavn.wordpress.com/371/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/badavn.wordpress.com/371/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/badavn.wordpress.com/371/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/badavn.wordpress.com/371/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/badavn.wordpress.com/371/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/badavn.wordpress.com/371/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/badavn.wordpress.com/371/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=badavn.wordpress.com&amp;blog=12794397&amp;post=371&amp;subd=badavn&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://badavn.wordpress.com/2010/07/30/database-tutorial/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/62fb63a5e94c0acaa9220db621441aaf?s=96&#38;d=wavatar&#38;r=G" medium="image">
			<media:title type="html">kthangvd</media:title>
		</media:content>
	</item>
		<item>
		<title>ContentTransfer &#8211; Http download</title>
		<link>http://badavn.wordpress.com/2010/07/29/contenttransfer-http-download/</link>
		<comments>http://badavn.wordpress.com/2010/07/29/contenttransfer-http-download/#comments</comments>
		<pubDate>Thu, 29 Jul 2010 14:21:53 +0000</pubDate>
		<dc:creator>kthangvd</dc:creator>
				<category><![CDATA[Hướng dẫn]]></category>
		<category><![CDATA[ContentTransfer]]></category>
		<category><![CDATA[download]]></category>
		<category><![CDATA[http]]></category>

		<guid isPermaLink="false">http://badavn.wordpress.com/?p=361</guid>
		<description><![CDATA[Bài viết này, chúng tôi muốn giới thiệu đến bạn đọc cách để tải về (download) một tập tin trên internet thông qua giao thức HTTP. Bằng việc sử dụng phương thức GET (request &#8211; response), ứng dụng của bạn có thể tải về nội dung của một tập tin sẵn có trên internet. ví [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=badavn.wordpress.com&amp;blog=12794397&amp;post=361&amp;subd=badavn&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Bài viết này, chúng tôi muốn giới thiệu đến bạn đọc cách để tải về (download) một tập tin trên internet thông qua giao thức HTTP.</p>
<p><span id="more-361"></span>Bằng việc sử dụng phương thức GET (request &#8211; response), ứng dụng của bạn có thể tải về nội dung của một tập tin sẵn có trên internet.</p>
<p><em>ví dụ:</em></p>
<p>Chúng tôi có một tập tin trên internet với đường dẫn là &#8220;base_url&#8221;. Bây giờ chúng tôi có nhu cầu tải tập tin đó về điện thoại di động và lưu nó vào nơi có đường dẫn là &#8220;downloadPath&#8221;.</p>
<p>Chúng tôi xây dựng hàm cơ bản như sau:</p>
<pre>result
BaseContent::RequestDownload(String downloadPath, String base_url)
{
	RequestId requestId;
	Uri contentUri;
	contentUri.SetUri(base_url);

	result r = contentTransfer.Download(contentUri, 0, downloadPath, true, requestId);
}
</pre>
<p>Khi download đã hoàn tất thì sự kiện <strong>OnContentDownloadCompleted </strong>sẽ được phát sinh. Khi đó, ứng dụng của đã có đủ dữ liệu cần thiết và tiếp tục hoạt động.</p>
<pre>void
BaseContent::OnContentDownloadCompleted(RequestId requestId, ContentId contentId, result transferResult, const String&amp; errorCode, const String&amp; errorMessage)
{
        // TODO: add your code here
	// ProcessingData();
}
</pre>
<p>Bạn phải chọn đường dẫn cụ thể để lưu trữ tập tin download chẳn hạn như:</p>
<pre>/Media/Images/
/Media/Sounds/
/Media/Videos/
/Media/Themes/
/Media/Others/
/Storagecard/Media/Images/
/Storagecard/Media/Sounds/
/Storagecard/Media/Videos/
/Storagecard/Media/Themes/
/Storagecard/Media/Others/
</pre>
<p>Tùy thuộc vào thư mục mà sẽ có các permissions khác nhau. Có thư mục chỉ đọc (read-only) hay thư mục cho phép đọc &#8211; ghi (read &#8211; write).</p>
<p><em>Chú ý</em>:</p>
<p>- Để sử dụng được lớp ContentTransfer thì bạn phải khai báo thư viện &#8220;FContent&#8221; với trình biên dịch.</p>
<p>- Khai báo Privilege trong tập tin manifest.xml</p>
<pre>&lt;Privilege&gt;
      &lt;Name&gt;CONTENT_TRANSFER&lt;/Name&gt;
&lt;/Privilege&gt;
</pre>
<p>Chúc bạn thành công!</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/badavn.wordpress.com/361/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/badavn.wordpress.com/361/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/badavn.wordpress.com/361/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/badavn.wordpress.com/361/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/badavn.wordpress.com/361/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/badavn.wordpress.com/361/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/badavn.wordpress.com/361/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/badavn.wordpress.com/361/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/badavn.wordpress.com/361/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/badavn.wordpress.com/361/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/badavn.wordpress.com/361/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/badavn.wordpress.com/361/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/badavn.wordpress.com/361/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/badavn.wordpress.com/361/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=badavn.wordpress.com&amp;blog=12794397&amp;post=361&amp;subd=badavn&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://badavn.wordpress.com/2010/07/29/contenttransfer-http-download/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/62fb63a5e94c0acaa9220db621441aaf?s=96&#38;d=wavatar&#38;r=G" medium="image">
			<media:title type="html">kthangvd</media:title>
		</media:content>
	</item>
		<item>
		<title>DateTimePicker Example</title>
		<link>http://badavn.wordpress.com/2010/07/03/datetimepicker-example/</link>
		<comments>http://badavn.wordpress.com/2010/07/03/datetimepicker-example/#comments</comments>
		<pubDate>Sat, 03 Jul 2010 14:46:15 +0000</pubDate>
		<dc:creator>kthangvd</dc:creator>
				<category><![CDATA[Hướng dẫn]]></category>
		<category><![CDATA[Date]]></category>
		<category><![CDATA[DatePicker]]></category>
		<category><![CDATA[DateTimePicker]]></category>
		<category><![CDATA[Time]]></category>
		<category><![CDATA[TimePicker]]></category>

		<guid isPermaLink="false">http://badavn.wordpress.com/?p=351</guid>
		<description><![CDATA[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 [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=badavn.wordpress.com&amp;blog=12794397&amp;post=351&amp;subd=badavn&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>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.</p>
<p><span id="more-351"></span>Ở 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.</p>
<p>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.</p>
<p>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 &#8220;Save&#8221; trên điều khiển DateTimePicker.</p>
<p><strong>Ví dụ:</strong></p>
<p><a href="http://badavn.files.wordpress.com/2010/07/datetimepicker01.png"><img class="aligncenter size-full wp-image-352" title="datetimepicker01" src="http://badavn.files.wordpress.com/2010/07/datetimepicker01.png?w=640" alt=""   /></a></p>
<p>Hiển thị kết quả khi click vào nút &#8220;Save&#8221;:</p>
<p><a href="http://badavn.files.wordpress.com/2010/07/datetimepicker02.png"><img class="aligncenter size-full wp-image-353" title="datetimepicker02" src="http://badavn.files.wordpress.com/2010/07/datetimepicker02.png?w=640" alt=""   /></a></p>
<p>Để làm được như vậy, bạn tạo tập tin &#8220;<em><strong>DateTimePickerForm.h</strong></em>&#8221; với nội dung như sau:</p>
<pre>/*
 * DateTimePickerForm.h
 *
 *  Created on: Jul 3, 2010
 *      Author: AWK
 */

#ifndef DATETIMEPICKERFORM_H_
#define DATETIMEPICKERFORM_H_

#include &lt;FUi.h&gt;
#include &lt;FLocales.h&gt;

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&amp; source, int year, int month, int day, int hour, int minute);
    virtual void OnDateTimeChangeCanceled(const Osp::Ui::Control&amp; source);

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

#endif /* DATETIMEPICKERFORM_H_ */
</pre>
<p><strong>Trong đó:</strong></p>
<p>- Form của bạn phải được kế thừa từ giao diện &#8220;<em><strong>IDateTimeChangeEventListener</strong></em>&#8221; để có thể lắng nghe các sự kiện trả về từ điều khiển DateTimePicker</p>
<p>Tiếp đến, bạn tạo tập tin &#8220;<em><strong>DateTimePickerForm.cpp</strong></em>&#8221; với nội dung cài đặt như sau:</p>
<pre>/*
 * 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-&gt;Construct(L"DateTimePicker");
    // Add a DateTimeChangeEvent listener.
    __pDateTimePicker-&gt;AddDateTimeChangeEventListener(*this);
    // Show the DateTimePicker
    __pDateTimePicker-&gt;Show();

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

    return r;
}

void
DateTimePickerForm::OnDateTimeChanged(const Osp::Ui::Control&amp; 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-&gt;GetDateTime();
	pDateTimeFormatter-&gt;Format(datetime, formattedString);
	__pLabel-&gt;SetText(formattedString);
	__pLabel-&gt;Draw();
}

void
DateTimePickerForm::OnDateTimeChangeCanceled(const Osp::Ui::Control&amp; source)
{
	AppLog("Canceled.\n");
}
</pre>
<p><strong>Trong đó</strong>:</p>
<p><em><strong>- DateTimePicker()</strong></em>: để tạo một thể hiện của lớp DateTimePicker</p>
<p><em><strong>- AddDateTimeChangeEventListener()</strong></em>: đăng ký nhận sự kiển trả về của điều khiển DateTimePicker cho form.</p>
<p><em><strong>- Show()</strong></em>: để hiển thị điều khiển DateTimePicker</p>
<p><em><strong>- GetDateTime()</strong></em>: để lấy giá trị ngày/tháng/năm, giờ/phút trên điều khiển DateTimePicker</p>
<p><em><strong>- CreateDateTimeFormatterN()</strong></em>: để định dạng giá trị lấy được trên điều khiển.</p>
<p><strong>Chú ý:</strong></p>
<p>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 <em><strong>Project &gt; Properties &gt; C/C++ Build  &gt;  Setting &gt; Tool Settings &gt; bada C++ Linker &gt; Libraries </strong></em></p>
<p><em><strong><a href="http://badavn.files.wordpress.com/2010/06/timepicker03.png"><img class="aligncenter size-full wp-image-336" title="timepicker03" src="http://badavn.files.wordpress.com/2010/06/timepicker03.png?w=640&#038;h=175" alt="" width="640" height="175" /></a><br />
</strong></em></p>
<p>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 &#8220;DatePicker Example&#8221;. Bạn đọc hãy đọc nó để biết thêm nhé!.</p>
<p>Giờ thì bạn có thể xem kết quả của mình rồi đó!.</p>
<p>Chúc bạn thành công!</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/badavn.wordpress.com/351/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/badavn.wordpress.com/351/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/badavn.wordpress.com/351/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/badavn.wordpress.com/351/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/badavn.wordpress.com/351/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/badavn.wordpress.com/351/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/badavn.wordpress.com/351/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/badavn.wordpress.com/351/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/badavn.wordpress.com/351/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/badavn.wordpress.com/351/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/badavn.wordpress.com/351/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/badavn.wordpress.com/351/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/badavn.wordpress.com/351/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/badavn.wordpress.com/351/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=badavn.wordpress.com&amp;blog=12794397&amp;post=351&amp;subd=badavn&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://badavn.wordpress.com/2010/07/03/datetimepicker-example/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/62fb63a5e94c0acaa9220db621441aaf?s=96&#38;d=wavatar&#38;r=G" medium="image">
			<media:title type="html">kthangvd</media:title>
		</media:content>

		<media:content url="http://badavn.files.wordpress.com/2010/07/datetimepicker01.png" medium="image">
			<media:title type="html">datetimepicker01</media:title>
		</media:content>

		<media:content url="http://badavn.files.wordpress.com/2010/07/datetimepicker02.png" medium="image">
			<media:title type="html">datetimepicker02</media:title>
		</media:content>

		<media:content url="http://badavn.files.wordpress.com/2010/06/timepicker03.png" medium="image">
			<media:title type="html">timepicker03</media:title>
		</media:content>
	</item>
		<item>
		<title>DatePicker Example</title>
		<link>http://badavn.wordpress.com/2010/06/27/datepicker-example/</link>
		<comments>http://badavn.wordpress.com/2010/06/27/datepicker-example/#comments</comments>
		<pubDate>Sun, 27 Jun 2010 04:49:38 +0000</pubDate>
		<dc:creator>kthangvd</dc:creator>
				<category><![CDATA[Hướng dẫn]]></category>
		<category><![CDATA[Date]]></category>
		<category><![CDATA[DatePicker]]></category>

		<guid isPermaLink="false">http://badavn.wordpress.com/?p=344</guid>
		<description><![CDATA[Ở bài viết trước đó, chúng tôi đã có dịp giới thiệu đến bạn đọc điều khiển TimePicker trên form của bada. Tại bài viết này, chúng tôi sẽ đề cập đến cùng bạn đọc một điều khiển tương tự để lấy ngày/tháng/năm từ người sử dụng. Đó là điều khiển DatePicker của bada form. [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=badavn.wordpress.com&amp;blog=12794397&amp;post=344&amp;subd=badavn&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Ở bài viết trước đó, chúng tôi đã có dịp giới thiệu đến bạn đọc điều khiển TimePicker trên form của bada. Tại bài viết này, chúng tôi sẽ đề cập đến cùng bạn đọc một điều khiển tương tự để lấy ngày/tháng/năm từ người sử dụng. Đó là điều khiển DatePicker của bada form.</p>
<p><span id="more-344"></span>Khi điều khiển DatePicker được chọn thì toàn bộ màn hình được lấp đầy bởi phần trên là phần hiển thị ngày/tháng/năm hiện tại đang được sử dụng. Phần còn lại bên dưới là phần hiển thị các chữ số hoặc tên các tháng để người sử dụng có thẻ touch chọn những thay đổi về ngày/tháng/năm.</p>
<p>Phần hiển thị ngày/tháng/năm được chia làm 3 phần: ngày (1 &#8211; 28 hoặc 29 hoặc 30 hoặc 31 tùy vào tháng lựa chọn), tháng (01 &#8211; 12) và năm (hiển thị theo định dạng YYYY)</p>
<p>Việc hiển thị ngày/tháng/năm của điều khiển  sẽ phụ thuộc vào cấu hình hệ thống của bạn. Chẳn hạn như, nếu hệ thống của bạn thiết lập định dạng ngày tháng: dd/mm/yyyy thì khi hiện thị lên màn hình, vị trí của 3 phần nói trên sẽ được sắp xếp theo dạng ngày/tháng/năm.</p>
<p>Ngược lại nếu thiết lập ngày tháng: mm/dd/yyy thì khi hiển thị lên màn hình, vị trí của 3 phần nói trên sẽ được sắp xếp theo dạng tháng/ngày/năm.</p>
<p>Để hiểu rõ hơn, bạn cùng chúng tôi thực hành ví dụ về DatePicker:</p>
<p><strong>Dự án mẫu bao gồm</strong>:</p>
<p>- Một điều khiển DatePicker để lấy ngày tháng từ người sử dụng.</p>
<p>- Một nhãn (label) để hiển thị kết quả ngày tháng năm khi người sử dụng chọn xong ngày tháng và nhấn vào nút &#8220;Save&#8221;</p>
<p><strong>Ví dụ</strong>:</p>
<p><a href="http://badavn.files.wordpress.com/2010/06/datepicker01.png"><img class="aligncenter size-full wp-image-345" title="datepicker01" src="http://badavn.files.wordpress.com/2010/06/datepicker01.png?w=640" alt=""   /></a></p>
<p>Giao diện khi chọn thay đổi tháng:</p>
<p><a href="http://badavn.files.wordpress.com/2010/06/datepicker02.png"><img class="aligncenter size-full wp-image-346" title="datepicker02" src="http://badavn.files.wordpress.com/2010/06/datepicker02.png?w=640" alt=""   /></a></p>
<p>Chọn xong, nếu nhấn vào nút &#8220;Save&#8221; sẽ hiển thị kết quả:</p>
<p><a href="http://badavn.files.wordpress.com/2010/06/datepicker03.png"><img class="aligncenter size-full wp-image-347" title="datepicker03" src="http://badavn.files.wordpress.com/2010/06/datepicker03.png?w=640" alt=""   /></a></p>
<p>Để làm được như vậy, bạn tạo tập tin &#8220;<em><strong>DatePickerForm.h</strong></em>&#8221; với nội dung cơ bản như sau:</p>
<pre>/*
 * DatePickerForm.h
 *
 *  Created on: Jun 27, 2010
 *      Author: AWK
 */

#ifndef DATEPICKERFORM_H_
#define DATEPICKERFORM_H_

#include &lt;FUi.h&gt;
#include &lt;FLocales.h&gt;

class DatePickerForm :
    public Osp::Ui::Controls::Form,
    public Osp::Ui::IDateChangeEventListener
{
public:
    DatePickerForm(void){}
    ~DatePickerForm(void){}
    bool Initialize(void);

public:
    virtual result OnInitializing(void);
    virtual void OnDateChanged(const Osp::Ui::Control&amp; source, int year, int month, int day);
    virtual void OnDateChangeCanceled(const Osp::Ui::Control&amp; source);

private:
    Osp::Ui::Controls::DatePicker* __pDatePicker;
    Osp::Ui::Controls::Label* __pLabel;
};

#endif /* DATEPICKERFORM_H_ */
</pre>
<p>Trong đó, form của bạn phải được kế thừa từ lớp<em><strong> IDateChangeEventListener</strong></em> để lắng nghe được sự kiện trả về của điều khiển DatePicker.</p>
<p>Tiếp đến bạn tạo tập tin &#8220;<em><strong>DatePickerForm.cpp</strong></em>&#8221; với nội dung code cài đặt như sau:</p>
<pre>/*
 * DataPickerForm.cpp
 *
 *  Created on: Jun 27, 2010
 *      Author: AWK
 */

#include "DatePickerForm.h"

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

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

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

    // Create a DatePicker
    __pDatePicker = new DatePicker();
    __pDatePicker-&gt;Construct(L"Get Date");
    // Add a DateChangeEvent listener
    __pDatePicker-&gt;AddDateChangeEventListener(*this);
    // Show the DatePicker
    __pDatePicker-&gt;Show();

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

    return r;
}

void
DatePickerForm::OnDateChanged(const Osp::Ui::Control&amp; source, int year, int month, int day)
{
	DateTime date;
	String formattedString;
	DateTimeFormatter* pDateFormatter = null;
	Locale locale(LANGUAGE_ENG, COUNTRY_GB);

	pDateFormatter = DateTimeFormatter::CreateDateFormatterN(
			locale,
			DATE_TIME_STYLE_DEFAULT);
	date = __pDatePicker-&gt;GetDate();
	pDateFormatter-&gt;Format(date, formattedString);
	__pLabel-&gt;SetText(formattedString);
	__pLabel-&gt;Draw();
}

void
DatePickerForm::OnDateChangeCanceled(const Osp::Ui::Control&amp; source)
{
	AppLog("Canceled.\n");
}
</pre>
<p><strong>Trong đó</strong>:</p>
<p><em><strong>- DatePicker(</strong></em>) để tạo một thể hiện của lớp DatePicker</p>
<p><em><strong>- AddDateChangeEventListener()</strong></em> để đăng ký lắng nghe sự kiện thay đổi về ngày tháng từ người sử dụng</p>
<p><em><strong>- Show()</strong></em> để hiển thị điều khiển DatePicker</p>
<p><em><strong>- GetDate() </strong></em>để lấy giá trị ngày/tháng/năm hiện tại của điều khiển DatePicker</p>
<p>Bạn cần phải khai báo sử dung thư viện &#8220;FLocales&#8221; với trình biên dịch bằng cách: chọn vào <em><strong>Project &gt; Properties &gt; C/C++ Build &gt;  Setting &gt; Tool Settings &gt; bada C++ Linker &gt; Libraries </strong></em></p>
<p style="text-align:center;"><a href="http://badavn.files.wordpress.com/2010/06/timepicker03.png"><img class="aligncenter" title="timepicker03" src="http://badavn.files.wordpress.com/2010/06/timepicker03.png?w=640&#038;h=175&#038;h=175" alt="" width="640" height="175" /></a></p>
<p><strong>Chú ý</strong>:</p>
<p>Bạn có thể sử dụng các phương thức: <em><strong>SetDay()</strong></em>, <em><strong>SetMonth()</strong></em>, <em><strong>SetYear()</strong></em> đã được cài đặt sẵn trong điều khiển DatePicker để thay đổi ngày tháng năm cho điều khiển. Nhưng bạn phải thận trọng khi lựa chọn ưu tiên khi thiết lập ngày trước hay tháng trước.</p>
<p>Chẳn hạn như: nếu bạn ưu tiên thiết lập ngày trước: 30/Jan/2010. Sau đó, bạn thiết lập lại tháng 2 (Feb). Lúc đó, điều khiển sẽ sinh ra một biệt lệ để cảnh báo rằng: Ngày tháng vừa thiết lập không hợp lệ, bởi tháng 2 của năm 2010 không có ngày thứ 30.</p>
<p>Nếu bạn chọn các thay đổi trên bằng điều khiển DatePicker thì điều khiển sẽ tự động rollback lại ngày thứ 28 nếu bạn quyết định chọn vào tháng 2 (Feb)</p>
<p>Giờ thị bạn có thể xem kết quả của mình trong những phút vừa rồi.</p>
<p>Chúc bạn thành công!</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/badavn.wordpress.com/344/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/badavn.wordpress.com/344/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/badavn.wordpress.com/344/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/badavn.wordpress.com/344/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/badavn.wordpress.com/344/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/badavn.wordpress.com/344/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/badavn.wordpress.com/344/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/badavn.wordpress.com/344/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/badavn.wordpress.com/344/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/badavn.wordpress.com/344/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/badavn.wordpress.com/344/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/badavn.wordpress.com/344/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/badavn.wordpress.com/344/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/badavn.wordpress.com/344/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=badavn.wordpress.com&amp;blog=12794397&amp;post=344&amp;subd=badavn&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://badavn.wordpress.com/2010/06/27/datepicker-example/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/62fb63a5e94c0acaa9220db621441aaf?s=96&#38;d=wavatar&#38;r=G" medium="image">
			<media:title type="html">kthangvd</media:title>
		</media:content>

		<media:content url="http://badavn.files.wordpress.com/2010/06/datepicker01.png" medium="image">
			<media:title type="html">datepicker01</media:title>
		</media:content>

		<media:content url="http://badavn.files.wordpress.com/2010/06/datepicker02.png" medium="image">
			<media:title type="html">datepicker02</media:title>
		</media:content>

		<media:content url="http://badavn.files.wordpress.com/2010/06/datepicker03.png" medium="image">
			<media:title type="html">datepicker03</media:title>
		</media:content>

		<media:content url="http://badavn.files.wordpress.com/2010/06/timepicker03.png?w=640&#38;h=175" medium="image">
			<media:title type="html">timepicker03</media:title>
		</media:content>
	</item>
		<item>
		<title>TimePicker Example</title>
		<link>http://badavn.wordpress.com/2010/06/27/timepicker-example/</link>
		<comments>http://badavn.wordpress.com/2010/06/27/timepicker-example/#comments</comments>
		<pubDate>Sat, 26 Jun 2010 17:06:12 +0000</pubDate>
		<dc:creator>kthangvd</dc:creator>
				<category><![CDATA[Hướng dẫn]]></category>
		<category><![CDATA[Time]]></category>
		<category><![CDATA[TimePicker]]></category>

		<guid isPermaLink="false">http://badavn.wordpress.com/?p=333</guid>
		<description><![CDATA[Bài viết này, chúng tôi muốn giới thiệu đến bạn đọc cách sử dụng điều khiển TimePicker của bada form. Điều khiển TimePicker được sử dụng để set/get thời gian từ  người sử dụng. Vùng hiển thị của điều khiển TimePicker được chia làm 3 phần: giờ (1 &#8211; 12), phút (00-12) và AM hoặc [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=badavn.wordpress.com&amp;blog=12794397&amp;post=333&amp;subd=badavn&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Bài viết này, chúng tôi muốn giới thiệu đến bạn đọc cách sử dụng điều khiển TimePicker của bada form. Điều khiển TimePicker được sử dụng để set/get thời gian từ  người sử dụng. Vùng hiển thị của điều khiển TimePicker được chia làm 3 phần: giờ (1 &#8211; 12), phút (00-12) và AM hoặc PM. Nếu bạn thiết lập thời gian theo định dạng 24 giờ thì phần thứ 3 (AM or PM) sẽ được tự động mất đi (không hiển thị nữa).</p>
<p><span id="more-333"></span>Khi TimePicker được lựa chọn thì toàn bộ màn hình được lấp đầy bởi phần trên là phần hiện thị thời gian hiện tại  đang được lựa chọn. Phần còn lại bên dưới là dãy các chữ số để người sử dụng có thể touch chọn những thay đổi về thời gian. Thêm vào đó là 2 buttons cho phép bạn chấp nhận sự thay đổi trên điều khiển TimePicker hoặc ngược lại.</p>
<p>Nếu bạn đồng ý với sự thay đổi mới bạn nhấn nút &#8220;<em><strong>Save</strong></em>&#8220;. Nếu không muốn, bạn có thể nhấn vào nút &#8220;<em><strong>Cancel</strong></em>&#8221; để hủy những thay đổi của bạn.</p>
<p>Để hiểu rõ hơn, bạn cùng chúng tôi thực hành ví dụ sau về TimePicker:</p>
<p>Dự án mẫu bao gồm một nhãn (label) để hiển thị thời gian mà sau khi bạn nhấn nút &#8220;Save&#8221; trên điều khiển TimePicker. Tiếp đến là gắn vào một điều khiển TimePicker để người sử dụng thay đổi thời gian tùy thích.</p>
<p><strong>Ví dụ</strong>:</p>
<p><a href="http://badavn.files.wordpress.com/2010/06/timepicker01.png"><img class="aligncenter size-full wp-image-334" title="timepicker01" src="http://badavn.files.wordpress.com/2010/06/timepicker01.png?w=640" alt=""   /></a></p>
<p>Sau khi thay đổi xong, nếu bấm vào nút &#8220;Save&#8221;:</p>
<p><a href="http://badavn.files.wordpress.com/2010/06/timepicker02.png"><img class="aligncenter size-full wp-image-335" title="timepicker02" src="http://badavn.files.wordpress.com/2010/06/timepicker02.png?w=640" alt=""   /></a></p>
<p>Để làm được như vậy bạn tao tập tin &#8220;TimePickerForm.h&#8221; với nội dung như sau:</p>
<pre>/*
 * TimePickerForm.h
 *
 *  Created on: Jun 26, 2010
 *      Author: AWK
 */

#ifndef TIMEPICKERFORM_H_
#define TIMEPICKERFORM_H_

#include &lt;FUi.h&gt;
#include &lt;FLocales.h&gt;

class TimePickerForm:
    public Osp::Ui::Controls::Form,
    public Osp::Ui::ITimeChangeEventListener
{
public:
    TimePickerForm(void){}
    ~TimePickerForm(void){}
    bool Initialize(void);
    virtual result OnInitializing(void);
    virtual void OnTimeChanged(const Osp::Ui::Control&amp; source, int hour, int minute);
    virtual void OnTimeChangeCanceled(const Osp::Ui::Control&amp; source);

private:
    Osp::Ui::Controls::TimePicker* __pTimePicker;
    Osp::Ui::Controls::Label* __pLabel;
};

#endif /* TIMEPICKERFORM_H_ */</pre>
<p>Trong đó, bạn chú ý đến việc kế thừa từ &#8220;<em><strong>ITimeChangeEventListener</strong></em>&#8221; để form của bạn có thể lắng nghe sự kiện từ điều khiển TimePicker.</p>
<p>Tiếp đến bạn tạo tập tin &#8220;TimePickerForm.cpp&#8221; với nội dung cài đặt như sau:</p>
<pre>/*
 * TimePickerForm.cpp
 *
 *  Created on: Jun 26, 2010
 *      Author: AWK
 */
#include "TimePickerForm.h"

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

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

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

    // Create a TimePicker.
    __pTimePicker = new TimePicker();
    __pTimePicker-&gt;Construct(L"Get Time");
    // Add a TimeChangeEvent listener.
    __pTimePicker-&gt;AddTimeChangeEventListener(*this);
    // Show the TimePicker
    __pTimePicker-&gt;Show();

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

    return r;
}

void
TimePickerForm::OnTimeChanged(const Osp::Ui::Control&amp; source, int hour, int minute)
{
	DateTime time;
	String formattedString;
	DateTimeFormatter* pTimeFormatter = null;
	Locale locale(LANGUAGE_ENG, COUNTRY_GB);

	pTimeFormatter = DateTimeFormatter::CreateTimeFormatterN(
             locale,
             DATE_TIME_STYLE_DEFAULT);
	time = __pTimePicker-&gt;GetTime();
	pTimeFormatter-&gt;Format(time, formattedString);
	__pLabel-&gt;SetText(formattedString);
	__pLabel-&gt;Draw();
}

void
TimePickerForm::OnTimeChangeCanceled(const Osp::Ui::Control&amp; source)
{
	AppLog("Canceled.\n");
}</pre>
<p><strong>Trong đó</strong>:</p>
<p>- <em><strong>TimePicker()</strong> </em>để tạo một thể hiện của lớp TimePicker</p>
<p>- <em><strong>AddTimeChangeEventListener()</strong></em> để đăng ký hàm gọi trở lại (callback function)  khi người dùng chọn &#8220;Save&#8221; hoặc  &#8220;Cancel&#8221;</p>
<p>- <em><strong>Show()</strong> </em>để hiển thị điều khiển TimePicker</p>
<p>- <em><strong>GetTime()</strong></em> để lấy giá trị thời gian hiện tại của TimePicker</p>
<p>Bài viết này, chúng tôi có sử dụng đến &#8220;<em><strong>Locale</strong></em>&#8221; để xác định ngôn ngữ (language), quốc gia (contry) và định dạng thời gian đặc trưng riêng dựa vào một locale.</p>
<p>Để ứng dụng của bạn có thể thực thi được bạn phải khai báo thêm thư việc &#8220;<em><strong>FLocales</strong></em>&#8221; cho trình biên dịch bằng cách: chọn vào <em><strong>Project &gt; Properties &gt; C/C++ Build &gt; Setting &gt; Tool Settings &gt; bada C++ Linker &gt; Libraries </strong></em></p>
<p><a href="http://badavn.files.wordpress.com/2010/06/timepicker03.png"><img class="aligncenter size-full wp-image-336" title="timepicker03" src="http://badavn.files.wordpress.com/2010/06/timepicker03.png?w=640&#038;h=175" alt="" width="640" height="175" /></a></p>
<p>Giờ thì bạn có thể xem thành quả của mình rồi đó!</p>
<p>Chúc bạn thành công!</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/badavn.wordpress.com/333/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/badavn.wordpress.com/333/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/badavn.wordpress.com/333/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/badavn.wordpress.com/333/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/badavn.wordpress.com/333/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/badavn.wordpress.com/333/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/badavn.wordpress.com/333/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/badavn.wordpress.com/333/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/badavn.wordpress.com/333/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/badavn.wordpress.com/333/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/badavn.wordpress.com/333/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/badavn.wordpress.com/333/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/badavn.wordpress.com/333/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/badavn.wordpress.com/333/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=badavn.wordpress.com&amp;blog=12794397&amp;post=333&amp;subd=badavn&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://badavn.wordpress.com/2010/06/27/timepicker-example/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/62fb63a5e94c0acaa9220db621441aaf?s=96&#38;d=wavatar&#38;r=G" medium="image">
			<media:title type="html">kthangvd</media:title>
		</media:content>

		<media:content url="http://badavn.files.wordpress.com/2010/06/timepicker01.png" medium="image">
			<media:title type="html">timepicker01</media:title>
		</media:content>

		<media:content url="http://badavn.files.wordpress.com/2010/06/timepicker02.png" medium="image">
			<media:title type="html">timepicker02</media:title>
		</media:content>

		<media:content url="http://badavn.files.wordpress.com/2010/06/timepicker03.png" medium="image">
			<media:title type="html">timepicker03</media:title>
		</media:content>
	</item>
		<item>
		<title>Popup Example</title>
		<link>http://badavn.wordpress.com/2010/06/22/popup-example/</link>
		<comments>http://badavn.wordpress.com/2010/06/22/popup-example/#comments</comments>
		<pubDate>Tue, 22 Jun 2010 15:23:40 +0000</pubDate>
		<dc:creator>kthangvd</dc:creator>
				<category><![CDATA[Ứng dụng]]></category>
		<category><![CDATA[popup]]></category>

		<guid isPermaLink="false">http://badavn.wordpress.com/?p=328</guid>
		<description><![CDATA[Ở bài viết này, chúng tôi muốn đề cập đến bạn đọc làm thế nào để hiển thị một cửa sổ nổi trên ứng dụng của bạn. Trước đó, chúng tôi đã từng giới thiệu về MessageBox, một hộp thoại với các kiểu hiển thị quy định sẵn của bada. Giờ đây, bạn có thể [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=badavn.wordpress.com&amp;blog=12794397&amp;post=328&amp;subd=badavn&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Ở bài viết này, chúng tôi muốn đề cập đến bạn đọc làm thế nào để hiển thị một cửa sổ nổi trên ứng dụng của bạn. Trước đó, chúng tôi đã từng giới thiệu về MessageBox, một hộp thoại với các kiểu hiển thị quy định sẵn của bada. Giờ đây, bạn có thể tự định nghĩa cho riêng mình một hộp thoại tùy ý muốn nhờ vào điều khiển popup.</p>
<p><span id="more-328"></span>Popup có thể chứa đựng các điều khiển khác như: các nút nhấn (buttons), các nhãn (labels),&#8230; Popup luôn được hiển thị cao nhất và ở vị trí trung tâm của màn hình (modal).</p>
<p>Popup sử dụng phương thức<strong> Show() </strong>để hiển thị nó và các điều khiển con bên trong nó.</p>
<p>Tuy nhiên, popup không thể chứa các điều khiển như: Frames, MessageBoxs, Forms, OverlayPanels trong một popup.</p>
<p>Bạn sẽ nghi vấn giữa Popup và MessageBox, chúng có khác gì nhau không? có thể sử dụng MessageBox để thay thế cho Popup không? hoặc sử dụng ngược lại?</p>
<p>Thật sự là không! những ưu điểm của Popup mà chúng tôi đề cập trên chi là bề mặt bên trên mà thôi. Xét về bản chất bên dưới khi ứng dụng thực thi thì MessageBox và Popup hoàn toàn khác nhau:</p>
<p>- MessageBox luôn thể hiện tính đồng bộ (synchronous). Nghĩa là khi hộp thoại bật lên thì nó sẽ khóa tiểu trình  (thread) hiện tại cho đến khi nào hộp thoại đó tắt đi.  Với tính chất này mà MessageBox sẽ được sử dụng trong các trường hợp request &#8211; confirm</p>
<p>- Popup thể hiện tính không đồng bộ (asynchronous). Nghĩa là khi popup bật lên thì tiến trình của ứng dụng vẫn tiếp tục hoạt động.</p>
<p>Bạn phải chú ý rằng, nếu bạn muốn ẩn (hide) popup thì bạn phải gọi đến phương thức <strong>SetShowState(false)</strong> và <strong>Show()</strong></p>
<p>Bỏ qua các lý thuyết trên, để dễ dàng hiểu về popup thì chúng ta cùng nhau thực hành một ví dụ cụ thể về popup như sau:</p>
<p>- Ứng dụng sẽ chứa một button:<strong> Open Popup</strong> &#8211; khi click vào nút nhấn này thì một popup sẽ được bật lên. Bên trên popup sẽ chứa một button: <strong>Close Popup</strong> &#8211; khi click vào nút nhấn này thì popup sẽ bị đóng lại.</p>
<p>Ví dụ:</p>
<p><a href="http://badavn.files.wordpress.com/2010/06/popupexample01.png"><img class="aligncenter size-full wp-image-329" title="popupexample01" src="http://badavn.files.wordpress.com/2010/06/popupexample01.png?w=640" alt=""   /></a></p>
<p>Khi click vào nút nhấn:</p>
<p><a href="http://badavn.files.wordpress.com/2010/06/popupexample02.png"><img class="aligncenter size-full wp-image-330" title="popupexample02" src="http://badavn.files.wordpress.com/2010/06/popupexample02.png?w=640" alt=""   /></a></p>
<p>Bạn tạo ra tập tin &#8220;PopupExampleForm.h&#8221; với nội dung như sau:</p>
<pre>/*
 * PopupExampleForm.h
 *
 *  Created on: Jun 22, 2010
 *      Author: AWK
 */

#ifndef POPUPEXAMPLEFORM_H_
#define POPUPEXAMPLEFORM_H_

#include &lt;FUi.h&gt;

class PopupExampleForm :
    public Osp::Ui::Controls::Form,
    public Osp::Ui::IActionEventListener
{
public:
    PopupExampleForm(void);
    bool Initialize(void);
    void ShowPopup(void);
    void HidePopup(void);

protected:
    static const int ID_BUTTON_OPEN_POPUP 	= 101;
    static const int ID_BUTTON_CLOSE_POPUP 	= 102;

private:
    Osp::Ui::Controls::Popup* __pPopup;

public:
    virtual result OnInitializing(void);
    virtual result OnTerminating(void);
    virtual void OnActionPerformed(const Osp::Ui::Control&amp; source, int actionId);
};

#endif /* POPUPEXAMPLEFORM_H_ */
</pre>
<p>Tiếp đến, bạn tạo tập tin &#8220;PopupExampleForm.cpp&#8221; với nội dung như sau:</p>
<pre>/*
 * PopupExampleForm.cpp
 *
 *  Created on: Jun 22, 2010
 *      Author: AWK
 */

#include "PopupExampleForm.h"

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

PopupExampleForm::PopupExampleForm(void)
	:__pPopup(null)
{}

bool
PopupExampleForm::Initialize()
{
	result r = E_SUCCESS;
	r = Form::Construct(FORM_STYLE_NORMAL|FORM_STYLE_TITLE);
	SetName(L"PopupExampleForm");
	SetTitleText(L"Popup Example");
	return true;
}

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

    // Create a Popup
    __pPopup = new Popup();
    Dimension dim(300, 400);
    __pPopup-&gt;Construct(true, dim);
    __pPopup-&gt;SetTitleText(L"Popup Example");

    // Create a button to open the Popup.
    Button* pBtnOpen = new Button();
    pBtnOpen-&gt;Construct(Rectangle(125, 300, 250, 60), L"Open Popup");
    pBtnOpen-&gt;SetActionId(ID_BUTTON_OPEN_POPUP);
    pBtnOpen-&gt;AddActionEventListener(*this);
    AddControl(*pBtnOpen);

    // Create a button to close the Popup.
    Button* pBtnClose = new Button();
    pBtnClose-&gt;Construct(Rectangle(65, 210, 250, 60), L"Close Popup");
    pBtnClose-&gt;SetActionId(ID_BUTTON_CLOSE_POPUP);
    pBtnClose-&gt;AddActionEventListener(*this);
    __pPopup-&gt;AddControl(*pBtnClose);

    return r;
}

result
PopupExampleForm::OnTerminating(void)
{
    result r = E_SUCCESS;
    delete __pPopup;
    return r;
}

void
PopupExampleForm::ShowPopup(void)
{
    __pPopup-&gt;SetShowState(true);
    __pPopup-&gt;Show();
}

void
PopupExampleForm::HidePopup(void)
{
    __pPopup-&gt;SetShowState(false);
    Show();
}

void
PopupExampleForm::OnActionPerformed(const Osp::Ui::Control&amp; source, int actionId)
{
    switch(actionId)
    {
    case ID_BUTTON_OPEN_POPUP:
        ShowPopup();
        break;
    case ID_BUTTON_CLOSE_POPUP:
        HidePopup();
        break;
    }
}
</pre>
<p>Giờ thì bạn có thể nhìn thấy được thành quả của mình trong những phút vừa qua rồi!</p>
<p>Chúc bạn thành công! hẹn gặp lại trong bài tiếp theo.</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/badavn.wordpress.com/328/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/badavn.wordpress.com/328/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/badavn.wordpress.com/328/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/badavn.wordpress.com/328/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/badavn.wordpress.com/328/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/badavn.wordpress.com/328/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/badavn.wordpress.com/328/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/badavn.wordpress.com/328/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/badavn.wordpress.com/328/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/badavn.wordpress.com/328/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/badavn.wordpress.com/328/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/badavn.wordpress.com/328/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/badavn.wordpress.com/328/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/badavn.wordpress.com/328/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=badavn.wordpress.com&amp;blog=12794397&amp;post=328&amp;subd=badavn&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://badavn.wordpress.com/2010/06/22/popup-example/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/62fb63a5e94c0acaa9220db621441aaf?s=96&#38;d=wavatar&#38;r=G" medium="image">
			<media:title type="html">kthangvd</media:title>
		</media:content>

		<media:content url="http://badavn.files.wordpress.com/2010/06/popupexample01.png" medium="image">
			<media:title type="html">popupexample01</media:title>
		</media:content>

		<media:content url="http://badavn.files.wordpress.com/2010/06/popupexample02.png" medium="image">
			<media:title type="html">popupexample02</media:title>
		</media:content>
	</item>
		<item>
		<title>Sử dụng Animation với ứng dụng bada</title>
		<link>http://badavn.wordpress.com/2010/06/20/s%e1%bb%ad-d%e1%bb%a5ng-animation-v%e1%bb%9bi-%e1%bb%a9ng-d%e1%bb%a5ng-bada/</link>
		<comments>http://badavn.wordpress.com/2010/06/20/s%e1%bb%ad-d%e1%bb%a5ng-animation-v%e1%bb%9bi-%e1%bb%a9ng-d%e1%bb%a5ng-bada/#comments</comments>
		<pubDate>Sun, 20 Jun 2010 16:31:36 +0000</pubDate>
		<dc:creator>tomlikescience</dc:creator>
				<category><![CDATA[Hướng dẫn]]></category>
		<category><![CDATA[Animation]]></category>
		<category><![CDATA[AnimationFrame]]></category>
		<category><![CDATA[SDK]]></category>

		<guid isPermaLink="false">http://badavn.wordpress.com/?p=310</guid>
		<description><![CDATA[Chào các bạn, hôm nay chúng ta sẽ tiếp tục với một điều khiển mới trong bada, đó là điều khiển Animation. Trong bài viết hôm nay, tôi xin hướng dẫn các bạn cách để đưa một Animation vào trong ứng dụng bada. Rất nhiều ứng dụng mà ở đó bạn sẽ thấy sự xuất [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=badavn.wordpress.com&amp;blog=12794397&amp;post=310&amp;subd=badavn&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Chào các bạn, hôm nay chúng ta sẽ tiếp tục với một điều khiển mới trong bada, đó là điều khiển <strong>Animation</strong>. Trong bài viết hôm nay, tôi xin hướng dẫn các bạn cách để đưa một <strong>Animation </strong>vào trong ứng dụng bada. Rất nhiều ứng dụng mà ở đó bạn sẽ thấy sự xuất hiện của các <strong>Animation</strong>, ví dụ như trong các màn hình chờ, màn hình loading, và các ứng dụng trò chơi.</p>
<p><span id="more-310"></span>Để làm được bài hướng dẫn này thì các bạn nên đọc trước bài viết mà tôi đã hướng dẫn các bạn cách để hiển thị hình ảnh trong bada. Bởi vì sử dụng <strong>Animation </strong>thì bạn phải làm việc với các đối tượng <strong>Bitmap </strong>và <strong>Image</strong>. Do đó bạn cần phải thực hiện một số bước cấu hình cho ứng dụng để có thể sử dụng <strong>Animation</strong>. Chi tiết các bước tôi đã hướng dẫn chi tiết trong bài viết trước.</p>
<p>Lớp <strong>Animation </strong>cho phép bạn hiển thị một chuỗi các khung hình (trong bada gọi là các <strong>AnimationFrame</strong>) một cách tuần tự từng khung hình một. Bạn có thể thiết đặt số lần hiển thị <strong>Animation </strong>thông qua phương thức <strong>SetRepeatCount</strong>.</p>
<p>Một hoạt ảnh trong bada tại mỗi thời điểm sẽ thuộc vào một trong 3 trạng thái sau:</p>
<ul>
<li>ANIMATION_STOPPED</li>
<li>ANIMATION_PAUSE</li>
<li>ANIMATION_PLAYING</li>
</ul>
<p>Bạn có thể kiểm tra trạng thái hiện thời của hoạt ảnh thông qua phương thức<strong> GetStatus()</strong></p>
<p>Nếu ứng dụng muốn biết khi nào thì một hoạt ảnh ngưng trình diễn thì nó phải cài đặt giao diện <strong>IAnimationListener </strong>và đăng báo thông qua phương thức <strong>AddAnimationListener().</strong></p>
<p>Nếu ứng dụng của chúng ta phải cấp phát tài nguyên (các ảnh bitmap) để cấu thành một hoạt ảnh thì bạn phải giải phóng nó sau khi đã khởi tạo thành công hoạt ảnh đó.</p>
<p>Lý thuyết như vậy có lẽ đã đủ rồi, chúng ta bắt tay vào viết mã thôi. Lần này tôi tạo một ứng dụng form đơn giản và đặt tên là <em>AnimationDemo</em>, lớp form thì đặt tên là <em>AnimationForm</em>. Trên form này bạn tạo một nút nhấn và đặt tên là IDC_BUTTON_ANIMATION và nhãn hiển thị là &#8220;Start&#8221;. Các bạn có thể xem hình vẽ:</p>
<p><a href="http://badavn.files.wordpress.com/2010/06/pic015.jpg"><img class="aligncenter size-full wp-image-323" title="pic01" src="http://badavn.files.wordpress.com/2010/06/pic015.jpg?w=640" alt=""   /></a></p>
<p>Ở tập tin <em>AnimationForm.h</em>, trong phần khai báo lớp <strong>AnimationForm </strong>bạn phải thêm giao diện <strong>IAnimationListener</strong> vào. Đồng thời phải khai báo thêm phương thức <strong>OnAnimationStopped() </strong>của nó. Đồng thời bạn khai báo thêm một số biến mà chúng ta sẽ sử dụng như trong đoạn mã bên dưới.</p>
<pre>class AnimationForm :
	public Osp::Ui::Controls::Form,
	public Osp::Ui::IActionEventListener,
   <strong>public Osp::Ui::IAnimationEventListener</strong>
{

// Construction
public:
	AnimationForm(void);
	virtual ~AnimationForm(void);
	bool Initialize(void);

// Implementation
protected:
	<strong>static const int ID_BUTTON_ANIMATION = 101;
	Osp::Ui::Controls::Button* __pButtonAnimation;
	Osp::Ui::Controls::Animation* __pAnimation;</strong>

public:
	virtual result OnInitializing(void);
	virtual result OnTerminating(void);
	virtual void OnActionPerformed(const Osp::Ui::Control&amp; source, int actionId);
	<strong>virtual void OnAnimationStopped(const Osp::Ui::Control&amp; source){};</strong>
};
</pre>
<p>Phần in đậm trong đoạn mã trên là những dòng mã mà các bạn phải thêm vào. Khi lớp của bạn kế thừa giao diện <strong>IAnimationListener </strong>thì bạn cài đặt cho phương phức <strong>OnAnimationStopped()</strong>, ở đây chúng ta không xử lí gì nên có thể để rỗng như trên.</p>
<p>Các bước để tạo một hoạt ảnh có thể tóm tắt lại như sau:</p>
<ul>
<li><strong>Bước 1:</strong> Tạo các đối tượng <strong>Bitmap </strong>từ các ảnh mà bạn muốn từ đó tạo thành một hoạt ảnh(cấp phát tài nguyên hình ảnh)</li>
<li><strong>Bước 2:</strong> Tạo 1 danh sách các đối tượng <strong>AnimationFrame </strong>từ các đối tượng <strong>Bitmap</strong>, 1 <strong>AnimationFrame </strong>tương ứng với 1 <strong>Bitmap </strong>(tạo các khung hình từ tài nguyên hình ảnh)</li>
<li><strong>Bước 3: </strong>Đưa danh sách các khung hình vào đối tượng <strong>Animation </strong>và thiết đặt các thông số cần thiết</li>
</ul>
<p>Lý thuyết là vậy, bây giờ bạn sẽ bắt tay viết mã để làm theo các bước đó. Trong tập tin <em>AnimationForm.cpp</em>, bạn tiến hành cài đặt lại phương thức <strong>AnimationForm::OnInitializing(void)</strong> như sau:</p>
<pre>result
AnimationForm::OnInitializing(void)
{
	result r = E_SUCCESS;

	// TODO: Add your initialization code here

	// Get a button via resource ID
        __pButtonAnimation = static_cast&lt;Button *&gt;(GetControl(L"IDC_BUTTON_ANIMATION"));
	__pButtonAnimation-&gt;SetActionId(ID_BUTTON_ANIMATION);
	__pButtonAnimation-&gt;AddActionEventListener(*this);

        // Tạo một thể hiện của lớp Image để giải mã dữ liệu ảnh vào các đối tượng Bitmap
	Image* __pImage = new Image();
	__pImage-&gt;Construct();

	// Create Bitmap == Bước 1
	Bitmap *pBitmap1 = __pImage-&gt;DecodeN("/Home/Akuma01.png", BITMAP_PIXEL_FORMAT_ARGB8888);
	Bitmap *pBitmap2 = __pImage-&gt;DecodeN("/Home/Akuma02.png", BITMAP_PIXEL_FORMAT_ARGB8888);
	Bitmap *pBitmap3 = __pImage-&gt;DecodeN("/Home/Akuma03.png", BITMAP_PIXEL_FORMAT_ARGB8888);
	Bitmap *pBitmap4 = __pImage-&gt;DecodeN("/Home/Akuma04.png", BITMAP_PIXEL_FORMAT_ARGB8888);
	Bitmap *pBitmap5 = __pImage-&gt;DecodeN("/Home/Akuma05.png", BITMAP_PIXEL_FORMAT_ARGB8888);
	Bitmap *pBitmap6 = __pImage-&gt;DecodeN("/Home/Akuma06.png", BITMAP_PIXEL_FORMAT_ARGB8888);
	Bitmap *pBitmap7 = __pImage-&gt;DecodeN("/Home/Akuma07.png", BITMAP_PIXEL_FORMAT_ARGB8888);
	Bitmap *pBitmap8 = __pImage-&gt;DecodeN("/Home/Akuma08.png", BITMAP_PIXEL_FORMAT_ARGB8888);
	Bitmap *pBitmap9 = __pImage-&gt;DecodeN("/Home/Akuma09.png", BITMAP_PIXEL_FORMAT_ARGB8888);
	Bitmap *pBitmap10 = __pImage-&gt;DecodeN("/Home/Akuma10.png", BITMAP_PIXEL_FORMAT_ARGB8888);
	Bitmap *pBitmap11 = __pImage-&gt;DecodeN("/Home/Akuma11.png", BITMAP_PIXEL_FORMAT_ARGB8888);
	Bitmap *pBitmap12 = __pImage-&gt;DecodeN("/Home/Akuma12.png", BITMAP_PIXEL_FORMAT_ARGB8888);
	Bitmap *pBitmap13 = __pImage-&gt;DecodeN("/Home/Akuma13.png", BITMAP_PIXEL_FORMAT_ARGB8888);

	// Create AnimationFrames == Bước 2
	long duration = 1300 / 13;
	AnimationFrame *pAniFrame1 = new AnimationFrame(*pBitmap1, duration);
	AnimationFrame *pAniFrame2 = new AnimationFrame(*pBitmap2, duration);
	AnimationFrame *pAniFrame3 = new AnimationFrame(*pBitmap3, duration);
	AnimationFrame *pAniFrame4 = new AnimationFrame(*pBitmap4, duration);
	AnimationFrame *pAniFrame5 = new AnimationFrame(*pBitmap5, duration);
	AnimationFrame *pAniFrame6 = new AnimationFrame(*pBitmap6, duration);
	AnimationFrame *pAniFrame7 = new AnimationFrame(*pBitmap7, duration);
	AnimationFrame *pAniFrame8 = new AnimationFrame(*pBitmap8, duration);
	AnimationFrame *pAniFrame9 = new AnimationFrame(*pBitmap9, duration);
	AnimationFrame *pAniFrame10 = new AnimationFrame(*pBitmap10, duration);
	AnimationFrame *pAniFrame11 = new AnimationFrame(*pBitmap11, duration);
	AnimationFrame *pAniFrame12 = new AnimationFrame(*pBitmap12, duration);
	AnimationFrame *pAniFrame13 = new AnimationFrame(*pBitmap13, duration);

	Osp::Base::Collection::ArrayList animationFrameList;
	animationFrameList.Construct();
	animationFrameList.Add(*pAniFrame1);
	animationFrameList.Add(*pAniFrame2);
	animationFrameList.Add(*pAniFrame3);
	animationFrameList.Add(*pAniFrame4);
	animationFrameList.Add(*pAniFrame5);
	animationFrameList.Add(*pAniFrame6);
	animationFrameList.Add(*pAniFrame7);
	animationFrameList.Add(*pAniFrame8);
	animationFrameList.Add(*pAniFrame9);
	animationFrameList.Add(*pAniFrame10);
	animationFrameList.Add(*pAniFrame11);
	animationFrameList.Add(*pAniFrame12);
	animationFrameList.Add(*pAniFrame13);

	// Deallocate a Bitmap.
	delete pBitmap1;
	delete pBitmap2;
	delete pBitmap3;
	delete pBitmap4;
	delete pBitmap5;
	delete pBitmap6;
	delete pBitmap7;
	delete pBitmap8;
	delete pBitmap9;
	delete pBitmap10;
	delete pBitmap11;
	delete pBitmap12;
	delete pBitmap13;
	delete __pImage;

        // Bước 3: Tạo hoạt ảnh và thiết đặt vị trí, kích thước, số lần lặp của nó trên màn hình.
	__pAnimation = new Animation();
	__pAnimation-&gt;Construct(Rectangle(155,220,165,207), animationFrameList);
	__pAnimation-&gt;SetRepeatCount(10000);
	__pAnimation-&gt;AddAnimationEventListener(*this);
	AddControl(*__pAnimation);

	return r;
}
</pre>
<p>Ở trên tôi dùng 13 ảnh PNG lần lượt đặt tên là <em>Akuma01.png,..,Akuma13.png</em>, các ảnh này có kích thước bằng nhau (110&#215;138), để tạo ra <strong>Animation </strong>của mình, và đặt tất cả chúng dưới thư mục <em>Home </em>của dự án. Hoạt ảnh mà tôi muốn thể hiện là đây:</p>
<p><a href="http://badavn.files.wordpress.com/2010/06/pic02.gif"><img class="aligncenter size-full wp-image-315" title="pic02" src="http://badavn.files.wordpress.com/2010/06/pic02.gif?w=640" alt=""   /></a></p>
<p>Ở trên lời gọi <em>__pAnimation-&gt;Construct(Rectangle(155,220,165,207), animationFrameList);</em> thiết lập tọa độ (155, 220) và kích thước(165&#215;207) khung hình hiển thị cho hoạt ảnh của chúng ta. Các <strong>AnimationFrame </strong>sẽ tự động co giãn về kích thước của khung hình đó. Như các bạn thấy là ở đây tôi đã phóng to hoạt ảnh của mình lên 165&#215;207 thay vì kích thước ban đầu của nó là 110&#215;138.</p>
<p>Cuối cùng là xử lí các sự kiện khi người dùng kích vào nút nhấn:</p>
<ul>
<li>Nếu người dùng kích vào nút &#8220;Start&#8221; thì bạn cho hoạt ảnh chạy(Play) và đổi nhãn của nút nhấn thành &#8220;Stop&#8221;</li>
<li>Nếu người dùng kích vào nút &#8220;Stop&#8221; thì bạn cho hoạt ảnh dừng(Pause) và đổi  nhãn của nút nhấn thành &#8220;Start&#8221;</li>
</ul>
<p>Chi tiết cài đặt như sau:</p>
<pre>void
AnimationForm::OnActionPerformed(const Osp::Ui::Control&amp; source, int actionId)
{
	switch(actionId)
	{
	case ID_BUTTON_ANIMATION:
		{
			if (__pButtonAnimation-&gt;GetText()=="Start")
			{
				__pButtonAnimation-&gt;SetText("Stop");
				__pAnimation-&gt;Play();
			}
			else
			{
				__pButtonAnimation-&gt;SetText("Start");
				__pAnimation-&gt;Pause();
			}
		}
		break;
	default:
		break;
	}
	RequestRedraw();
}
</pre>
<p>Như vậy là xong, bạn đã có thể biên dịch và chạy thử ứng dụng của mình. Trên đây tôi đã hướng dẫn các bạn cách làm việc với <strong>Animation</strong>, từ đó bạn có thể sử dụng các hình ảnh của mình để tạo ra một hoạt ảnh cho riêng mình. Chúc các bạn thành công!</p>
<p><a href="http://badavn.files.wordpress.com/2010/06/pic033.jpg"><img class="aligncenter size-full wp-image-319" title="pic03" src="http://badavn.files.wordpress.com/2010/06/pic033.jpg?w=640" alt=""   /></a>Và đây là khi người dùng kích &#8220;Start&#8221;</p>
<p><a href="http://badavn.files.wordpress.com/2010/06/pic042.jpg"><img class="aligncenter size-full wp-image-320" title="pic04" src="http://badavn.files.wordpress.com/2010/06/pic042.jpg?w=640" alt=""   /></a></p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/badavn.wordpress.com/310/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/badavn.wordpress.com/310/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/badavn.wordpress.com/310/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/badavn.wordpress.com/310/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/badavn.wordpress.com/310/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/badavn.wordpress.com/310/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/badavn.wordpress.com/310/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/badavn.wordpress.com/310/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/badavn.wordpress.com/310/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/badavn.wordpress.com/310/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/badavn.wordpress.com/310/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/badavn.wordpress.com/310/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/badavn.wordpress.com/310/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/badavn.wordpress.com/310/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=badavn.wordpress.com&amp;blog=12794397&amp;post=310&amp;subd=badavn&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://badavn.wordpress.com/2010/06/20/s%e1%bb%ad-d%e1%bb%a5ng-animation-v%e1%bb%9bi-%e1%bb%a9ng-d%e1%bb%a5ng-bada/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/56cfa1918049c24ad9a5dbecff9ba32c?s=96&#38;d=wavatar&#38;r=G" medium="image">
			<media:title type="html">tomlikescience</media:title>
		</media:content>

		<media:content url="http://badavn.files.wordpress.com/2010/06/pic015.jpg" medium="image">
			<media:title type="html">pic01</media:title>
		</media:content>

		<media:content url="http://badavn.files.wordpress.com/2010/06/pic02.gif" medium="image">
			<media:title type="html">pic02</media:title>
		</media:content>

		<media:content url="http://badavn.files.wordpress.com/2010/06/pic033.jpg" medium="image">
			<media:title type="html">pic03</media:title>
		</media:content>

		<media:content url="http://badavn.files.wordpress.com/2010/06/pic042.jpg" medium="image">
			<media:title type="html">pic04</media:title>
		</media:content>
	</item>
		<item>
		<title>Web Browser đơn giản</title>
		<link>http://badavn.wordpress.com/2010/06/20/web-browser-d%c6%a1n-gi%e1%ba%a3n/</link>
		<comments>http://badavn.wordpress.com/2010/06/20/web-browser-d%c6%a1n-gi%e1%ba%a3n/#comments</comments>
		<pubDate>Sun, 20 Jun 2010 16:26:32 +0000</pubDate>
		<dc:creator>kthangvd</dc:creator>
				<category><![CDATA[Hướng dẫn]]></category>
		<category><![CDATA[Web]]></category>

		<guid isPermaLink="false">http://badavn.wordpress.com/?p=312</guid>
		<description><![CDATA[Bài viết này, chúng tôi muốn giới thiệu đến bạn điều khiển web control của bada. Điều khiển này cho phép bạn nhúng nội dung của trang web vào ứng dụng của bạn một cách dễ dàng và nhanh chóng. Lớp web control cho cung cấp các tính năng cơ bản của một browser. Một [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=badavn.wordpress.com&amp;blog=12794397&amp;post=312&amp;subd=badavn&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Bài viết này, chúng tôi muốn giới thiệu đến bạn điều khiển web control của bada. Điều khiển này cho phép bạn nhúng nội dung của trang web vào ứng dụng của bạn một cách dễ dàng và nhanh chóng.</p>
<p><span id="more-312"></span>Lớp web control cho cung cấp các tính năng cơ bản của một browser. Một ứng dụng có thể nhúng một web browser, bằng cách tạo ra một thể hiện của lớp web control.</p>
<p>Trong bài viết này, chúng tôi sẽ giới thiệu đến bạn đọc một ví dụ đơn giản để thao tác với web control. Bạn đọc sẽ tự mình xây dựng nên một trình duyệt web đơn giản cho riêng mình trên bada. Tương tự như các trình duyệt web khác như: Firefox, IE, Safari&#8230; trình duyệt web của bạn chỉ có các tính năng đơn giản nhất như sau:</p>
<p>- 1 nút <strong>Back</strong>: để quay trở lại trang đã xem trước đó</p>
<p>- 1 nút <strong>Forward</strong>: để đến một trang sau của trang hiện tại</p>
<p>- 1 ô text <strong>Address</strong>: để lấy địa chỉ web từ người sử dụng</p>
<p>- 1 nút <strong>Go</strong>: để nạp nội dung của trang web dựa vào ô text address.</p>
<p><strong>Ví dụ</strong>:</p>
<p>Chương trình mẫu sẽ có dạng như sau:</p>
<p><a href="http://badavn.files.wordpress.com/2010/06/webbrowser01.png"><img class="aligncenter size-full wp-image-313" title="webbrowser01" src="http://badavn.files.wordpress.com/2010/06/webbrowser01.png?w=640" alt=""   /></a></p>
<p>Người sử dụng, chọn đến ô address để nhập vào địa chỉ của trang web mà họ muốn xem:</p>
<p><a href="http://badavn.files.wordpress.com/2010/06/webbrowser02.png"><img class="aligncenter size-full wp-image-314" title="webbrowser02" src="http://badavn.files.wordpress.com/2010/06/webbrowser02.png?w=640" alt=""   /></a>Xong, nhấn vào nút &#8220;Go&#8221; để nạp trang web:</p>
<p><a href="http://badavn.files.wordpress.com/2010/06/webbrowser03.png"><img class="aligncenter size-full wp-image-316" title="webbrowser03" src="http://badavn.files.wordpress.com/2010/06/webbrowser03.png?w=640" alt=""   /></a></p>
<p>Bấm vào nút &#8220;Back&#8221; hoặc &#8220;Forward&#8221; để xem lại trang trước và sau (nếu có).</p>
<p><strong>Các điểm bạn đọc cần chú ý trong bài viết này</strong>:</p>
<p>+ Để sử dụng được lớp web control bạn phải thêm khai báo:</p>
<pre>#include &lt;FWeb.h&gt;
</pre>
<p>Tiếp đến bạn khai báo con trỏ có kiểu web như sau:</p>
<pre>protected:
    Osp::Web::Controls::Web* __pWeb;
</pre>
<p>+ Khai báo và gắn các điều khiển vào form của bạn:</p>
<pre>result
WebBrowserForm::OnInitializing(void)
{
    result r = E_SUCCESS;

        /*Back button*/
	__pBackBtn = new Button();
	__pBackBtn-&gt;Construct(Rectangle(3,720, 235, 80), L"Back");
	__pBackBtn-&gt;SetActionId(AC_BUTTON_WEB_BACK);
	__pBackBtn-&gt;AddActionEventListener(*this);
	this-&gt;AddControl(*__pBackBtn);

	/*Forward button*/
	__pForwardBtn = new Button();
	__pForwardBtn-&gt;Construct(Rectangle(242,720, 235, 80), L"Forward");
	__pForwardBtn-&gt;SetActionId(AC_BUTTON_WEB_FORWARD);
	__pForwardBtn-&gt;AddActionEventListener(*this);
	this-&gt;AddControl(*__pForwardBtn);

	/*Go button*/
	__pGoBtn = new Button();
	__pGoBtn-&gt;Construct(Rectangle(405,3, 72, 62), L"Go");
	__pGoBtn-&gt;SetActionId(AC_BUTTON_WEB_LOAD);
	__pGoBtn-&gt;AddActionEventListener(*this);
	this-&gt;AddControl(*__pGoBtn);

	/*Address editfield*/
	__pAddressEdit = new EditField();
	__pAddressEdit-&gt;Construct(Rectangle(3, 3, 400, 60), EDIT_FIELD_STYLE_URL_SMALL);
	__pAddressEdit-&gt;AddTextEventListener(*this);
	__pAddressEdit-&gt;SetText (Osp::Base::String("http://badavn.wordpress.com"));
	this-&gt;AddControl(*__pAddressEdit);

	/* web */
        __pWeb = new Web();
        __pWeb-&gt;Construct(Rectangle(3, 65, 473, 654));
        __pWeb-&gt;SetFocus();
        this-&gt;AddControl(*__pWeb);

    return r;
}
</pre>
<p>+ Tiếp đến là xử lý sự kiện trả về khi các điều khiển trên form nhận sự kiện từ người dùng:</p>
<pre>void
WebBrowserForm::OnActionPerformed(const Control&amp; source, int actionId)
{
	switch(actionId)
	{
	case AC_BUTTON_WEB_BACK:
		__pWeb-&gt;GoBack();
		break;
	case AC_BUTTON_WEB_FORWARD:
		__pWeb-&gt;GoForward();
		break;
	case AC_BUTTON_WEB_LOAD :
		__pWeb-&gt;LoadUrl(__pAddressEdit-&gt;GetText());
		break;
	default:
		break;
	}
}
</pre>
<p>+ Để sử dụng được &lt;FWeb.h&gt; bạn phải khai báo thư viện cho trình biên dịch: Bạn vào <strong>Project </strong>&gt; <strong>Properties</strong> &gt;<strong> C/C++ Build</strong> &gt; <strong>Setting</strong> &gt; <strong>Tool Setting</strong> &gt; <strong>bada C++ Linker</strong> &gt;<strong> Libraries</strong>. Rồi thêm vào &#8220;FWebControls&#8221; như hình vẽ sau:</p>
<p><a href="http://badavn.files.wordpress.com/2010/06/webbrowser04.png"><img class="aligncenter size-full wp-image-317" title="webbrowser04" src="http://badavn.files.wordpress.com/2010/06/webbrowser04.png?w=640&#038;h=351" alt="" width="640" height="351" /></a></p>
<p>+ Sau cùng, bạn khai báo Privilege trong tập tin &#8220;manifest.xml&#8221; như sau:</p>
<p><a href="http://badavn.files.wordpress.com/2010/06/webbrowser05.png"><img class="aligncenter size-full wp-image-318" title="webbrowser05" src="http://badavn.files.wordpress.com/2010/06/webbrowser05.png?w=640" alt=""   /></a></p>
<p>Giờ thì bạn có thể xem kết quả của mình rồi đó.</p>
<p>Chúc bạn thành công!</p>
<p><em>Tham khảo:</em></p>
<p><a href="http://www.mediafire.com/?ktz5unvjuwv">chương trình mẫu</a></p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/badavn.wordpress.com/312/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/badavn.wordpress.com/312/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/badavn.wordpress.com/312/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/badavn.wordpress.com/312/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/badavn.wordpress.com/312/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/badavn.wordpress.com/312/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/badavn.wordpress.com/312/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/badavn.wordpress.com/312/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/badavn.wordpress.com/312/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/badavn.wordpress.com/312/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/badavn.wordpress.com/312/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/badavn.wordpress.com/312/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/badavn.wordpress.com/312/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/badavn.wordpress.com/312/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=badavn.wordpress.com&amp;blog=12794397&amp;post=312&amp;subd=badavn&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://badavn.wordpress.com/2010/06/20/web-browser-d%c6%a1n-gi%e1%ba%a3n/feed/</wfw:commentRss>
		<slash:comments>7</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/62fb63a5e94c0acaa9220db621441aaf?s=96&#38;d=wavatar&#38;r=G" medium="image">
			<media:title type="html">kthangvd</media:title>
		</media:content>

		<media:content url="http://badavn.files.wordpress.com/2010/06/webbrowser01.png" medium="image">
			<media:title type="html">webbrowser01</media:title>
		</media:content>

		<media:content url="http://badavn.files.wordpress.com/2010/06/webbrowser02.png" medium="image">
			<media:title type="html">webbrowser02</media:title>
		</media:content>

		<media:content url="http://badavn.files.wordpress.com/2010/06/webbrowser03.png" medium="image">
			<media:title type="html">webbrowser03</media:title>
		</media:content>

		<media:content url="http://badavn.files.wordpress.com/2010/06/webbrowser04.png" medium="image">
			<media:title type="html">webbrowser04</media:title>
		</media:content>

		<media:content url="http://badavn.files.wordpress.com/2010/06/webbrowser05.png" medium="image">
			<media:title type="html">webbrowser05</media:title>
		</media:content>
	</item>
	</channel>
</rss>
