Monday, October 26, 2009

Dùng ActiveX (.OCX) để đưa chương trình vào System Tray

Dùng ActiveX (.OCX)
để đưa chương trình vào System Tray

Để đưa được chương trình của mình vào System Tray chúng ta cần phải lập trình, cũng không có gì phức tạp lắm. Tuy nhiên cách nhanh nhất là dùng một ActiveX (tập tin .OCX) để giúp chúng ta dễ dàng đưa chương trình của mình vào System tray mà không hề tốn một giọt mồ hôi. Tôi xin giới thiệu với các bạn một ActiveX tên là ZTray dùng trong các phiên bản Visual Basic 32 bit (hoàn toàn free). Bạn chỉ cần tạo đối tượng này vào chương trình & đặt các thuộc tính thích hợp cho nó tức thì chương trình của bạn bay cái vèo vào System Tray, thiệt hết ý.

Bắt đầu với ZTray control

()) Đặc điểm

- Chỉ cần tạo một đối tượng duy nhất , nó sẽ hoá phép cho chương trình của bạn bay vào System Tray.

- Biểu tượng (Icon) của chương trình trong System Tray phải là file biểu tượng (*.ico).

- Icon này phải được đặt trong một ImageList, kích thước không thành vấn đề.

- Nếu bạn không chỉ định Icon, nó sẽ tự động lấy Icon mặc định của nó (là quả địa cầu, trông xấu tệ).

- & còn nhiều thứ nữa ....

()) Một số thuộc tính & sự kiện

Ngoài những thuộc tính, sự kiện bình thường của một đối tượng trong môi trường VB. ZTray còn có các thuộc tính đặc sau.

* ImageList Property

Thuộc tính này để bạn có thể gán cho nó một ImageList. Trong ImageList này chứa (các) Icon mà nó dùng làm biểu tượng chương trình trong System Tray. Chỉ có thể thay đổi lúc Design, lúc chương trình đang chạy bạn không thay đổi được thuộc tính này đâu.

Cú pháp: ZTray.ImageList [=value]

[value] Chính là tên của ImageList (kiểu String)

- Nếu không có ImageList nó sẽ tự động xài cái Icon mặc định của mình.

- Nếu bạn có thay đổi biểu tượng lúc chương trình thực thi bạn phải chủ động để nó biết bằng cách thay đổi chuộc tính ImageNumber hoặc gán ShowInTray = True (ngay cả khi nó đang là True).

- Nhắc lại nữa: Biểu tượng phải là icon file.

* ShowInTray Property

Nhận giá trị Boolean (TRUE/FALSE). True nghĩa là cho hiện Icon trong System Tray. Là False thì ngược lại.

Cú pháp: ZTray.ShowInTray [=value]

[value] là True hay False

- ShowInTray sẽ có hiệu lực ngay khi chương trình bắt đầu Run.

- Có thể gán bạn True để Update cho Icon trong System Tray nếu có thay đổi.

* ImageNumber Property

Thuộc tính này dùng để gán hoặc truy xuất thứ tự của Image mà ZTray dùng làm Icon cho chương trình. Giá trị này là chỉ số của Image trong một ImageList.

Cú pháp: ZTray.ImageNumber [=value]

[value] Chỉ số của image trong ImageList mà ZTray dùng làm biểu tượng (làm một Integer).

Biểu tượng tự động cập nhật khi thuộc tính này có sự thay đổi.

* TipText Property
Dùng để gán hoặc truy xuất đến ToolTip của đối tượng, ToolTip này sẽ tự động xuất hiện khi bạn rê mouse đến trên biểu tượng trong System Tray.

Cú pháp: ZTray.TipText [=value]

[value] Là một String. Độ dài tối đa là 64 ký tự, nếu bạn cố tình cho một string quá dài, nó tự động cắt bớt.

- Sẽ có tác dụng ngay lập tức nếu thay đổi.

* Click Event

Xẩy ra khi người dùng click nút (trái hay phải) chuột vào Icon trong System Tray.

Cú pháp: Private Sub ZTray_Click (Button as integer)

[Button] cho biết nút nào được nhấn.

1 là Left Mouse Button

2 là Right Mouse Button

* DblClick Property

Xẩy ra khi người dùng Double click vào Icon trong System Tray (cả trái lẫn phải đều được công nhận một cách rõ ràng).

Cú pháp:

Private Sub ZTray_DblClick (Button as integer)

[Button] cho biết nút nào được nhấn.

1 là Left Mouse Button

2 là Right Mouse Button

