1 Mục lục 1 2 Làm quen với visual basic 0 9


Làm việc với môi trường lập trình trong Visual basic



tải về 1.69 Mb.
trang3/39
Chuyển đổi dữ liệu09.10.2016
Kích1.69 Mb.
#32631
1   2   3   4   5   6   7   8   9   ...   39

2.3Làm việc với môi trường lập trình trong Visual basic

2.3.1Tìm hiểu các phần của IDE


IDE là tên viết tắt của môi trường phát triển tích hợp (Inegreated Development Enviroment). IDE là nơi tạo ra các chương trình VB.

IDE của VB là nơi tập trung các menu, thanh công cụ và cửa sổ để tạo ra chương trình. Mỗi phần của IDE có các tính năng anhe hưởng đến các hoạt động lập trình khác nhau. Thanh menu cho phép bạn tác động cũng như quản lý trực tiếp trên toàn bộ ứng dụng. Thanh công cụ cho phép truy cập các chức năng của thanh menu qua các nút trên thanh công cụ.




Các biểu mẫu (Form) - khối xây dựng các chương trình Visual basic - xuất hiện trong cửa sổ form. Hộp công cụ để thêm các điều khiển vào các biểu mẫu của đề án. Project explorer hiển thị các đề án mà bạn đang làm cũng như các thành phần của các đề án. Bạn duyệt và cài đặt các thuộc tính của điều khiển, biểu mẫu và module trong cửa sổ property. Cuối cùng, bạn bố trí và xem xét một hoặc nhiều biểu mẫu trên màn hình thông qua cửa sổ form layout.

2.3.2Thêm và xoá các thanh công cụ trong IDE của Visual basic


Thanh công cụ là tập hợp các nút bấm mang biểu tượng chứa trong một thanh thường đặt dưới thanh menu. Các nút này đảm nhận các chức năng thông dụng trong cấu trúc menu của Visual basic. Thanh công cụ rất hửu ích, thay vì phải lần lượt chọn qua menu và menu con, ta nhấn một nút bấm nào đó trong thanh công cụ để gọi một chức năng tương tự trên menu.

Sử dụng thanh công cụ debug: Thanh công cụ debug dùng để kiểm tra chương trình và giải quyết các lỗi có thể xảy ra. Khi gỡ rối chương trình, ta làm một số việc như chạy từng dòng lệnh chương trình, kiểm tra giá trị các biến, và dừng chương trình tại một điểm nghi ngờ hoặc dưới những điều kiện nào đó.

Sử dụng thanh công cụ Edit: Thanh công cụ Edit được dùng để viết chương trình trong cửa sổ code. Các tính năng của thanh công cụ Edit tương tự như các tính năng khác ở menu edit. Bạn có thể Cut, Paste văn bản...

Một tính năng lý thú của IDE là thanh công cụ Edit dùng tính năng Coplete Word, tự động hoàn tất từ khoá. Tính năng Complete Word rất hữu ích để tránh các lỗi cú pháp.



Sử dụng thanh công cụ Form Editor: Thanh công cụ form editor dùng để kéo giãn, di chuyển và sắp xếp các điều khiển trên biểu mẫu. Thanh công cụ Form editor có các tính năng như menu Format.

Sử dụng thanh công cụ chuẩn(Standard): Là thanh công cụ trọng yếu trong IDE. Thanh công cụ chuẩn cung cấp nhiều tính năng trong menu file, Project, Debug, Run.

2.3.3Thêm các điều khiển vào hộp công cụ


Hộp công cụ là bảng chứa các điều khiển và ta thiết kế giao diện người sử dụng bằng cách chọn các điều khiển từ hộp công cụ và đưa chúng vào các biểu mẫu.

Một số điều khiển có sẵn trong Visual basic và không thể gỡ bỏ khỏi hộp công cụ. Một số khác nằm bên ngoài Visual basicvà chứa trong các tập tin mà có phần mở rộng là. ocx. Các điều khiển này có thể được thêm vào hoặc gỡ bỏ khỏi thanh công cụ.

Chúng ta sẽ trở lại chi tiết về các loại điều khiển trong Visual basic trong một chương riêng.

2.3.4Định hướng thông qua cửa sổ form và code


Nếu điều khiển là những khối bê tông mà ta tập hợp trong ứng dụng thì biểu mẫu là nền móng để ta xây dựng các khối này.

