Vn-Screen Forum
Bạn có muốn phản ứng với tin nhắn này? Vui lòng đăng ký diễn đàn trong một vài cú nhấp chuột hoặc đăng nhập để tiếp tục.



 
Trang ChínhTrang Chính  GalleryGallery  Latest imagesLatest images  Tìm kiếmTìm kiếm  Đăng kýĐăng ký  Đăng NhậpĐăng Nhập  
Bài Viết MớiTin NóngThống kê

Share | 
 

 Chương Mười - Dùng Menu (Học visual basic 6.0)

Xem chủ đề cũ hơn Xem chủ đề mới hơn Go down 
Tác giảThông điệp
TjaGoChangLj
Administrator
Administrator
TjaGoChangLj

Thanked : 14


Chương Mười - Dùng Menu (Học visual basic 6.0) _
Bài gửiTiêu đề: Chương Mười - Dùng Menu (Học visual basic 6.0)   Chương Mười - Dùng Menu (Học visual basic 6.0) Empty16/6/2011, 1:50 pm

Khóa Hàm Thụ Visual Basic 6.0


Chương Mười - Dùng Menu





Menu trong Windows là nơi tất cả các commands của một program được sắp
xếp thứ tự theo từng loại để giúp ta dùng dễ dàng.
Có hai loại menu ta thường gặp: drop-down (thả xuống) menu
pop-up (hiện lên) menu. Ta dùng drop-down menu làm Menu chánh cho chương trình. Thông thường nó nằm ở
phía trên chóp màn ảnh. Nằm dọc theo chiều ngang là Menu Bar, nếu ta click lên một command trong Menu Bar
thì program sẽ thả
xuống một menu với những MenuItems nằm dọc theo chiều thẳng đứng. Nếu ta click lên MenuItem nào có
dấu hình tam giác nhỏ bên phải thì program sẽ popup một Menu như trong hình dưới đây (khi ta click Format | Make Same Size):
<blockquote>Chương Mười - Dùng Menu (Học visual basic 6.0) VB6IDEMenu</blockquote>
Main Menu


Ta dùng Menu Editor để tạo hoặc sữa một Menu cho program. Menu thuộc về một Form. Do
đó, trước hết ta select một Form để làm việc với Designer của nó (chớ không phải code của Form).
Kế đó ta dùng Menu Command Tools | Menu Editor hay click lên icon của Menu Editor trên Toolbar để
làm cho Menu Editor hiện ra.

<blockquote>Chương Mười - Dùng Menu (Học visual basic 6.0) GetMenuEditor</blockquote>
Đầu tiên có một vệt màu xanh nằm trong khung trắng của Menu Editor, nơi sẽ hiển thị Caption của Menu Command
đầu tiên của Form. Khi ta đánh chữ &File vào Textbox Caption, nó cũng hiện ra trên vệt xanh nói trên.
Kế đó, bạn có thể đánh tên của Menu Command vào Textbox Name. Dù ta cho Menu Command một tên nhưng ta ít khi dùng nó, trừ
trường hợp muốn nó visible/invisible (hiện ra/biến mất). Bình thường ta dùng tên của MenuItems nhiều hơn.

<blockquote>Chương Mười - Dùng Menu (Học visual basic 6.0) StartMenu</blockquote>
Để có một Menu như trong hình dưới đây ta còn phải edit thêm vào các MenuItems Open, Save, Close và Exit.
<blockquote>Chương Mười - Dùng Menu (Học visual basic 6.0) FileMenu</blockquote>
Hình dưới đây cho thấy tất cả các MenuItems của Menu Command
File đều nằm thụt qua bên phải với bốn dấu chấm (....) ở phía trước. Khi ta click dấu tên chỉ qua phải
thì MenuItem ta đang Edit sẽ có thêm bốn dấu chấm, tức là thụt một bậc trong Menu (Nested).
<blockquote>Chương Mười - Dùng Menu (Học visual basic 6.0) FullMenu</blockquote>
Tương tự như vậy, khi ta click dấu tên chỉ qua trái
thì MenuItem ta đang Edit sẽ mất bốn dấu chấm, tức là trồi một bậc trong Menu.

Nếu muốn cho User dùng Alt key để xử dụng Menu, bạn đánh thêm dấu & trước character
bạn muốn trong menu Caption. Thí dụ Alt-F sẽ thả xuống Menu của Menu Command File.