()) Minh họa cách sử dụng

1. Chuẩn bị:

Sau đây là một chương trình thí dụ minh họa cách sử dụng đối tượng ZTray.

Đầu tiên bạn hãy chuẩn bị tập tin ZTray.ocx, nếu chưa có hãy vào WebLH tải về, mở nén vào thư mục System của Windows.

Bạn hãy khởi động VB, tạo một Project mới để bắt đầu cuộc thử nghiệm.

2. Đưa ZTray vào đề án:

Project / Components hoặc dùng tổ hợp phím Ctrl - T để mở cửa sổ Components. Cick chọn ActiveX tên ZTray System Tray Control.

Nếu chưa có trong Danh sách bạn có thể Click nút Browse để chọn tập tin ZTray.ocx từ một thư mục nào đó

Vì ZTray đòi hỏi có một ImageList nên bạn phải click chọn thêm "Microsoft Windows Common Controls 6.0".

Click OK bạn sẽ thấy ZTray Control xuất hiện trên hộp ToolBox của VB.

3. Thiết kế:

Trên Form1, bạn tạo một ImageList tên là ImageList1 & một ZTray tên là ZTray1. Và tạo các menu có tên tương ứng như sau:

Caption Name Checked
PopUp mnuPopUp
Set ToolTips mnuTips
Show In Tray mnuShow True
About mnuAbout
Exit mnuExit

Click phải chuột lên ImageList1 vừa tạo khi nãy, chọn Properties, chọn tiếp thẻ Images, dùng nút Insert Picture để thêm vào một số Image (nhớ là phải dùng Icon file). Đại loại như sau, vậy là ta có 7 hình (tứ 1 đến 7). Click OK để đóng hộp thoại này lại.

Lại click phải lên ZTray1 vừa tạo. Nhập vào khung ImageList là ImageList1, ImageNumber là 1 (ảnh đầu tiên trong ImageList1), TipText: nhập đại một vài chữ, xong click OK.

Sau đó tiến hành viết code cho chương trình như sau

Option Explicit

Private Sub Form_Load()

ZTray1.ImageNumber = 1

ZTray1.ShowInTray = True

End Sub

Ngay lúc form được nạp, đặt chỉ số cho ImageNumber & cho hiện biểu tượng trong System Tray.

Private Sub Form_Unload(Cancel As Integer)

ZTray1.ShowTray = True

Visible = False

Cancel = 1

End Sub

Khi người dùng click nút close trên thanh Title bar, chương trình sẽ không thoát mà chỉ ẩn form đi thôi. Nhưng trước khi giấu Form nó lại cho hiện Icon nếu lúc đó ẩn để tránh trường hợp cả Form lẫn Icon đều biến mất.

Private Sub mnuAbout_Click()

'About

MsgBox "ZTray Demo by Thien Dang 30/07/2000"

End Sub

Private Sub mnuExit_Click()

'Exit

End

End Sub

Thoát khi chương trình bằng lịnh Exit trong menu.

Private Sub mnuIcon_Click()

' Set Icon

ZTray1.ImageNumber = InputBox("Image (1 - 7) ?", "Icon", 1)

End Sub

Thay đổi Icon cho ZTray. Ta có thể nhập vào số từ 1 đến 7 do có 7 Image như đã nói ở trên.

Private Sub mnuShow_Click()

'Show In Tray

mnuShow.Checked = Not (mnuShow.Checked)

ZTray1.ShowInTray = mnuShow.Checked

If mnuShow.Checked = False Then Visible = True

End Sub

Chức năng này có nhiệm vụ bật tắt cái Icon của chương trình. Khi bạn tắt nó sẽ tự hiển thị form lên để tránh trường hợp cả Icon lẫn form đều mất tích.

Private Sub mnuTips_Click()

' Set Tooltips

ZTray1.TipText = InputBox("Your text here", "Enter TipText", "Text")

End Sub

Thay đổi ToolTip. Độ dài tối đa 64 ký tự.

Private Sub ZTray1_Click(button As Integer)

If button = 1 Then

Me.Visible = True

SetFocus

Else

PopupMenu mnuPopUp

End If

End Sub

Nếu click nút trái thì hiện Form, nút phải thì hiện menu.

Bây giờ bạn có thể chạy thử chương trình của mình rồi đấy. Bạn có thể click phải chuột trên Icon trong System Tray để truy xuất menu.

Với ActiveX này tôi hy vọng bạn đỡ phải nhọc công khi cần đưa chương trình của mình vào System Tray

No comments:

Post a Comment