Các biểu mẫu chứa trong cửa sổ Thiết kế biểu mẫu. Ta sẽ làm việc trong cửa sổ này để thêm các điều khiển vào biểu mẫu.

Đối với từng cửa sổ thiết kế mẫu, ta cũng có thể mở cửa sổ code. Cửa sổ code là nơi ta viết các đoạn chương trình chạy bên dưới biểu mẫu. Ta có thể mở cửa sổ code bằng cách nhấn đúp lên biểu mẫu hoặc điều khiển, hoặc chọn code từ menu.

2.3.5Quản lý ứng dụng với project explorer


Project explorer trong Visual basic giúp quản lý và định hướng nhiều đề án. Visual basic cho phép tổ chức nhiều đề án trong một nhóm gọi là project group. Ta có thể lưu tập hợp các đề án trong Visual basic thành một tập tin nhóm đề án. Các tập tin này có phần mở rộng là.vbg.

2.3.6Cửa sổ properties


Mỗi thuộc tính có một hoặc nhiều giá trị. Cửa sổ properties giúp bạn xem sửa đổi và điều khiển các thuộc tính của các điều khiển ActivateX trong chương trình.

2.3.7Hiển thị IDE


Ta có thể xem IDE của Visual basic bằng 2 cách: MDI hoặc SDI. Hiển thị kiểu MDI(Multiple document interface) cho phép trình bày tất cả các cửa sổ thành phần trong IDE như là các cửa sổ con chứa trong một cửa sổ lớn.

Trái lại đối với hiện thị SDI(single document interface), các cửa sổ thành phần hiển thị một cách độc lập với nhau. Không có một cửa sổ chính để chứa và thống nhất các thành phần.



Chuyển đổi từ hiển thị MDI sang SDI

  • Chọn Tools\option\

  • Trên tang Advance, chọn hộp đánh dấu SDI development Enviroment; nhấn OK. IDE của Visual basic sẽ định lại cấu hình cho hiển thị SDI trong lần khởi động tiếp sau của Visual basic.

  • Nhấn OK, thoát và khởi động lại Visual basic

2.3.8Trợ giúp


Không những làm chủ ngôn ngữ lập trình Visual basic, bạn cũng cần phải sử dụng thuần thục môi trường Visual basic cũng như hiểu các thông điệp mà Visual basic gửi ra. Microsoft cung cấp một trong những hệ thống trợ giúp tốt nhất cho các công cụ phát triển ứng dụng.

Trợ giúp nhạy với ngữ cảnh

Tại một vị trí bất kỳ trong Visual basic, bạn nhấn phím F1, nút trợ giúp. Nó sẽ kích hoạt hệ thống trợ giúp của Visual basic, nơi có thể giải thích hoặc đưa ra những lời khuyên, cũng như các đoạn chương trình mẫu.

Visual basic có hệ thống trợ giúp là hệ thông thư viện MSDN được sử dụng rộng rãi cho các công cụ phát triển của Microsoft để cung cấp truy cập đến sổ tay hướng dẫn sử dụng sản phẩm trực tuyến.

3Tìm hiểu Visual basic 6

3.1Thuộc tính phương thức và sự kiện

3.1.1Đối tượng


Trong VB, đối tượng là những thành phần tạo nên giao diện giữa người sử dụng cho ứng dụng. Các điều khiển là những đối tượng. Những nơi chứa (container) như biểu mẫu(form), khung(frame), gay hộp ảnh (picture box) cũng là một đối tượng.

VB 6 hỗ trợ một cách lập trình tương đối mới, lập trình hướng đối tượng (Object Oriented Programming).

Trong lập trình cổ điển, ta có kiểu lập trình theo cấu trúc. Nếu như ứng dụng được thiết kế để giải quyết một vấn đề lớn, thì lập trình viên có thể chia thành nhiều vấn đề nhỏ và viết các đoạn chương trình nhỏ để giải quyết riêng từng cái.

Với lập trình hướng đối tượng, lập trình viên sẽ chia nhỏ vấn đề cần giải quyếtthành các đối tượng. Từng đối tượng sẽ có đời sống riêng của nó. Nó có các đặc điểm mà ta gọi là thuọcc tính và những chức năng riêng biệt mà ta gọi là phương thức. lập trình viên cần đưa ra các thuộc tính và phơưng thức mà các đối tượng cần thể hiện.


