Gửi Tin Nhắn Cho Admin

Thứ Sáu, 7 tháng 7, 2017

Bài 50. Hướng dẫn cơ bản về SaveSetting and GetSetting functions

Phạm Minh Tùng  /  at  7/07/2017 09:38:00 SA  /  No comments

- Công dụng của 2 hàm này là ĐỌC và GHI thiết đặt vào Registry

- Vị trí đọc ghi  giá trị của chúng trong Registry nằm ở: HKEY_CURRENT_USER\Software\VB and VBA Program Settings

1. Hàm GetSetting: Dùng để đọc một trị từ Registry. Có cú pháp như sau:
     - GetSetting(appname, section, key[, default])
     Trong đó: 
       - AppName: Nơi mà hàm này sẽ tìm đến để đọc, thường nên đặt là tên của ứng dụng. Bắt buộc có.
     - Section: Trong một AppName bạn có thể tạo nhiều Section khác nhau, mỗi Section lưu trữ một nhóm thông tin có liên quan với nhau để dễ quản lý (giống như tạo thư mục con vậy). Bắt buộc có.
        - Key: Trong mỗi Section bạn có thể tạo nhiều key, mỗi key lưu 1 trị. Bắt buộc có.
      -Default: Trị mặc nhiên mỗi khi không tìm thấy Key cần đọc trong Registry. Tham số này có thể có hay không cũng được. Nếu không có trị mặc nhiên sẽ là một chuỗi rổng ("").

2. Hàm SaveSetting: Ghi thông tin vào Registry.
SaveSetting appname, section, key, setting
Các thông số tương tự như hàm GetSetting nhưng không có đối số Default. Nhưng lại có đối số Setting là trị sẽ được ghi vào Registry cho mỗi Key.
Các Bạn hãy xem hình để biết rõ hơn cách tổ chức các thông tin của Registry & cách ghi các thiết đặt của lệnh SaveSetting.



                                                                     Các trị được lưu trong Registry

Thí dụ minh họa: Lưu trạng thái của form trước khi thoát

Trạng thái hiển thị của form bao gồm: Maximize, Minimize, Normal, Top, Left, Width, Height.  Một vị trí thuận tiện nhất để lưu các thông số trên là Registry của Windows.
Vậy để giữ lại trạng thái của form thì khi form phát sinh sự kiện Unload bạn hãy ghi lại các thông số về trạng thái. Khi mở form bạn chỉ cần đọc lại các thông số đã lưu trữ. Vậy là ta có thể giữ lại được trạng thái form trước đó.
Để thí dụ tôi sẽ minh họa cách lưu lại vi trí của Form. Hãy khởi động VB & tạo 1 project mới, có 1 form tên là Form1, gõ vào code sau đây:

Option Explicit
Private Sub Form_Load() 
            On Error Resume Next 
            Me.Left = GetSetting("ChuongTrinh_ViDu", "ViTriForm", "X")    
            Me.Top = GetSetting("ChuongTrinh_ViDu", "ViTriForm", "Y")
End Sub

Private Sub Form_Unload(Cancel As Integer)
        SaveSetting "ChuongTrinh_ViDu", "ViTriForm", "X", Me.Left
        SaveSetting "ChuongTrinh_ViDu", "ViTriForm", "Y", Me.Top
End Sub

Bây giờ bạn cho chạy thử chương trình, khi chương trình chạy bạn hãy thử di chuyển form đi nơi khác, dừng chương trình, sau đó cho chạy lại, bạn sẽ thấy form xuất hiện ngay đúng vị trí mà nó đã nằm trước khi thoát.
Vào Registry để kiểm nghiệm




Tuy nhiên khi thử chương trình bạn sẽ thấy báo lỗi, lý do là chưa có thông tin trong Registry để đọc vào 2 properties Left & Top khi chạy lần đầu.
Để khắc phục lỗi này bạn có thể dùng đến trị Default của hàm GetSetting. Riêng tôi, tôi chọn cách đặt thêm dòng On Error Resume Next vào dòng đầu tiên của sự kiện Form_Load.