Nếu bạn đặt cho MenuItem &Open tên mnuOpen, thì khi bạn Click lên Caption nó trên Form
trong lúc thiết kế,
VB6 IDE sẽ hiển thị cái vỏ của Sub mnuOpen_Click(), giống như Sub cmdButton_Click() của một CommandButton:


Private Sub mnuOpen_Click()
MsgBox "You clicked mnuOpen"
End Sub
Trong thí dụ trên ta đánh thêm một Statement để hiển thị một message đơn giản "You clicked mnuOpen".
Bạn có thể đặt cho một MenuItem tên gì cũng được, nhưng người ta thường dùng prefix mnu
để dễ phân biệt một menuItem Event với một CommandButton Event. Do đó, ta có những tên mnuFile, mnuOpen, mnuSave,
mnuClose, mnuExit.

Cái gạch ngang giữa MenuItems Close và Exit được gọi là Menu Separator. Bạn có thể
nhét một Menu Separator bằng cách cho Caption nó bằng dấu trừ ( - ).

Ngoài Alt key ta còn có thể cho User dùng Shortcut của menuItem. Để cho MenuItem một Shortcut, bạn chọn
cho nó một Shortcut từ ComboBox Shortcut trong Menu Editor.
Trong hình dưới đây ta chọn Ctrl+O cho mnuOpen.
<blockquote>Chương Mười - Dùng Menu (Học visual basic 6.0) Shortcut</blockquote>
By default, menuItem được Enabled và Visible. Lúc thiết kế bạn có thể cho MenuItem giá trị khởi đầu của Enabled và
Visible bằng cách dùng Checkboxes Enabled và Visible.
Trong khi chạy program (at runtime), bạn cũng có thể
thay đổi các values Enabled và Visible như sau:

mnuSave.Enabled = False
mnuOpen.Visible = False
Khi một MenuItem có Enabled=False thì nó bị mờ và user không dùng được.

Bạn dùng các dấu mũi tên chỉ lên và xuống để di chuyển MenuItem đã được selected lên và xuống trong danh sách
các MenuItems. Bạn dùng button Delete để hủy bỏ MenuItem đã được selected, Insert để nhét
một MenuItem mới ngay trên MenuItem đã được selected và Next để chọn MenuItem ngay dưới MenuItem đã được selected.
<blockquote>Chương Mười - Dùng Menu (Học visual basic 6.0) Menucopy</blockquote>
Pop-up Menu


Đối với User, đang khi làm việc với một Object trong Windows tiện nhất là ta có thể làm hiển thị Context Menu (Menu
áp dụng cho đúng tình huống) bằng một Mouse click. Thông thường đó là Right Click và cái Context Menu còn được gọi
Pop-up Menu. Chính cái Pop-Up menu thật ra là Drop-down menu của một Menu Bar Command.
Bình thường Menu Bar Command ấy có thể visible hay invisible (tàn hình).

Trong hình dưới đây, khi User Right click trên Form, mnuEdit sẽ hiện lên. Nếu bình thường bạn không muốn
cho User dùng nó trong Main Menu thì bạn cho nó invisible:
<blockquote>Chương Mười - Dùng Menu (Học visual basic 6.0) PopUp</blockquote>
Code làm cho Popup menu hiện lên được viết trong Event Mousedown của một Object mà tình cờ ở đây là của
chính cái Form:
Private Sub Form_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)
' Popup the Edit Menu if User clicked the Right Button of the Mouse
If Button = vbRightButton Then
PopupMenu mnuEdit
End If
End Sub
Ngay cả khi bạn muốn cho mnuEdit bình thường là invisible, bạn cũng nên để cho nó visible trong lúc đầu
để tiện bỏ code vào dùng để xử lý Click Events của những MenuItems thuộc về mnuEdit như mnuCopy, mnuCut và mnuPaste.
Chứa menu Settings trong Registry


Giả tỉ program bạn cho User một Option WordWrap như dưới đây:
<blockquote>Chương Mười - Dùng Menu (Học visual basic 6.0) WordWrap</blockquote>
Bạn muốn Program nhớ Option mà User đã chọn, để lần tới khi User khởi động program thì Option WordWrap
còn giữ nguyên giá trị như cũ.