3.1.2Thuộc tính


Nói một cách đơn giản, thuộc tính mô tả đối tượng.

Mỗi đối tượng cộng đều có một bộ thuộc tính mô tả đối tượng. Biểu mẫu và điều khiển đều có thuộc tính. Thậm chí màn hình và máy in là những đối tượng chỉ cho phép can thiệp lúc thi hành cũng có thuộc tính.

Mặc dù mỗi đối tượng có những bộ thuộc tính khác nhau, nhưng trong đó vẫn còn một số thuộc tính thông dụng cho hầu hết các điều khiển.(bạn có thể xem toàn bộ thuộc tính của một điều khiển bằng cách chọn vào điều khiển và mở cửa sổ PROPERTIES trong Visual Basic)
Các thuộc tính thông dụng:

Thuộc tính

Giải thích

Left

Vị trí cạnh trái của điều khiển so với vật chứa nó

Top

Vị trí cạnh trên của điều khiển so với vật chứa nó

Hieght

Chiều cao của điều khiển

Width

Chiều rộng của điều khiển

Name

Một giá trị chuỗi được dùng để nói đến điều khiển

Enable

Giá trị logic (True hoặc False) quyết định người sử dụng có được làm việc với điều khiển hay không

Visible

Giá trị logic (True hoặc False) quyết định người sử dụng có thấy điều khiển hay không

Một thuộc tính quan trọng khác là BorderStyle, quyết định các thành phần của cửa sổ (như thanh tiêu đề, nút phóng to thu nhỏ…) mà một biểu mẫu sẽ có




Bảng sau đây liệt kê 6 giá trị của thuộc tính này.


Giá trị

Hiệu ứng trên biểu mẫu

0 – None

Không có cạnh viền, không thanh tiêu đề, không được di chuyển. Giá trị này thường được dùng cho cửa sổ khởi động chương trình

1 – Fixed Single

không thể co giãn cửa sổ bằng cách kéo rê cạnh viền, nhưng có thể dùng nút phóng to hoặc thu nhỏ. Giá trị này được dùng cho những cửa sổ có kích cỡ cố định nhưng vẫn xuất hiện trên thanh Taskbar

2 – Sizable

Có thể co giãn cửa sổ bằng cách kéo rê cạnh viền và dùng nút phóng to hoặc thu nhỏ. Giá trị dùng cho những cửa sổ thông dụng

3 – Fixed Dialog

Không thể co giãn và không có thể dùng nút phóng to hoặc thu nhỏ,. Giá trị này dùng cho các cửa sổ đơn giản như mật khẩu

4- Fixed Tool Window

tương tự Fixed Dialog nhưng thanh tiêu đề ngắn hơn. Font trên thanh tiêu đề và nút Close cũng nhỏ hơn. giá trị này dùng cho các thanh công cụ di động.

5 – Sizable Tool Window

Tương tự như Fixed Tool Window nhưng có thể co giãn được. Giá trị này dùng cho những cửa sổ Properties của Visual Basic



3.1.3Phương thức


Là những đoạn chương trình chứa trong điều khiển, cho điều khiển biết cách thức để thực hiện một công việc nào đó, chảng hạn dời điều khiển đến một vị trí mới trên biểu mẫu. Tương tự thuộc tính, mỗi điều khiển có những phương thức khác nhau, nhưng vẫn có một số phương thức rất thông dụng cho hầu hết các điều khiển..

Các phương thức thông dụng



Phương thức

Giải thích

Move

Thay đổi vị trí một đoói tượng theo yêu cầu của chương trình

Drag

Thi hành hoạt động kéo và thả của người sử dụng

SetFocus

Cung cấp tầm ngắm cho đối tượng được chỉ ra trong lệnh gọi phương thức

ZOrder

quy định thứ tự xuất hiện của các điều khiển trên màn hình



3.1.4Sự kiện


Nếu như thuộc tính mô tả đối tượng, phương thức chỉ ra cách thức đối tượng hành động thì sự kiện là những phản ưúng của đối tượng.