Làm cho chương trình giống trang Web
Nếu bạn cảm thấy quá chán chường với mấy cái nút lệnh Command Button, xin hãy tạo cho chương trình của mình những siêu liên kết (Hyper Links) giống như trang Web. Cách làm cực kỳ dễ:
Hãy dùng một Label Box, đặt một Caption thích hợp, rồi sau đó mà tùy ý xử lý dựa trên cái sự kiện Mouse_Move của nó.
Ví du như khi rê mouse đến thì dòng Text trong Labelbox được gạch chân bạn làm như sau:
Tạo project mới, có Form tên là Form1, trên đó đặt một Labelbox tên là Label1. Mở cửa sổ code gõ vào đoạn code sau:

Option Explicit
Private Sub Form_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)    Label1.FontUnderline = False
End Sub
Private Sub Label1_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)    Label1.FontUnderline = True
End Sub

Qua đoạn code trên ta có nhận xét sau:
- Khi mouse được rê đến Label1 thì phát sinh sự kiện mouse_move trên Label này làm cho dòng Text của nó bị gạch chân (như là Hyper link thứ thiệt).
- Khi mouse còn trên form, luôn luôn xảy ra sự kiện mouse trên form và Label1 bị gán thuộc tính FontUnderline=False. Do đó ta sẽ thấy khi mouse rời khỏi Labelbox tức thì Text của nó hết bị gạch chân ngay.



Khi mouse còn trên Form



Khi mouse được rê trên Labelbox
Tuy nhiên 1 Hyper link như vậy còn hơi nhạt nhẽo thiếu rất nhiều "hương sắc Web". Bạn có thể cho nó thêm vài thay đổi nữa như:
  • Đậm lên (FontBold)
  • In nghiêng (Font Italic)
  • Đổi Font chữ (FontName)
  • Đổi màu chữ (ForeColor)
  • Đổi màu nền (BackColor)
  • Đổi biểu tượng chuột (Mouse Icon). Nhớ đặt MousePointer là Custom - 99

 Ví dụ Tiếp Theo: Đường dẫn của đối tượng DirListbox và App
Hãy hãy lưu ý thuộc tính Path của 2 đối tượng này. Thí dụ như bạn cần tham chiếu đến một tập tin tên là Test.txt nằm trong thư mục của chương trình (giả sử App.path == c:\myapp).
app.path & "\Test.txt" ==> c:\myapp\Test.txt
Nhưng nếu App.path của bạn là một thư mục gốc của bất kỳ ổ đĩa nào, ví dụ như c:\ thì nó lại thành.
app.path & "\Test.txt" ==> c:\\Test.txt
Chương trình sẽ báo lỗi ngay lập tức. Tương tự như vậy đối tượng DirListBox cũng bị trường hợp này.
Lý do là 2 đối tượng này trả về cho thuộc tính Path các trường hợp sau:
  • Nếu không phải là thư mục gốc thì: Tên ổ đĩa:\Tên thư mục - ví dụ C:\TEMP
  • Nhưng nếu là thư mục gốc thì lại Tên ổ đĩa:\ - vi dụ C:\
Khi lập trình tổng quát ta hay viết là
App.path & "\Test.txt"
Dir1.path & "\" & File1.Filename
Như vậy ta thấy dư 1 dấu \ khi là thư mục gốc. Để giải quyết lỗi này bạn có thể dùng hàm IIF() hoặc câu lệnh IF
Cụ thể tôi có thể viết như sau:

Dim F as String
F = Dir1.path & IIF(Len(Dir1.path)=3,""," ") & File1.FileName
(Hay)
If Len(Dir1=3) then
    F = Dir1.path & File1.FileName
else
    F = Dir1.path & "\" & File1.FileName
End If

Share
Posted in: , Posted on: Thứ Sáu, 7 tháng 7, 2017

0 nhận xét:

Recent Comments

Copyright © 2013 Excel Toàn Tập. WP Theme-junkie converted by Bloggertheme9
Blogger templates. Proudly Powered by Blogger.