Sử dụng control

Một phần của tài liệu nghiên cứu và xây dựng ứng dụng từ điển trên điện thoại di động (Trang 73 - 76)

6.3.3.1 Sử dụng tài nguyên để xây dựng control

Cũng như các ngôn ngữ lập trình khác đặc biệt là VC++ 6.0, C++ trên Symbian dùng tập tin tài nguyên (resource file) để lưu trữ thông tin của các control.

Tuy nhiên, để độc lập với các IDE khác nhau, tập tin tài nguyên được khai báo dưới dạng văn bản có cấu trúc. Tùy theo môi trướng phát triển ứng dụng mà tập tin tài nguyên sẽ được biên dịch thành các tập tin tài nguyên nhị phân tồn tại độc lập với tập tin thực thi chính của chương trình (.app). Điều này giúp thực hiện ứng dụng đa ngôn ngữ dể dàng hơn, chỉ cần thay đổi tập tin tài nguyên qui định chuỗi hiển thị

trong các control của ứng dụng; việc kết hợp tập tin thực thi .app với một tập tin tài nguyên ngôn ngữđã biên dịch sẽ tạo nên một ứng dụng với ngôn ngữ hiển thị như ý muốn.

Hệ thống tập tin tài nguyên khi lập trình bằng C++ trên Symbian bao gồm: ƒ Tập tin nguồn: dạng văn bản

o Eikon.hrh và Eikon.rh: chứa các khai báo và cấu trúc chuẩn cho tài nguyên. (có thể không có)

o AppName.hrh: chứa khai báo kí hiệu cho các tài nguyên và các định danh lệnh (command ID, tương tự như VC++ 6.0)

o AppName.rss: chứa các cấu trúc để xây dựng control cho ứng dụng

o AppNameAif.rss: chứa các thông tin để biên dịch tập tin .aif (tập tin chứa thông tin ứng dụng)

o AppName.loc: chứa các khai báo chuỗi dùng trong ứng dụng đa ngôn ngữ.

(AppName là tên ứng dụng)

ƒ Tập tin đích: dạng nhị phân, khác nhau cho từng nền hệ thống

o Eikon.rsg: chứa các kí hiệu, ID tài nguyên chuẩn. (có thể không có)

o AppName.rsg: chứa các kí hiệu tài nguyên, định danh lệnh… được phát sinh khi biên dịch tài nguyên; kết hợp với các lớp control để biên dịch ứng dụng.

o AppName.rsc: tập tin tài nguyên được biên dịch từ các tập tin .rss và .loc

Trong ứng dụng, việc đọc tập tin tài nguyên được thực hiện bằng lớp

TResourceReader và hàm tạo ResourceReader từ môi trường điều khiển (CCoeEnv). Mỗi ứng dụng có một đối tượng tĩnh CCoeEnv duy nhất khi thực thi, đối tượng này cung cấp các tiện ích liên quan tới giao diện của ứng dụng như lấy graphic content, font chữ, đọc tập tin tài nguyên…Chi tiết về đối tượng tĩnh CCoeEnv có thể tham khảo trong SDK Help.

6.3.3.2 Khai báo và xây dựng một control trong ứng dụng

Tùy theo loại control mà cách xây dựng có khác nhau: ƒ Simple, non-window-owning controls

o Cấp phát bộ nhớ cho control, thực hiện bằng toán tửnew

(ELeave)…

o Chỉđịnh cửa sổ chứa control bằng hàm

SetContainerWindowL()

o Xây dựng các nội dung khởi tạo cần thiết cho control. Có thể thực hiện bằng một trong hai cách: ConstructFromResourceL() (với giá trị tài nguyên đã được đọc vào TResourceReader) hoặc

ConstructL(tham số…) (xây dựng trực tiếp bằng mã nguồn với các tham số chính là giá trị tài nguyên trong tập tin tài nguyên) ƒ Control kết hợp hay Window-owning controls

o Cấp phát bộ nhớ cho control, thực hiện bằng toán tửnew (ELeave)

o Nếu là control ket hợp thuộc dạng non-window-owning control, chỉ định cửa sổ chứa control bằng hàm SetContainerWindowL()

o Xây dựng control nhưđã trình bày ở phần trên. Tuy nhiên đối với control kết hợp, thường xây dựng từ mã nguồn, trong đó mỗi control thành phần đơn giản sẽđược xây dựng từ tập tin tài nguyên.

o Kích hoạt (activate) control trước khi sử dụng bằng hàm: ActivateL(). Trừ khi control kết hợp lại là một thành phần của control khác thì không cần kích hoạt vì khi control “cha” kính hoạt tất cả các control thành phần sẽđược kích hoạt theo.

Sau khi khai báo, cấp phát và xây dựng các control như trên, vẫn chưa hiển thị được control lên màn hình ứng dụng vì phạm vi (extent) của control bao gồm kích thước và vị trí trong cửa sổ chứa control này chưa được xác định. Kích thước của một control có thể được xác định trong hàm ConstructL() của control đó. Nhưng vị trí của control phải được qui định ở control “cha” vì đây là kích thước tương đối. Việc xác định vị trí hay phạm vi của các control thành phần được thực hiện trong

hàm kế thừa từ lớp CoeControl: SizeChangedL(). Đây là hàm được hệ thống tự động gọi khi kích thước control bị thay đổi hoặc mới khởi động ứng dụng lần đầu. (adsbygoogle = window.adsbygoogle || []).push({});

Ngoài ra, mỗi control có thể thay đổi những thuộc tính khác nhau để phù hợp với yêu cầu của ứng dụng. Như thay đổi highlighted text color của listbox, thay đổi margin cho textbox, gán biểu tượng cho các menu item…

Một phần của tài liệu nghiên cứu và xây dựng ứng dụng từ điển trên điện thoại di động (Trang 73 - 76)