Tương tự thuộc tính và phương thức, mỗi điều khiển có những bộ sự kiện rất thông dụng với hầu hết các điều khiển. Các sự kiện này xảy ra thường là kết quả của một hành động nào đó, như là di chuyển chuột, nhấn nút bàn phím, hiặc gõ vào hộp văn bản. kiểu sự kiện này được gọi là sự kiện khởi tạo bởi người sử dụng, và ta sẽ phải lập trình cho chúng.

các sự kiện thông dụng


Sự kiện

Xảy ra khi

Change

Người sử dụng sửa đổi chuỗi ký tự trong hộp kết hợp hoặc hộp văn bản

Click

Người sử dụng dùng chuột click lên đối tượng

Dblclick

Người sử dụng dùng chuột click đúp lên đối tượng

DragDrop

Người sử dụng kéo rê một đối tượng sang nơi khác

DragOver

Người sử dụng kéo rê một đối tượng ngang qua một điều khiển khác

GotFocus

Đưa một đối tượng vào tầm ngắm của người sử dụng

KeyDown

Người sử dụng nhấn một nút trên bàn phím trong khi một đối tượng đang trong tầm ngắm

KeyPress

Người sử dụng nhấn và thả một nút trên bàn phím trong khi một đối tượng đang trong tầm ngắm

KeyUp

Người sử dụng thả một nút trên bàn phím trong khi một đối tượng đang trong tầm ngắm

LostFocus

Đưa một đối tượng ra khỏi tầm ngắm

MouseDown

Người sử dụng nhấn một nút chuột bất kỳ trong khi con trỏ chuột đang nằm trên một đối tượng

MouseMove

Người sử dụng di chuyển con trỏ chuột ngang qua một đối tượng

MouseUp

Người sử dụng thả nút chuột trong khi con trỏ chuột đang nằm trên một đối tượng



3.1.5Mối quan hệ giữa phương thức, thuộc tính và sự kiện


Mặc dù thuộc tính, phương thức và sự kiện có vai trò khác nhau nhưng chúng thường xuyên liên hệ với nhau. ví dụ nếu ta di chuyển một điều khiển bằng phương thức Move ( thường đáp ứng một số sự kiện) một số thuộc tính như Top, Height, Left, Width sẽ thay đổi theo. Bởi vì khi kích cỡ của điều khiển thay đổi, sự kiện Resize sẽ sảy ra.

Phụ thuộc lẫn nhau còn có nghĩa là ta có thể đạt được mjục đích công việc bằng nhiều cách: xử lýu trên thuộc tính hoặc phương thức. Ví dụ, ta có 2 cách để di chuyển nút lệnh:



  1. thuộc tính

cmdMove.Left=100

cmdMove.Top=100



  1. phương thức

cmdMove.Move 100,100

Một ví dụ khác, làm một biểu mẫu xuất hiện và biến mất trên màn hình



  1. thuộc tính

‘xuất hiện

frmMyForm.Visible =True

‘Biến mất

frmMyForm.Visible =False



  1. phương thức

‘xuất hiện

frmMyForm.Show

‘Biến mất

frmMyForm.Hide



3.1.6Cửa sổ Properties


cửa sổ này cho phép lập trình viên xem xét và sửa đổi các thuộc tính của biểu mẫu và các điều khiển trong lúc thiết kế

Phần trên cửa sổ là các danh sách đối tượng, đối tượng được chọn trong danh sách này có các thuộc tính của nó hiển thị trong phần bên dưới của cửa sổ.


Thuộc tính Caption được đánh dấu, nghĩa là ta có thể sửa đổi thuộc tính này.

từng thuộc tính có một hía trị mặc định. ta có thêr sửa đổi bằng tay trong lúc thiết kế, hoặc bằng chương trình trong lúc thi hành.

một biểu mẫu có khoảng 40 thuộc tính được hiển thị trong lúc thiết kế, nhưng ta có thể truy cập một số thuộc tính khác vào trong lúc thi hành.

Ta có thẻ xem toàn bộ thuộc tính xứp xếp theo thứ tự bảng chữ cái bằng cách chọn vào tab Alphabetic, hoặc xem theo từng nhóm bằng cách chọn vào tab Categozized.

ta có thể mở cửa sổ Properties bằng nhiều cách:



  1. nhấn chuộtvào biểu mẫu để chpnj nó như một đối tượng hiện hành, nhấn phím F4 để hiển thị cửa sổ Properties

  2. Hoặc là từ menu_View, chọn Properties

  3. hoặc là nhấn nút phải chuột lên biểu mẫu, ta sẽ thấy một menu hiển thị. chọn Properties.

