Sử dụng các hộp thoại
Hộp thoại Open (Open dialog) là một hộp thoại chuẩn cho phép người dùng chọn một file hay một thư mục. Thực hành: Viết chương trình mở một file (Text hoặc rtf) và hiển thị trong điều khiển Richtext Box. Các bước thực hiện: ...
Hộp thoại Open (Open dialog) là một hộp thoại chuẩn cho phép người dùng chọn một file hay một thư mục.
Thực hành: Viết chương trình mở một file (Text hoặc rtf) và hiển thị trong điều khiển Richtext Box.
Các bước thực hiện:
Bước 1: Tạo một Project mới
Bước 2: Vào menu Project → Components và tham chiếu đến 2 file OCX là Rich Textbox và Common Dialog như hình 1
Bước 3: Kéo điều khiển Dialog và Richtext vào Form
Các điều khiển dùng trong chương trìnhThiết kế giao diện:
Giao diện và kết quả khi chạy chương trìnhĐặt giá trị cho các thuộc tính:
Điều khiển | Thuộc tính / Giá trị |
Form | Name : frmMainCaption: Sử dụng hộp thoại OpenStartup Position: 2- CenterScreen |
Rich Textbox Control | Name : rtfEditorAutoVerbMenu: TrueScrollBars : 3 - Borth |
CommonDialog | Name: dlgHopThoai (Hộp thoại) |
Command button | Name : cmdOpenTextFileCaption: Mở file &Text |
Command Button | Name : cmdOpenRTFFileCaption: Mở file &RTF |
Viết lệnh:
frmMain.frm | |
Option Explicit'/// Mở các file Richtext Format (các file có phần mở rộng là RTF)Private sub cmdOpenRTFFile_Click()dlgHopThoai.DialogTitle = "Mo file Text" '/// Tiêu đề của hộp thoạidlgHopThoai.Filter = "Cac file Richtext (*.RTF)|*.rtf|" '/// Chỉ hiển thị các file RTFdlgHopThoai.Showopen '/// Hiển thị hộp thoạirtfEditor.LoadFile dlgHopThoai.FileName, rtfRTF '/// Mở file vừa chọn trong RTFEndSub'/// Mở các file Text (các file có phần mở rộng là TXT)Private sub cmdOpenTextFile_Click()dlgHopThoai.DialogTitle = "Mo file Text"dlgHopThoai.Filter = "Cac file text (*.txt)|*.txt|"dlgHopThoai.ShowopenrtfEditor.LoadFile dlgHopThoai.FileName, rtfTextEndSub |
Ghi chú:
- Phương thức LoadFile của điều khiển Richtext dùng để mở một file. Nó đòi hỏi 2 tham số, tham số thứ nhất là đường dẫn đến file cần mở, tham số thứ hai là loại file cần mở (Tham số này là tuỳ chọn và có thể bỏ qua).
- Thuộc tính 2- CenterScreen dùng để đặt Form vào giữa màn hình khi hiển thị.
- Thuộc tính AutoVerbMenu = True của điều khiển Richtext để cho phép hiển thị menu (Copy, cut, Paste, Undo) khi người dùng click chuột phải lên Richtext control.
- Trong trường hợp, khi hộp thoại mở ra, nếu người dùng không chọn file nào (Chọn nút Cancel) thì thuộc tính FileName sẽ có giá trị ở lần mở trước đó hoặc sẽ có giá trị rỗng, và như vậy có thể gây lỗi nạp file. Để giải quyết trường hợp này, có thể viết lại đoạn chương trình trên như sau:
Private sub cmdOpenRTFFile_Click()
dlgHopThoai.DialogTitle = "Mo file Text" dlgHopThoai.Filter = "Cac file Richtext (*.RTF)|*.rtf|" dlgHopThoai.FileName = "" '/// Khởi tạo trước
dlgHopThoai.Showopen
If dlgHopThoai.FileName <> "" Then ' /// Đã chọn file
rtfEditor.LoadFile dlgHopThoai.FileName, rtfRTF
End If
End Sub
Hộp thoại Save (hay Save As) về thực chất cũng chính là hộp thoại Open (Cùng sử dụng điều khiển Dialog) nhưng có điểm khác là tiêu đề của hộp thoại này mặc định bây giờ là "Save As" thay vì "Open" để người dùng có "cảm giác" thân thiện hơn. Tiêu đề của hộp thoại luôn luôn có thể thay đổi được bằng cách thay đổi thuộc tính DialogTitle.
Thực hành: Xây dựng chương trình giống như phần 1 nhưng có thêm nút "Save As" để khi người dùng click vào nút này thì nội dung đang soạn thảo sẽ được lưu ra đĩa với một tên file mới.
Các bước thực hiện: Giống như phần 1
Thiết kế giao diện: Thêm nút Save (Name: cmdSaveAs, Caption: &Save As)
Giao diện và kết quả chạy chương trình
Viết lệnh:
frmMain.frm | |
Option Explicit'/// Mở các file Richtext Format (các file có phần mở rộng là RTF)Private sub cmdOpenRTFFile_Click()dlgHopThoai.DialogTitle = "Mo file Text" '/// Đặt lại tiêu đềdlgHopThoai.Filter = "Cac file Richtext (*.RTF)|*.rtf|" '/// Chỉ hiển thị file dạng RTFdlgHopThoai.Showopen'/// Mở hộp thoại chọn filertfEditor.LoadFile dlgHopThoai.FileName, rtfRTF '/// Nạp file vào RichtextboxEndSub'/// Mở các file Text (các file có phần mở rộng là TXT)Private sub cmdOpenTextFile_Click()dlgHopThoai.DialogTitle = "Mo file Text"dlgHopThoai.Filter = "Cac file text (*.txt)|*.txt|"dlgHopThoai.ShowopenrtfEditor.LoadFile dlgHopThoai.FileName, rtfTextEndSub'/// Thực hiện mở hộp thoại để cho người dùng gõ một tên file mới'/// và lưu nội dung đang soạn thảo ra file nàyPrivate sub cmdSaveAs_Click()dlgHopThoai.Filter = "Tất cả các file (*.*)|*.*|"dlgHopThoai.FileName = ""dlgHopThoai.Showsave'/// Mở hộp thoại "Save As"IfdlgHopThoai.FileName <> "" ThenrtfEditor.SaveFile dlgHopThoai.FileName, rtfRTF'/// rtfRTF Hoặc rtfText nếu muốn lưu sang dạng file Text (TXT)EndIfEndSub |
- Chú ý:
- Giống như hộp thoại Open, hộp thoại "Save As" cũng "Không tự động lưu nội dung soạn thảo ra đĩa" mà ta phải tự làm (lệnh rtfEditor.SaveFile dlgHopThoai.FileName, rtfRTF) Nó chỉ cho ta biết là người dùng đã gõ vào tên file gì mà thôi (thông qua thuộc tính FileName)
- Nếu muốn lưu nội dung vào chính file đó (chứ không phải ra file mới) thì không cần phải hiển thị hộp thoại Save As mà chỉ cần viết câu lệnh rtfEditor.SaveFile dlgHopThoai.FileName.
Hộp thoại chọn font cũng sử dụng điều khiển Dialog, nó hiển thị và cho phép người dùng chọn các thông số liên quan đến font chữ như tên font, kích thước, kiểu chữ v.v… Các giá trị này khi chọn sẽ được lưu trong các thuộc tính tương ứng của điều khiển Dialog.
Thực hành: Xây dựng chương trình giống như phần 2, nhưng có thêm nút "Đặt font" để khi người dùng click vào nút này thì chương trình sẽ hiển thị hộp thoại chọn font, sau đó đặt font chữ đã chọn cho nội dung chứa trong RichtextBox Format.
Các bước thực hiện: Giống như phần 2
Thiết kế giao diện : Giống phần 2 và thêm nút "Set Font" (Name: cmdSetFont, Caption : Set &Font)
Kết quả khi chạy chương trình
Viết lệnh:
frmMain.frm | |
Option Explicit'/// Mở các file Richtext Format (các file có phần mở rộng là RTF)Private sub cmdOpenRTFFile_Click()dlgHopThoai.DialogTitle = "Mo file Text"dlgHopThoai.Filter = "Cac file Richtext (*.RTF)|*.rtf|"dlgHopThoai.ShowopenrtfEditor.LoadFile dlgHopThoai.FileName, rtfRTFEndSub'/// Mở các file Text (các file có phần mở rộng là TXT)Private sub cmdOpenTextFile_Click()dlgHopThoai.DialogTitle = "Mo file Text"dlgHopThoai.Filter = "Cac file text (*.txt)|*.txt|"dlgHopThoai.ShowopenrtfEditor.LoadFile dlgHopThoai.FileName, rtfTextEndSub'/// Thực hiện mở hộp thoại để cho người dùng gõ một tên file mới'/// và lưu nội dung đang soạn thảo ra file nàyPrivate sub cmdSaveAs_Click()dlgHopThoai.Filter = "Tất cả các file (*.*)|*.*|"dlgHopThoai.FileName = ""dlgHopThoai.ShowsaveIfdlgHopThoai.FileName <> "" ThenrtfEditor.SaveFile dlgHopThoai.FileName, rtfRTF'/// rtfRTF Hoặc rtfText nếu muốn lưu sang dạng file TextEndIfEndSub'/// Đặt font chữ cho toàn bộ văn bản trong Rich TextBoxPrivate sub cmdSetFont_Click()dlgHopThoai.Flags = cdlCFBoth Or cdlCFEffects '/// Phải có dòng nàydlgHopThoai.Showfont'/// Hiển thị hộp thoại chọn fontrtfEditor.Font.Name = dlgHopThoai.FontName '/// Đặt font chữ trong RichtextboxrtfEditor.Font.Size = dlgHopThoai.FontSize '/// bằng với giá trị vừa chọnrtfEditor.Font.Bold = dlgHopThoai.FontBoldrtfEditor.Font.Italic = dlgHopThoai.FontItalicrtfEditor.Font.Underline = dlgHopThoai.FontUnderlinertfEditor.Font.Strikethrough = dlgHopThoai.FontStrikethruEndSub |
Ghi chú:
- Hộp thoại chọn font không tự đặt font chữ cho bất kỳ văn bản nào, việc đó hoàn toàn do lập trình viên quyết định. Nó chỉ cho ta biết được là người dùng đã chọn font có tên là gì, kích thước, kiểu cách v.v… thông qua các thuộc tính tương ứng.
- Có thể đặt font chữ chỉ cho riêng phần văn bản được bôi đen trong RichText thông qua các thuộc tính có tiền tố là Sel…, ví dụ:
…………
rtfEditor.SelBold = dlgHopThoai.FontBold
rtfEditor.SelItalic = dlgHopThoai.FontItalic
rtfEditor.SelFontSize = dlgHopThoai.FontSize
rtfEditor.SelFontName = dlgHopThoai.FontName
……………
Hộp thoại hiển thị bảng màu (Color) cũng nằm trong điều khiển Dialog. Sau khi hiển thị, hộp thoại này sẽ cho ta biết là người dùng đã chọn màu có giá trị là bao nhiêu. Giá trị này sẽ tương ứng với một màu xác định và thường được sử dụng cho mục đích đặt màu chữ, màu nền v.v… cho các thành phần khác.
Thực hành: Giống phần 3 nhưng thêm khả năng đặt màu nền cho Richtextbox khi người dùng click vào nút "Set BackColor".
Các bước thực hiện: Như phần 3
Thiết kế giao diện: Như phần 3 và thêm nút lệnh: Name: cmdSetBackColor, Caption: Set &BackColor"
Hộp thoại chọn FontViết lệnh:
frmMain.frm | |
Option Explicit'/// Mở các file Richtext Format (các file có phần mở rộng là RTF)Private sub cmdOpenRTFFile_Click()dlgHopThoai.DialogTitle = "Mo file Text"dlgHopThoai.Filter = "Cac file Richtext (*.RTF)|*.rtf|"dlgHopThoai.ShowopenrtfEditor.LoadFile dlgHopThoai.FileName, rtfRTFEndSub'/// Mở các file Text (các file có phần mở rộng là TXT)Private sub cmdOpenTextFile_Click()dlgHopThoai.DialogTitle = "Mo file Text"dlgHopThoai.Filter = "Cac file text (*.txt)|*.txt|"dlgHopThoai.ShowopenrtfEditor.LoadFile dlgHopThoai.FileName, rtfTextEndSub'/// Thực hiện mở hộp thoại để cho người dùng gõ một tên file mới'/// và lưu nội dung đang soạn thảo ra file nàyPrivate sub cmdSaveAs_Click()dlgHopThoai.Filter = "Tất cả các file (*.*)|*.*|"dlgHopThoai.FileName = ""dlgHopThoai.ShowsaveIfdlgHopThoai.FileName <> "" ThenrtfEditor.SaveFile dlgHopThoai.FileName, rtfRTF'/// rtfRTF Hoặc rtfText nếu muốn lưu sang dạng file TextEndIfEndSub'/// Hiển thị hộp thoại chọn font và thiết lập font chữ cho văn bản trong FTFPrivate sub cmdSetFont_Click()dlgHopThoai.Flags = cdlCFBoth Or cdlCFEffectsdlgHopThoai.ShowfontrtfEditor.Font.Name = dlgHopThoai.FontNamertfEditor.Font.Size = dlgHopThoai.FontSizertfEditor.Font.Bold = dlgHopThoai.FontBoldrtfEditor.Font.Italic = dlgHopThoai.FontItalicrtfEditor.Font.Underline = dlgHopThoai.FontUnderlinertfEditor.Font.Strikethrough = dlgHopThoai.FontStrikethruEndSub'/// Hiển thị hộp thoại chọn màu sau đó đặt màu vừa chọn cho nền của RTFPrivate sub cmdSetBackColor_Click()dlgHopThoai.Showcolor'/// Hiển thị hộp thoại chọn màurtfEditor.BackColor = dlgHopThoai.Color '/// Đặt màu nền bằng màu vừa chọnEndSub |
Hộp thoại Print cho phép người dùng chọn tên máy in, số trang, số bản sao v.v… Hộp thoại này cũng KHÔNG TỰ IN ĐƯỢC TÀI LIỆU.
Thực hành: Thêm một nút lệnh "Print" vào Form và đặt Name = cmdPrint, Caption = "&Print". Khi người dùng click nút này thì hiển thị hộp thoại máy in.
Các bước thực hiện và giao diện giống như phần 4.
Viết thêm đoạn code xử lý sự kiện click nút cmdPrint như sau:
Private sub cmdPrint_Click()
dlgHopThoai.ShowPrinter
MsgBox "Số bản in : " & dlgHopThoai.Copies
End Sub
Hộp thoại Help có nhiệm vụ thực thi một file trợ giúp dạng Window Help (Các file help cũ có phần mở rộng là hlp, các file mới hiện nay có phần mở rộng là CHM).
Thực hành: Mở file trợ giúp c:winntwinhelp.hlp.
Các bước thực hiện: Thêm một nút vào Form, đặt name = cmdHelp, Caption = &Help và viết lệnh cho sự kiện click chuột cho nút này như sau:
Private sub cmdHelp_Click()
dlgHopThoai.HelpFile = "c:winntwinhelp.HLP"
dlgHopThoai.HelpCommand = cdlHelpContents
dlgHopThoai.Showhelp
End Sub
Toàn bộ giao diện của bài thực hành
Giao diện chương trình hoàn chỉnh