Logo of Vovisoft

 

Các mẹo vặt trong VB

Gõ vào đầu đề phía bên trái để nhìn thấy các phần chọn. Muốn khép các phần chọn hãy gõ đầu đề thêm một lần hoặc gõ vào đầu đề khác.

VB Tips & Tricks

Forms
Controls
Ngày Giờ
Các dạng ngày và giờ
Hai cách dùng Timer
Ðợi một chút
Thùng rác cháy nữa giây

Files
Linh Tinh

Mẹo vặt (tiếng Anh là Tips & Tricks ) là tinh hoa của VB được cô động lại thành những bài ngắn nhắm vào một điểm nào đó để thực hiện một công việc bằng VB.

 


Các dạng của Ngày và Thì giờ

Dùng Function Format để lấy ngày giờ theo dạng bạn muốn. Thí dụ:

strToday = Format (Now(), "ddd dd-mmm-yyyy hh:nn:ss")

  • Now() cho ta hiện giờ (realtime lấy từ đồng hồ của CPU)
  • ddd cho Mon, Tue .vv..
  • mmm cho Jul, Feb .vv..

Nhớ dùng "nn" cho phút.


Hai cách dùng Timer

1.  Timer có Interval tính bằng milliseconds. Khi Timer1 được Enabled (tức là Timer1.Enabled=True) nó sẽ chạy Sub Timer1_Timer mỗi Interval msecs.

Thí dụ ta muốn Label1 chớp tắt (blink):

         Timer1.Interval = 500  ' Nữa giây

         Timer1.Enabled = True  ' Bắt đầu chạy Timer1 cho hết interval  

         Sub Timer1_Timer()

  Label1.Visible = NOT Label1.Visible  

End Sub

Cứ  mỗi nữa giây hể Label1 đang hiện ra thì cho nó tàn hình và ngược lại.

Khi nào muốn ngưng chớp tắt thì dùng:

          Timer1.Enabled = False

    Label1.Visible = True

2.  Ðể làm một việc trong tương lai, ta cűng dùng Timer nhưng ngay trong

Sub Timer1_Timer ta để câu Timer1.Enabled = False

để tắt Timer1 sau khi làm xong công chuyện.  Thí dụ:

   Sub Timer1_Timer()

     Timer1.Enabled = False   ' Ngưng Timer1

          ' Ðể code làm công chuyện tại đây  

   End Sub


Ðợi một chút

Có khi ngay ở giừa code bạn muốn đợi (wait) một chút. Bạn có thể làm theo bài mẫu của Microsoft như sau:

   Dim PauseTime, Start, Finish, TotalTime

          ' Code đang làm việc nữa chừng
          PauseTime = 5    ' Set duration in seconds.

    Start = Timer   'Set start time as now
    Finish = Start + PauseTime ' set finish time

Do While timer < Finish
   DoEvents   ' Yield to other processes.
Loop
' Code tiếp tục công việc

Timer dùng ở đây là một Function  có sẵn  (in-built) của VB chớ không phải Control Timer. Timer cho ta số giây kể từ nừa đêm.

Ta dùng DoEvents để khỏi dành hết CPU time trong một closed Do While Loop. Nó nhường cho các process khác chạy trong khi chờ đợi Finish.

Khi bạn chạy một Closed Loop giống như trên và assign cho Label1 một Caption với value biến đổi  để Feedback cho user biết tình hình diễn tiến đến đâu, nếu bạn không dùng DoEvents giống như nói trên, Label1 sẽ không có dịp 'refresh' để 'display' value mới của Label1.Caption.

Không biết bạn có để ý thấy cách chờ đợi như trên có thể gặp trở ngại nếu lúc bấy giờ là gần đến nừa đêm ít hơn 5 giây.  Khi đó Finish sẽ lớn hơn 3600*24 giây và Timer sẽ không bao giờ đạt đến con số ấy để nhảy ra khỏi Loop.  Giống như mình lập gia đình vậy, sẽ làm mọi suốt đời, không có lối thoát. 

Một cách khác để giải quyết là ta nhờ một Timer1 chạy độc lập để cho biết khi nào thời gian đã trải qua (elapsed) bằng cách set một 'variable' tên blnElapsed ra True.  blnElapsed  phải được để trong phần General Declaration để cả code chính và Sub Timer1_Timer đều thấy nó.

  Dim blnElapsed as Boolean  ' Declare in General section

  Sub Timer1_Timer()

     Timer1.Enabled = False

     blnElapse = True

  End Sub

  ' Code đang làm việc nữa chừng

          blnElapsed = False
    Timer1.Interval = 5000   ' Set duration in msecs.

    Timer1.Enabled = True   'Start Timer1

Do

  DoEvents     ' Yield to other processes.

Loop Until blnElapsed

' Code tiếp tục công việc

Cách nầy cűng được nhưng nó vẫn bắt chẹt (hold up) CPU và làm cản trở các processes khác(đây là giới hạn của VB).

Cách hoàn hảo nhất là ta đợi bằng cách dùng Timer1, nhưng đặt phần code còn lại để tiếp tục công việc ngay trong Sub Timer1_Timer.

    ' Code đang làm việc nữa chừng

     Timer1.Interval = 5000 ' Set duration in milliseconds.

     Timer1.Enabled = True    'Start Timer1

   Sub Timer1_Timer()

      Timer1.Enabled = False

             ' Code tiếp tục công việc

        End Sub


Làm thùng rác cháy lửa nữa giây

Trong khi xử lý, ta có thể biến hình của một Image bằng cách cho nó một Picture mới như:
Image1.Picture = LoadPicture("PictureName.bmp")
rồi bắt đầu một Timer với Interval bằng 500 milliseconds.
Ðầu tiên đặt một Timer tên Timer1 lên Form. Vì lúc đầu Timer1.Interval bằng 0 nên Timer1 chưa chạy được (giống như Enabled = False)
' Cho hình thùng rác cháy lửa
Image1.Picture = LoadPicture("TrashBinOnFire.bmp")
Timer1.Interval = 500
Timer1.Enabled = True ' Nữa giây sau sẽ chạy Timer1_Timer

Sub Timer1_Timer()
Timer1.Enabled =False ' Ngưng Timer1
' Cho hình thùng rác thường
Image1.Picture = LoadPicture("TrashBin.bmp")

End Sub