3.1.7Viết chương trình sử dụng thuộc tính, phương thức và sự kiện


Ta thử viết chương trình Movelt dùng để di chuyển cửa sổ. Movelt có một cửa sổ tên là frmMove, chứa 4 nút lệnh ở 4 góc màn hình. khi thi hnàh nhấn vào moọt trong các nút này sẽ làm cửa sổ di chuyển tới góc màn hình tương ứng. giữa màn hình sẽ là một nhãn hiệu sẽ thông báo tức thời các di chuyển của chuột cũng như nút lệnh nào được Focus.

các bước tổng quát dể tạo Movelt:



  1. Tạo giao diện người sử dụng (GUI)

  2. Viết thủ tục Form_Load()

  3. Viết thủ tục click()

  4. thêm các thông báo sự kiện

3.1.7.1Tạo GUI


    1. từ menu File, chọn New Project để mở hộp thoại đề án. Chọn kiểu standard EXE

    2. vào cửa sổ Properties, sửa tên biểu mẫu thành frmMove

    3. thêm 4 nút lệnh vào 4 góc biểu mẫu. ta sẽ xửa lại vị trí chính xác hiưn cho đíng bằng chương trình

    4. nhấn đúp chuột lên biể mẫu để tạo thủ tục Form_Load()

    5. Đổi thuộc tính BorderStyle của biểu mẫu thành 1- Fixed Single để cấm biểu mẫu co giãn khi chương trình thi hành. sau đó đổi các thuộc tính Alignment của nhãn thành 2- Center và BorderStyle của nhãn thành 1- Fixed Single

    6. Lưu biểu mẫu với tên là frmmove và lưu đề án với tên là Movelt.vbp




3.1.7.2Viết thủ tục Form _Load


Thủ tục này chuẩn bị một số khởi tạo cho biểu mẫu trước khi nó được hiển thị

  1. Đặt thuộc tính Caption cho CommandButtion

  2. Dặt chuỗi ký tự khởi tạo cho nhãn

  3. Đặt chuỗi ký tự cho thanh tiêu đề của biểu mẫu

  4. Đặt vị trí cho 4 nút lệnh nhãn và biểu mẫu trên màn hình

  5. Đưa vào đoạn chương trình sau:

Private Sub Form_Load()


'Set the Caption property of the CommandButtons

cmdTopLeft.Caption = "Top Left"

cmdTopRight.Caption = "Top Right"

cmdBottomLeft.Caption = "Bottom Left"

cmdBottomRight.Caption = "Bottom Right"

'Clear the initial text of the label

lblNotify.Caption = ""

'Set the form's title bar text

frmMove.Caption = "MoveIt"

'The rest of the code centers the form on the

'screen, sets the position of the four

'CommandButtons, and sets the size and

'position of the label.

'Center the form on the screen. This works by

'setting the Left side of the form to the center

'of the screen, less half the width of the form.

'Also, the Top of the form is set to the center

'of the screen, less half the height of the form.

frmMove.Left = (Screen.Width - frmMove.Width) / 2

frmMove.Top = (Screen.Height - frmMove.Height) / 2

'Set the Left edge of the buttons. The 200 setting

'for the left buttons sets a space between the edge

'of the form and the buttons. The right buttons are

'set by subtracting the width of the button from

'the width of the form, and subtracting 300 to

'set a space between the button and the form edge.

cmdTopLeft.Left = 200

cmdBottomLeft.Left = 200

cmdTopRight.Left = frmMove.Width - cmdTopRight.Width - 300

cmdBottomRight.Left = frmMove.Width - cmdBottomRight.Width - 300

'Set the Top edge of the buttons. This is done

'similar to setting the Left edge.

cmdTopLeft.Top = 200

cmdBottomLeft.Top = frmMove.Height - cmdBottomLeft.Height - 500

cmdTopRight.Top = 200

cmdBottomRight.Top = frmMove.Height - cmdBottomRight.Height - 500

'Set the size of the label

lblNotify.Height = 360

lblNotify.Width = 3000

'Center the label within the form. This is done

'similar to centering the form.