Cách tiện nhất là chứa value của Option WordWrap như một Key trong Registry. Registry là một loại cơ sở dữ liệu đặc biệt của Windows Operating System
dùng để chứa những dữ kiện liên hệ đến Users, Hardware, Configurations, ActiveX Components ..v.v. dùng trong computer.
Trong Registry, data được sắp đặt theo từng loại theo đẳng cấp. Bạn có thể Edit trực tiếp trị số các Keys trong Registry
bằng cách dùng Registry Editor.
<blockquote>Chương Mười - Dùng Menu (Học visual basic 6.0) RegistryEditor</blockquote>
Trong program nầy ta cũng nhân tiện bắt program nhớ luôn vị
trí của Form khi program ngừng lại, để lần tới khi User khởi động program thì program sẽ có vị trí lúc đầu giống y
như trước.

Ta sẽ dùng Sub SaveSetting để chứa Checked value của mnuWordWrap và Left, Top
của Form. Code ấy ta sẽ để trong Sub Form_QueryUnload vì nó sẽ được executed trước khi Form Unload.

Private Sub Form_QueryUnload(Cancel As Integer, UnloadMode As Integer)
SaveSettings
End Sub
Private Sub SaveSettings()
' Save Location of the form
SaveSetting App.Title, "Location", "Left", Me.Left
SaveSetting App.Title, "Location", "Top", Me.Top
' Save the setting of WordWrap in menu
SaveSetting App.Title, "Settings", "WordWrap", mnuWordWrap.Checked
End Sub
App.Title là Tựa đề của program. Thông thường nó là tên của VB Project, nhưng bạn có thể sữa nó trong
Project Property Dialog (Tab Make) :
<blockquote>Chương Mười - Dùng Menu (Học visual basic 6.0) ProjectProperty</blockquote>
Khi chứa value của một thứ gì (ta gọi là Key) vào Registry bạn có thể sắp đặt cho nó nằm trong Section nào
tùy ý. Ở đây ta đặt ra hai Sections tên Location để chứa Top,Left của Form và tên Settings để
chứa Key mnuWordWrap.Checked.

Muốn cho program có các giá trị của Keys chứa trong Registry khi nó khởi động ta chỉ cần dùng Function GetSetting
trong Sub Form_Load để đọc vào từ Registry như dưới đây:

Private Sub Form_Load()
' Initialise Location of the form by reading the Settings from the Registry
Me.Left = Val(GetSetting(App.Title, "Location", "Left", "0"))
Me.Top = Val(GetSetting(App.Title, "Location", "Top", "0"))
' Initialise setting of WordWrap in the menu
mnuWordWrap.Checked = ( GetSetting(App.Title, "Settings", "WordWrap", "False") = "True" )
End Sub
Lúc đầu khi chưa có gì trong Registry thì "0" (string "0" được converted bởi Val ra 0)
là default value cho Left và Top, còn "False" là default value của mnuWordWrap.Checked.

Ngoài ra ta cũng muốn program nhớ tên của ba Files User dùng gần đây nhất. Tức là trong Drop-down của
Menu Command File sẽ có MenuItem Recent Files để hiển thị từ một đến ba tên Files, cái mới nhất nằm
trên hết. Trước hết, ta cần tạo ra 3 SubmenuItem có cùng tên mnuRFile nhưng mang Index bằng 0,1 và 2 (bạn đánh vào Textbox Index). Ta sẽ dùng
Captions của chúng để hiển thị tên các Files. Lúc chưa có Filename nào cả thì MenuItem Recent Files sẽ bị
làm mờ đi (tức là mnuRecentFiles.Enabled = False ).

Ta sẽ chứa tên các Files như một String trong Section Settings của
Registry. Ta phân cách tên các Files bằng delimiter character |.
Thí dụ: "LattestFileName.txt|OldFileName.txt|OldestFilename.txt"
Mỗi lần User Open một File ta sẽ thêm tên File ấy vào trong Registry và bất cứ lúc nào chỉ giữ lại tên của 3 Files
mới dùng nhất.
<blockquote>Chương Mười - Dùng Menu (Học visual basic 6.0) IndexMenu</blockquote>
Dưới đây là code dùng để thêm tên File mới dùng nhất vào Registry:

Private Sub mnuOpen_Click()
' Initialise Folder in Common Dialog
CommonDialog1.InitDir = App.Path
' Launch the dialog
CommonDialog1.ShowOpen
' Save the Filename in the Registry, using Object myRecentFiles
myRecentFiles.AddFile CommonDialog1.FileName
End Sub
Code dùng trong Sub Form_Load để đọc tên RecentFiles và hiển thị trong Menu:
'
Set myRecentFiles = New clsRecentFiles
' Pass the form handle to it
' This effectively loads the most recently used FileNames to menu
myRecentFiles.Init Me

