[Ngôn ngữ Avenue #3] Tạo ứng dụng tùy biến

0
2813

Tạo ứng dụng tuỳ biến là cách thay đổi giao diện ArcView theo ý của người sử dụng, ArcView cho phép ta thêm mới, xoá, chỉnh sửa menu, button, tool thậm chí có thể thay đổi giao diện ArcView thành giao diện ngôn ngữ nào đó để phục vụ cho nhu cầu riêng của từng lĩnh vực, ở từng vùng.

1. THAY ĐỔI GIAO DIỆN AVENUE

 Để thêm mới, xoá, chỉnh sửa một menu, button, tool . Kích đôi vào cửa sổ giao diện ArcView như hình.

Hộp thoại chỉnh sửa như hình sau

Trong hộp thoại chỉnh sửa này ta có thể thực hiện các thao tác thêm mới, chỉnh sửa, xoá các điều kiển trên giao diện.
Tạo giao diện mới

Tạo mới một Menu

Để tạo mới một Menu ta làm như sau:
  • Mở hộp thoại chỉnh sửa.
  • Chọn Menus trong Caterogy
  • Nhấn vào nút New Menu. Một Menu có tên ngẫu nhiên là Menu mới được tạo ra.
  • Kích đôi vào mục Label để đổi tên của Menu, đổi tên của menu là Thong diep
  • Để tạo mới một menu con cho menu này ta nhấn vào nút New Item. Một menu con có tên là Item được tạo ra.
  • Doube click vào mục Label để đổi tên của Item này, đổi tên menu là Thong diep
  • Đóng hộp thoại chỉnh sửa giao diện, ta thấy xuất hiện trên menu của ArcView một menu có tên là Thong diep

Khi ta chọn vào menu con Thong diep 1 ta không thấy có sự kiện nào xảy ra, điều này do ta chưa gán một script nào cho sự kiện chọn menu con này.
Bây giờ ta tiến hành gán một script cho sự kiện chọn Menu con này.
  • Mở hộp thoại chỉnh sửa giao diện
  • Chọn memu con Thong diep 1
  • Kích đôi vào mục Click

  • Hộp thoại yêu cầu xác định script cho menu này xuất hiện.

Trong hộp thoại này ta chọn Script cho có sẵn hoặc nhấn vào nút New để tạo mới một script cho menu này.
  • Nhấn vào nút New trong hộp thoại Script Manager để tạo mới một script. Đặt tên cho script này là Menu1
  • Trong giao diện soạn thảo script, ta gõ vào script sau.
    tenMenu=self.getLabel
    msgbox.info(“Ban vua chon vao menu ” + tenMenu ,”Thong bao”)
  • Đóng giao diện soạn thảo script, quay về cửa sổ giao diện khung nhìn, ta chọn vào menu con Thong diep 1, lúc đó màn hình xuất hiện hộp thoại thông điệp như sau.

Để xoá Menu Thong diep ta vào hộp thoại chỉnh sửa giao diện, chọn Menu này và nhấn vào nút Delete.

Tạo mới một Button

Để tạo mới một button ta làm như sau
  • Mở hộp thoại chỉnh sửa giao diện
  • Chọn Buttons trong Caterogy
  • Nhấn vào nút New. Một Button mới được tạo ra, button này chưa có Icon.
  • Kích đôi vào mục Icon để chọn Icon cho button này.

  • Hộp thoại chọn Icon hiện ra như hình.

  • Chọn Icon có tên là Star, nhấn vào nút OK
  • Đặt Tooltip cho Button bằng cách Kích đôi vào mục Help, gõ vào dòng “Day la mot button//Đây là một button”
  • Đóng hộp thoại chỉnh sửa giao diện, ta thấy xuất hiện trên Buttonbar của ArcView một Button mới.

Khi ta nhấn vào button mới này ta không thấy có sự kiện nào xảy ra, điều này do ta chưa gán một script nào cho sự kiện click của button này.
Bây giờ ta tiến hành gán một script cho sự kiện click button này.
  • Mở hộp thoại chỉnh sửa giao diện
  • Chọn button mới tạo
  • Kích đôi vào mục Click, hộp thoại yêu cầu xác định script cho menu này xuất hiện.
  • Nhấn vào nút New trong hộp thoại Script Manager để tạo mới một script. Đặt tên cho script này là Button1
  • Trong giao diện soạn thảo script, ta gõ vào script sau.
    msgbox.info(“Wow, Ban vua click vao toi ” ,”Thong bao”)
  • Đóng giao diện soạn thảo script, quay về của sổ giao diện khung nhìn, ta click vào Button mới tạo, lúc đó màn hình xuất hiện hộp thoại thông điệp như sau.

Để xoá button mới tạo ta vào hộp thoại chỉnh sửa giao diện, chọn Button vừa tạo và nhấn vào nút Delete.

Tạo mới một ToolMenu

Để tạo mới một ToolMenu ta làm như sau
  • Mở hộp thoại chỉnh sửa giao diện
  • Chọn Tools trong Caterogy
  • Nhấn vào nút Tool. Một Tool mới được tạo ra, Tool này chưa có Icon.
  • Kích đôi vào mục Icon để chọn Icon cho Tool này. Hộp thoại chọn Icon hiện ra như hình.

  • Chọn Icon có tên là Index, click vào nút O
  • Đặt Tooltip cho Tool bằng cách Kích đôi vào mục Help, gõ vào dòng “Day la mot Tool//Đây là một Tool”
  • Với Tool ta có thể xét hình dạng của con trỏ chuột sau khi chọn Tool, để xét hình dạng con trỏ chuột ta Kích đôi và Cursor. Hộp thoại Picker xuất hiện như sau:

Ta chọn vào Cursors.Bullseye và nhấn vào nút OK
  • Đóng hộp thoại chỉnh sửa giao diện, ta thấy xuất hiện trên Toolbar của ArcView một Tool mới.

Khi ta nhấn vào Tool mới này sau đó đưa trỏ chuột vào khung nhìn ta thất trỏ chuột đổi sang dạng vòng tròn trong rỗng, nhấn vào một vị trí bất kỳ trên khung nhìn ta không thấy có sự kiện nào xảy ra, điều này do ta chưa gán một script nào cho sự kiện Apply của Tool này.

Bây giờ ta tiến hành gán một script cho sự kiện Apply Tool này.
  • Mở hộp thoại chỉnh sửa giao diện
  • Chọn Tool mới tạo
  • Kích đôi vào mục Apply, hộp thoại yêu cầu xác định script cho menu này xuất hiện
  • Nhấn vào nút New trong hộp thoại Script Manager để tạo mới một script. Đặt tên cho script này là Tool1
  • Trong giao diện soạn thảo script, ta gõ vào script sau.
    msgbox.info(“Wow, Ban vua click vao khung nhin ” ,”Thong bao”)
  • Đóng giao diện soạn thảo script, quay về của sổ giao diện khung nhìn, ta nhấn vào Tool mới tạo, đưa trỏ chuột vào khung nhìn và nhấn ta thấy hộp thoại thông điệp xuất hiện như sau:

Để xoá Tool vừa tạo ta vào hộp thoại chỉnh sửa giao diện chọn Tool này và nhấn vào nút Delete.
Tool cũng có sự kiện click nhưng sự kiện này ta ít dùng, sự kiện click của Tool chỉ xảy ra khi ta nhấn vào Tool, còn sự kiện Apply xảy ra khi ta chọn Tool và nhấn vào khung nhìn.

Tạo mới một Popup Menu

Để tạo mới một popup menu ta làm như sau:
  • Mở hộp thoại chỉnh sửa giao diện
  • Chọn Popups trong Caterogy
  • Trong hộp thoại chỉnh sửa giao diện ta thấy có sẵn một Popup Memu có tên là Menu, ta chọn nó và xoá nó bằng Click vào nút Delete.
  • Nhấn vào nút New Popup. Một Popup Menu mới được tạo ra.
  • Nhấn vào nút New Item để tạo mới một menu con cho Popup menu này. Vào mục Label đặt tên cho menu con này là Popup1
  • Đóng hộp thoại chỉnh sửa, ra khung nhìn, kích chuột phải vào khung nhìn ta thấy xuất hiện như sau

Khi ta nhấn vào Popup1 ta không thấy có sự kiện nào xảy ra, điều này do ta chưa gán một script nào cho sự kiện click của Popup1.
Bây giờ ta tiến hành gán một script cho sự kiện click của Popup1.
  • Mở hộp thoại chỉnh sửa giao diện
  • Chọn Popup1
  • Kích đôi vào mục Click, hộp thoại yêu cầu xác định script cho menu này xuất hiện.
  • Nhấn vào nút New trong hộp thoại Script Manager để tạo mới một script. Đặt tên cho script này là Popup1
  • Trong giao diện soạn thảo script, ta gõ vào script sau.
    msgbox.info(“Wow, Ban vua click vao toi ” ,”Thong bao”)
  • Đóng giao diện soạn thảo script, quay về của sổ giao diện khung nhìn, nhấn phải chuột vào khung nhìn, click vào Popup1, lúc đó màn hình xuất hiện hộp thoại thông điệp như sau.

Để xoá Popup menu mới tạo ta vào hộp thoại chỉnh sửa giao diện, chọn Popup menu này và nhấn vào nút Delete.
Ngoài ra các Menu, Button, Tool, Popup Menu còn các thuộc tính sau:
Disabled: Xét tính kích hoạt hay không kích hoạt cho đối tượng
Help Topic: Nội dung giúp đỡ
Invisible: Hiển thị hay không hiển thị đối tượng này
Tag: Một chuỗi được gán vào đối tượng để phân biệt với đối tượng khác

Update: Update là sự kiện xảy ra khi ta thực hiện một thao tác nào đó, để có sự kiện này ta phải gán Script vào sự kiện này cho đối tượng.

2. GIAO DIỆN TÀI LIỆU NGƯỜI DÙNG DocGUI

Một giao diện tài liệu người dùng (DocGUI) là một tập các điều khiển trên giao diện của một loại tài liệu cụ thể. Ví dụ loại tài liệu khung nhìn có chung một giao diện tài liệu người dùng mà tài liệu giao diện người dùng này gồm có các Menu, các Button, các Tool và các PopupMenu.
Avenue dùng đối tượng av hay đối tượng project để quản lý tất cả các tài liệu giao diện người dùng.
Ví dụ:
Lấy về tên của tất cả các loại tài liệu giao diện người dùng trong một Project
alist=av.getProject.GetGUIs
MsgBox.MultiList (alist, “Tai lieu giao dien nguoi dung”,”Tai lieu giao dien nguoi dung”)
Chạy được

Kết quả chạy script này như sau:

Vậy trong một Project của ArcView có tất cả 7 loại tài liệu giao diện người dùng: View, Table, Chart, LayOut, Script, Project, Appl
Chú ý một tài liệu giao diện người dùng có nhiều tài liệu ứng với nó.Ví dụ tài liệu giao diện khung nhìn (View) có rất nhiều khung nhìn ứng với nó, đó là tất cả các khung nhìn ta tạo ra trong Project.
Ví dụ sau lấy về thanh ToolBar trong tài liệu giao diện người dùng View
theView=av.FindGUI(“view”) ‘ tìm tài liệu giao diện người dùng view
theToolBar=theView.getToolBar ‘ lấy về thanh ToolBar trong cửa sổ khung nhìn (view)
Ví dụ tìm tài liệu khung nhìn có tên là “Ban do tinh dong thap”
myView=av.FindDoc(“ban do tinh dong thap”)
if (myView <>nil) then ‘ nếu có
‘…
end
Ví dụ tìm giao diện tài liệu khung nhìn ứng với tài liệu có tên là “Ban do tinh dong thap”
myGui=av.FindGUI(“Ban do tinh dong thap”)

3. CÁC LỚP ĐỐI TƯỢNG ĐIỀU KHIỂN

Giao diện tài liệu người dùng (DocGUI) là tập tất cả các điều khiển mà ta có thể sử dụng để tương tác với tài liệu đó. Chẳng hạn trong cửa sổ khung nhìn (View) ta có các loại điều khiển là Menubar, Buttonbar, Toolbar và Popup Menu.
Avenue dùng các lớp để quản lý các điều khiển này, ngoài cách ta dùng hộp thoại chỉnh sửa giao diện để thêm mới, xoá, sửa một điều khiển ta còn có thể viết lệnh để điều khiển các đối tượng này.

3.1 Lớp MenuBar

Lớp MenuBar quản lý tất cả các Menu trên thanh MenuBar (ví dụ menu File, menu Edit, menu View… trong của sổ khung nhìn). Để tạo mới một menu con trong Menu (ví dụ tạo mới menu con Cut Themes, Copy Themes trong menu Edit) ta dùng lớp Menu con là Choice.

Bản thân Menu là một danh sách, nó xem các Menu con, các dấu cách là các phần tử của nó.
Ví dụ sau hiển thị tất cả các menu con trong menu Theme cửa sổ khung nhìn.
aMenu = av.GetActiveGUI.GetMenuBar.FindByLabel (“Theme”)
for each c in aMenu
if (c.getClass.getClassname=”Choice”) then msgbox.info(c.getLabel,”SubMenu”)
end
end
Ví dụ sau thực hiện việc tạo mới một Menu có tên là “Khung nhin”, trong menu “Khung nhin” có các menu con là “Phong to” và “Thu nho”
theMenuBar = av.GetActiveGUI.GetMenuBar
aMenu=Menu.Make
aMenu.setLabel(“Khung nhin”)
‘ gan menu nay vao thanh menubar
theMenuBar.Add(aMenu,theMenuBar.getControls.count)
aChoice=Choice.Make
aChoice.setLabel(“Phong to”)
aChoice.setClick(“Phongto”) ‘ gắn script có tên là phóng to vào menu con này
aMenu.Add(aChoice,aMenu.getControls.count)
aChoice=Choice.make
aChoice.setLabel(“Thu to”)
aChoice.setClick(“Thunho”) ‘ gắn script có tên là thu nhỏ vào menu con này
aMenu.Add(aChoice,aMenu.getControls.count)
( nó hiện trong cửa sổ Project )
Để xoá một menu trên thanh MenuBar ta dùng yêu cầu theMenubar.Remove(aMenu) trong đó aMenu là Menu cần xoá.
Để xoá một menu con trong menu ta dùng yêu cầu aMenu.Remove(aChoice), trong đó aChoice là Menu con trong aMenu.

Các yêu cầu của lớp Menu

Các yêu cầu của lớp Menu con (Choice)

3.2 Lớp ButtonBar

Lớp ButtonBar quản lý tất cả các Button trên thanh ButtonBar. Ta dùng lớp Button để tạo mới một Button trước khi gán Button này vào thanh Buttonbar
Ví dụ đếm số lượng Button trên thanh ButtonBar trong cửa số hiện hành.
theButtonBar = av.GetActiveGUI.GetButtonBar
msgbox.info(“So luong button tren thanh ButtonBar: “ + theButtonBar.getControls.count.Asstring ,” So luong Button”)
Ví dụ thêm mới một Button vào thanh ButtonBar trong cửa sổ hiện hành.
theView = av.GetActiveGUI ‘ lấy về giao diện tài liệu khung nhìn
theButtonBar=theView.getButtonBar ‘ lấy về thanh ButtonBar
aButton=Button.Make ‘ tạo mới một Button
‘ lấy Icon có tên là Down gán vào Button
for each ico in IConMgr.GetIcons
if (ico.getName=”Down”) then
tmp=ico
end
end
aButton.SetIcon(tmp)
aButton.setClick(“test”) ‘ gán script test vào sự kiện click của button
theButtonBar.Add(aButton,theButtonbar.getControls.count)
( gán một button tren cửa sổ Project )
Để xoá một Button trên thanh ButtonBar ta dùng yêu cầu theButtonBar.remove(aButton), trong đó aButton là Button mà ta cần xoá đi.

Các yêu cầu của lớp Button

3.3 Lớp Toolbar

Lớp ToolBar quản lý tất cả các Tool, ToolMenu. ToolMenu là một danh sách các Tool.

Ví dụ thêm mới một ToolMenu vào thanh ToolBar.
aToolMenu=ToolMenu.make
controls=aToolMenu.getControls
numTools=msgbox.input(“Nhap vao so luong Tool: ” ,”ToolMenu”, “2”)
if ((numTools=nil) or (numTools.IsNumber.Not)) then
exit
else
numTools=numTools.AsNumber
end
for each i in 1..numTools
controls.Add(Tool.make)
end
theGui=av.getActiveGUI
theGUI.getToolBar.add(aToolMenu,-1)
Để xoá một Tool trong thanh ToolBar ta dùng yêu cầu theToolBar.Remove(aTool), trong đó aTool là Tool mà ta cần xoá.

Các yêu cầu của lớp Tool

Các yêu cầu của lớp ToolMenu

3.4 Lớp PopupSet

Lớp Popupset quản lý tất cả các Popup menu trong một giao diện tài liệu người dùng nào đó. Mỗi Popup Menu có các Menu con quản lý bởi lớp Choice.
Ví dụ lấy về toàn bộ các Popup menu trong cửa sổ khung nhìn
theView=av.FindGui(“View”)
thePopupset=theView.GetPopups
for each pop in thePopupset
msgbox.info(“Ten: “ + pop.getLabel, “Popup menu”)
end
Để xoá một Popup menu ta dùng yêu cầu thePopupset.remove(aMenu), trong đó aMenu là PopupMenu mà ta cần xoá.
Để xoá một Menu con trong Popup menu ta dùng yêu cầu aMenu.remove(aChoice), trong đó aChoice là Popup menu con ta cần xoá.

Các yêu cầu của lớp PopupMenu

4 VÍ DỤ

Ví dụ 1: Tạo mới một Menu gồm các menu con như sau

Khi ta chọn vào mục “Phong to” thì khung nhìn sẽ phóng to, khi ta chọn vào mục “Thu nho” thì khung nhìn sẽ thu nhỏ.

Hướng dẫn:

Dùng hộp thoại chỉnh sửa giao diện tạo ra Menu Khung nhìn có 2 menu con là “Phong to” và “Thu nho”.

Gán script sau vào sự kiện Click trong menu “Phong to”

theView = av.GetActiveDoc ‘ lấy về khung nhìn đang xét
theView.GetDisplay.ZoomIn(125) ‘ thực hiện thao tác phóng to

Gán script sau vào sự kiện click trong menu “Thu nho”

theView = av.GetActiveDoc
theView.GetDisplay.ZoomOut(125)
GetDisplay trả về khu vực hiển thị trên khung nhìn, ZoomIn và ZoomOut thực hiện thao tác phóng to hay thu nhỏ vùng hiển thị.

Ví dụ 2: Tạo mới một Tool, Tool này cho phép xác định toạ độ trên khung nhìn

Hướng dẫn:
Dùng hộp thoại chỉnh sửa tạo ra một Tool mới, gán script sau vào sự kiện Apply của Tool này.
theView = av.GetActiveDoc
‘ lấy về điểm trên khung nhìn
p=theView.GetDisplay.ReturnUserPoint
‘ Hiển thị toạ độ của điểm này
msgbox.info(“Toa do X: ” + p.GetX.AsString + “ Toa do Y: “ + p.GetY.Asstring ,”Toa do”)

Ví dụ 3: Thêm một menu con có tên là GUI vào menu View trong giao diện khung nhìn, khi chọn menu này thì sẽ xuất hiện câu thông báo đang làm việc ở giao diện tài liệu người dùng nào. Giải bằng hai cách dùng hộp thoại chỉnh sửa giao diện và bằng viết lệnh.

Hướng dẫn:
Dùng hộp thoại chỉnh sửa giao diện
Thêm vào Menu View một menu con GUI.
Trong sự kiện click của menu này ta gán vào script có tên ViewGUI với nội dung như sau.
Msgbox.info(“GUI hien tai: ” + av.GetActiveGUI.GetType ,”GUI”)
Dùng cách viết lệnh
Tạo một script có tên MakeMenu có nội dung như sau:
theGui=av.FindGui(“View”)
theMenuBar=theGui.GetMenuBar
theMenu=theMenuBar.FindByLabel(“view”)
aChoice=Choice.Make
aChoice.setLabel(“GUI”)
aChoice.setClick(“ViewGUI”)
theMenu.Add(aChoice, theMenu.getControls.count)

Bài tập

Bài tập 1: Trong cửa sổ tài liệu khung nhìn tạo mới 3 Button như sau. Khi nhấn vào Button có nhãn là 1 thì mất Button có nhãn là 2, Khi nhấn vào Button có nhãn là 2 thì mất Button có nhãn là 1, Khi nhấn vào Button có nhãn là 3 thì xuất hiện cả hai Button có nhãn là 1 và 2.
Bài tập 2.
Viết script thêm một Menu con có tên là NumRow vào Menu Table trong tài liệu giao diện người dùng Table.
Bài tập 3.
Viết Script xuất ra tên của tất cả các khung nhìn trong Project hiện tại.

Nguồn:”Bài giảng Lập trình Avenue – GV Nguyễn Văn Xanh – Đại học công nghệ thông tin”

Previous article[Ngôn ngữ Avenue #2]Cấu trúc ngôn ngữ Avenue
Next article[Ngôn ngữ Avenue #4]Khung nhìn và lớp chủ đề

LEAVE A REPLY

Please enter your comment!
Please enter your name here

Website này sử dụng Akismet để hạn chế spam. Tìm hiểu bình luận của bạn được duyệt như thế nào.