lblNotify.Left = (frmMove.Width - lblNotify.Width) / 2

lblNotify.Top = (frmMove.Height - lblNotify.Height) / 2 - 200

End Sub


3.1.7.3Viết thủ tục Click


Dùng thủ tục này để di chuyển biểu mẫu xung quanh màn hình. Nhấn đúp chuột lên nút lệnh để mở cửa sổ Code. Đưa vào đoạn chương trình sau đay:
Private Sub cmdBottomLeft_Click()

'Set the value of the form's TOP property

'to the bottom of the screen but bring

'it up the height of the screen so that the

'bottom of the form is on the bottom of

'the screen

frmMove.Top = Screen.Height - frmMove.Height

'Set the value of the form's LEFT property

'to the left most of the screen.

frmMove.Left = 0

End Sub

Private Sub cmdBottomRight_Click()



'Set the value for the form's TOP property to

'the bottom of the screen, but bring the TOP

'up the HEIGHT of the form so that the bottom

'of the form is on the bottom of the screen.

frmMove.Top = Screen.Height - frmMove.Height

'Set the value of the form's LEFT property to

'the right of the screen but bring it across

'the screen, the width of the form so that the

'right side of the form is on the right

'side of the screen

frmMove.Left = Screen.Width - frmMove.Width

End Sub


Private Sub cmdTopLeft_Click()

'Set the value of the form's TOP property

'to the top of the screen.

frmMove.Top = 0

'Set the value of the form's LEFT property

'to the left of the screen.

frmMove.Left = 0

End Sub
Private Sub cmdTopRight_Click()

'Set the value of the form's TOP property

'to the top of the screen.

frmMove.Top = 0

'Set the value of the form's LEFT property to

'the right of the screen but bring it back across

'the screen the width of the form, so that the

'right side of the form is on the right

'side of the screen

frmMove.Left = Screen.Width - frmMove.Width

End Sub
Đối tượng Screen sử trong đoạn chương trình trên là màn hình

Việc di chuyển biểu mẫu lên trên hoặc sang trái chỉ cần đổi thuộc tính Top hay Left thành 0. Giá trị này luôn đúngcho cạnh trên hay cạnh trái màn hình.

Cạnh phải hoặc cạnh dưới phức tạp hơn vì không có thuộc tính Right hay Bottom. Để canh phải biểu mẫu ta phải thay đổi thuộc tinh Left thông qua thuộc tính Width

Tương tự với cạnh dưới ta phải thay đổi thuộc tinh Top thông qua thuộc tính Height

3.1.7.4Thêm thông báo sự kiện


Khi người sử dụng nhấn hoặc thả nút chuụot trên biểu mẫu chuỗi ký tự trong nhãn lblNotify sẽ thay đổi. Ngoài ra khi người sử dụng nhấn phím Tab hoặc chuột để di chuyển từ nút lện này sang nút lệnh khác, chuỗi ký tự của nhãn cũng thay đổi. như vậy ta phải chương trình cho 3 thủ tục khác nhau. MouseUp, mouseDown cho biểu mẫu và GostFocus cho từng nút lệnh.

Mở cửa sổ Code, chọn sự kiện MouseDown để mở thủ tục và đưa vào đoạn chương trình sau

Private Sub Form_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)

lblNotify.Caption = "MouseDown Event"


End Sub
Private Sub Form_MouseUp(Button As Integer, Shift As Integer, X As Single, Y As Single)

lblNotify.Caption = "MouseUp Event"


End Sub
Private Sub cmdBottomLeft_GotFocus()

lblNotify.Caption = "cmdBottomLeft has the Focus"

End Sub
Private Sub cmdBottomRight_GotFocus()

lblNotify.Caption = "cmdBottomRight has the Focus"

End Sub
Private Sub cmdTopLeft_GotFocus()

lblNotify.Caption = "cmdTopLeft has the Focus"

End Sub
Private Sub cmdTopRight_GotFocus()

lblNotify.Caption = "cmdTopRight has the Focus"

End Sub



tải về 1.69 Mb.

Chia sẻ với bạn bè của bạn:
1   2   3   4   5   6   7   8   9   ...   39




Cơ sở dữ liệu được bảo vệ bởi bản quyền ©hocday.com 2024
được sử dụng cho việc quản lý

    Quê hương