<blockquote>Chương Mười - Dùng Menu (Học visual basic 6.0) RecentFiles</blockquote>
Ta sẽ dùng một Class tên clsRecentFiles để đặc biệt lo việc chứa tên Files vào Registry và hiển thị tên các Files
ấy trong Menu. Bên trong clsRecentFiles ta cũng dùng clsString, là một Class giúp ta ngắt khúc String trong Registry ra
tên của các Files dựa vào chỗ các delimiter character |.
' Author: Le Duc Hong [You must be registered and logged in to see this link.]
' Class Name: clsRecentFiles
' This Class saves the most Recent FileNames used in the Registry in form of
' a String delimited by |.
' Up to MaxFiles Filenames maybe stored.
' You need to pass the Form that contains the menu to it.
' The assumption is that you have created an array of MenuItems named mnuRFile
' to display the FileNames
'
Const MaxFiles = 3 ' Maximum number of FileNames to remember
Private myForm As Form
Private RecentFiles As clsString
Public Sub Init(TForm As frmMenu)
Set myForm = TForm
Set RecentFiles = New clsString
' Read the Most Recent Filename String from the Registry
RecentFiles.Text = GetSetting(App.Title, "Settings", "RecentFiles", "")
' Assign the Delimiter character and tokennise the String (i.e. split it) into FileNames
RecentFiles.Delimiter = "|"
UpdateMenu
End Sub
Public Sub AddFile(FileName As String)
' Add the latest FileName to the list and update the Registry
' Prefix the FileName to the existing MostRecentFileName String
RecentFiles.Text = FileName & "|" & RecentFiles.Text
' Discard the oldest FileNames if the total number is greater than MaxFiles
If RecentFiles.TokenCount > MaxFiles Then
Dim TStr As String
Dim i As Integer
' Reconstitute the String that contains only the most recent MaxFiles FileNames
For i = 1 To MaxFiles
TStr = TStr & RecentFiles.TokenAt(i) & "|"
Next
' Remove the last delimiter character on the right
RecentFiles.Text = Left(TStr, Len(TStr) - 1)
End If
' Update the String in the Registry
SaveSetting App.Title, "Settings", "RecentFiles", RecentFiles.Text
UpdateMenu
End Sub

Private Sub UpdateMenu()
' Display the most recent Filenames in the menu
Dim i As Integer
' If there is no FileNames to display then disable the MenuItem entry
If RecentFiles.TokenCount = 0 Then
myForm.mnuRecentFiles.Enabled = False
Exit Sub
Else
' Otherwise enable the MenuItem entry
myForm.mnuRecentFiles.Enabled = True
End If
' Assign FileName to Caption of mnuRFile array and make the MenuItem elements visible
For i = 1 To RecentFiles.TokenCount
myForm.mnuRFile(i - 1).Caption = RecentFiles.TokenAt(i) ' Assign to Caption
myForm.mnuRFile(i - 1).Visible = True ' Make the MenuItem visible
If i = MaxFiles Then Exit For ' This line maybe unnecessary
Next
' Make the rest of the MenuItem array mnuRFile invisible if there are less than MaxFiles
If RecentFiles.TokenCount < MaxFiles Then
For i = RecentFiles.TokenCount To MaxFiles - 1
myForm.mnuRFile(i).Visible = False
Next
End If
End Sub
Bạn có thể chạy Line Command RegEdit sau khi click Start | Run
<blockquote>Chương Mười - Dùng Menu (Học visual basic 6.0) RunRegEdit</blockquote>
để xem chi tiết của các Keys mà program đã chứa trong Sections LocationSettings của Folder HKEY_CURRENT_USER\Software\VB and VBA Program Settings\Menu
<blockquote>Chương Mười - Dùng Menu (Học visual basic 6.0) Registry</blockquote>
Bạn có thể download source code của program mẫu nầy kể cả class clsRecentFiles.
Chữ Ký Cá Nhân
Về Đầu Trang Go down
 

Chương Mười - Dùng Menu (Học visual basic 6.0)

Xem chủ đề cũ hơn Xem chủ đề mới hơn Về Đầu Trang 
Trang 1 trong tổng số 1 trang

Permissions in this forum:Bạn không có quyền trả lời bài viết
Vn-Screen Forum :: Công Nghệ Thông Tin :: Khu Lập Trình :: Visual Basic-
VN-SCREEN.DARKBB.COM
Design by N.H.M - Developed by Vn-Screen Member
Free forum | ©phpBB | Free forum support | Báo cáo lạm dụng | Thảo luận mới nhất