|
HỒ LÔ BIẾN |
|
Tự tạo Screen
Saver cho mùa Giáng sinh
NGÔ BẢO KHOA (TB - TP.HCM)
|
|
Tự tạo
screensaver |
|
Screen Saver là loại phần mềm "bảo vệ màn
hình" bằng cách "diễn trò" khi người dùng để
máy tính rảnh rỗi quá một thời gian định
trước nào đó. Hiện nay, màn hình máy tính
thực sự không cần Screen Saver "bảo vệ". Tuy
nhiên, Screen Saver vẫn được mọi người yêu
thích như một phương tiện... thư giãn, và...
màu mè. |
|
Bằng Visual Basic, bạn có thể tự tạo
một Screen Saver. “Ta về ta tắm ao ta, dù trong
dù đục ao nhà vẫn hơn”. Dùng chương trình do
chính mình viết vẫn thú vị hơn, phải không
bạn? Sau đây là các bước để tạo một Screen
Saver bằng Visual Basic. |
|
1. Trước tiên, bạn tạo một dự án (project)
mới thuộc loại Standard exe, thêm 2 biểu mẫu
(form) mang tên frmScreenSaver và frmSetting
với
thuộc tính Visible đều là False. Các thuộc
tính của frmScreenSaver được trình bày ở bảng
1. |
|
Bảng 1
|
(Name) |
frmScreenSaver |
|
Appearance |
0 ‘Flat |
|
BackColor |
Black |
|
BorderStyle |
0 ‘None |
|
ControlBox |
0 ‘False |
|
MaxButton |
0 ‘False |
|
MinButton |
0 ‘False |
|
ShowInTaskbar |
0 ‘False |
|
Visible |
0 ‘False |
|
WindowsState |
2 ‘Maximized |
|
|
Những thuộc tính trên đảm bảo cho biểu
mẫu frmScreenSaver hiện ra với một màu đen
chiếm hết màn hình. |
|
2. Bạn thêm vào dự án một đơn thể (module)
mang tên modMain. Từ trình đơn Project, bạn chọn
Project Properties > Startup Object > Sub Main.
Trong đơn thể modMain, bạn viết mã như sau: |
|
Public Sub Main()
End Sub |
|
Khi chạy chương trình, những lệnh được xử lý
trước tiên là những lệnh trong Sub Main() |
|
3. Trong Screen Saver, con trỏ chuột cần được
giấu đi. Để giấu đi hay hiện lại con trỏ
chuột, bạn dùng hàm API trong thư viện
user32.dll. Cụ thể, ta giấu con trỏ chuột khi
bắt đầu chạy chương trình và cho hiện lại con
trỏ chuột khi chấm dứt chương trình bằng cách
thêm dòng sau trên dòng Sub Main(): |
|
Public Declare
Function _
ShowCursor Lib "user32" _
(ByVal bShow As Long) As Long |
|
4. Khi Windows làm việc với Screen Saver, nó
gửi cho Screen Saver những tham số đặc biệt để
điều khiển. Ví dụ, để chạy Screen Saver,
Windows gửi tham số “/s”. Khi muốn hiển thị
phần Setting của Screen Saver, Windows gửi tham
số “/c”. Bạn phải viết thêm vào thủ tục Main
như ở đoạn mã 1, theo đó, sau khi nhận được
tham số do Windows gửi tới, chương trình của ta
cho hiện ra biểu mẫu tương ứng. |
|
Đoạn mã 1: |
Public Sub Main()
If InStr(Command, "/s") > 0 Then
ShowCursor False
frmScreenSaver.Show 1
End If
If InStr(Command, "/c") > 0 Then
frmSetting.Show 1
End If
End Sub |
|
|
|
5. Khi Screen Saver đang chạy, nếu người dùng di
chuyển chuột, ấn chuột hay ấn phím thì chương
trình phải chấm dứt. Vì vậy bạn cần thêm
một thủ tục mang tên EndScreenSaver vào cuối
đơn thể modMain (sau thủ tục Main): |
Public Sub EndScreenSaver()
ShowCursor True
End
End Sub |
|
6. Chuyển qua frmScreenSaver, bạn cần viết mã
lệnh xư lý các sự kiện ấn phím, ấn chuột
và di chuyển chuột. Khi xảy ra một trong các
sự kiện đó, ta gọi thủ tục EndScreenSaver
để
chấm dứt Screen Saver (đoạn mã 2). |
|
Đoạn mã 2: |
Private Sub
Form_KeyDown(KeyCode As Integer, Shift As Integer)
EndScreenSaver
End Sub
Private Sub Form_MouseDown(Button As Integer, Shift
As Integer, X As Single, Y As Single)
EndScreenSaver
End Sub
Private Sub Form_MouseMove(Button As Integer, Shift
As Integer, X As Single, Y As Single)
Static OldX, OldY As Integer
If (OldX > 0 And OldY > 0) And (Abs(X - OldX) > 5 Or
Abs(Y - OldY) > 5) Then
EndScreenSaver
End If
OldX = X
OldY = Y
End Sub |
|
7. Screen Saver cần tạo ra những hình ảnh
chuyển động liên tục và lặp lại, một dòng
chữ chạy liên tục qua màn hình giống như
Scrolling Marquee có sẵn trong Windows chẳng
hạn. Đây chính là "đất dụng võ" để bạn tự
do thể hiện những kỹ thuật lập trình của
mình. Bạn hãy đặt lên biểu mẫu frmScreenSaver
một Timer mang tên Timer1, đặt trị cho thuộc
tính Interval và viết mã cho nó. |
Private Sub Timer1_Timer()
‘ Ở đây là phần mã của bạn để
‘ tạo ra hình ảnh chuyển động
‘ cho Screen Saver
End Sub |
|
Bạn lưu ý, chương trình Screen Saver chỉ
chạy khi có tham số “/s” hoặc “/c”. Để dễ
dàng chạy thử nghiệm, bạn có thể tạm thời
che đi (comment out) các câu lệnh điều kiện
kiểm tra tham số. Dĩ nhiên, trước khi biên dịch
chương trình bạn phải bày ra trở lại. |
|
Biểu mẫu frmSetting là biểu mẫu để bạn viết
phần thiết lập tùy chọn cho Screen Saver của
mình. |
|
8. Cuối cùng, để tạo Screen Saver hoàn chỉnh,
bạn chọn File > Make Project1.exe. Bạn lưu ý,
khi đặt tên tập tin trên hộp thoại, bạn phải
sửa phần mở rộng thành .scr (chứ không phải
.exe). Sau đó bạn chép tập tin vừa tạo ra
(Project1.scr) vào thư mục Windows. Từ đó, bạn
có thể kích hoạt Screen Saver của mình như
từng làm với mọi Screen Saver khác. |
|
Chúc mừng Giáng Sinh! |
|
Nhân dịp Giáng Sinh 2003, ta hãy tạo ra một
Screen Saver với hình ảnh bầu trời mùa đông
đầy tuyết rơi, bạn đồng ý không? |
|
Bạn cần có một PictureBox chứa bức tranh Giáng Sinh (như hình 1
chẳng hạn) để làm nền cho cảnh tuyết rơi.
Bạn thêm PictureBox vào frmScreenSaver
với các
thuộc tính như bảng 2. |
|
Bảng 2
|
(Name) |
Picture1 |
|
Appearance |
0 – Flat |
|
AutoRedraw |
True |
|
AutoSize |
True |
|
BorderStyle |
0 – None |
|
Picture |
Bạn chỉ ra
nơi chứa bức tranh của bạn |
|
ScaleMode |
3 – Pixel |
|
|
|
|
Với Timer1 trong frmScreenSaver, bạn
đặt thuộc tính Interval là 100,
Enabled là False.
Một hạt tuyết cần có các thuộc tính:
- x, y : tọa độ hiện thời của hạt
tuyết.
- size : kích thước của hạt tuyết.
- speed : tốc độ rơi của hạt tuyết. |
|
Bạn có nhiều hạt tuyết và mỗi hạt
tuyết có các thuộc tính riêng của nó. Vì
vậy, ta cần một mảng (array) để lưu giữ các
thuộc tính của từng hạt tuyết. Bạn hãy thêm
đoạn mã 3 vào đầu phần mã của frmScreenSaver,
trong đó ta tạo ra mảng để chứa 500 "hạt
tuyết" Snow. Đoạn mã 4 trình bày thủ tục
CreateSnow của frmScreenSaver để tạo ra các hạt
tuyết với vị trí, kích thước và tốc độ
ngẫu nhiên. Ta gọi thủ tục CreateSnow trong thủ
tục Form_Load của frmScreenSaver (đoạn mã 5). |
|
Đoạn mã 3: |
|
Private Type Snow
x As Integer 'Tọa độ ngang
y As Integer 'Tọa độ dọc
size As Integer 'Kích thước hạt
tuyết
speed As Integer 'Tốc độ tuyết rơi
End Type
‘ 500 là số lượng hạt tuyết.
‘ Bạn thay đổi tùy thích.
Dim SnowArr(1 To 500) As Snow
|
|
Đoạn mã 4: |
|
Private Sub CreateSnow(i As
Integer)
SnowArr(i).X = Int(Rnd *
Picture1.ScaleWidth)
‘Tọa độ y ban đầu của hạt tuyết
sẽ ở phần trên
‘của bức tranh, thay đổi từ 0 đến
49 pixel.
SnowArr(i).Y = (Rnd * 50)
‘Tốc độ thay đổi từ 1 đến 3 pixel
SnowArr(i).speed = Int(Rnd * 3) + 1
‘Kích thước thay đổi từ 1 đến 3
pixel
SnowArr(i).size = Int(Rnd * 3) + 1
End Sub |
|
Đoạn mã 5: |
|
Private Sub Form_Load()
Dim i As Integer
For i = 1 To UBound(SnowArr)
CreateSnow i
‘Dòng lệnh này làm cho lúc đầu
tuyết trải
‘khắp bức tranh chứ không chỉ ở
phần trên.
SnowArr(i).y = Int(Rnd *
Picture1.ScaleHeight)
Next i
‘Ta chỉ cho Timer1 hoat động khi đã
gán trị
‘cho các phần tử của mảng SnowArr.
Timer1.Enabled = True
End Sub |
|
Để vẽ hạt tuyết trên Picture1, bạn dùng phương
thức Pset của đối tượng Picture1 với tọa độ
là hai thuộc tính x và y của Snow. Để xác
định kích thước cho hạt tuyết, trước khi vẽ
hạt tuyết, bạn thay đổi thuộc tính DrawWidth
của Picture1 bằng thuộc tính size của Snow. Sau
khi vẽ hạt tuyết trên Picture1, bạn thay đổi
thuộc tính y của Snow thành y + speed. Như vậy
sau một khoảng thời gian bằng trị Interval của
Timer1, chương trình sẽ vẽ lại các hạt tuyết
với tung độ khác. Điều này làm cho bạn thấy
các hạt tuyết rơi xuống với tốc độ khác
nhau. Ta thể hiện ý định này qua thủ tục
Timer1_Timer() ở đoạn mã 6. |
|
Đoạn mã 6: |
|
Private Sub Timer1_Timer()
Dim i As Integer
Picture1.Cls
For i = 1 To UBound(SnowArr)
Picture1.DrawWidth =
SnowArr(i).size
‘Tuyết dĩ nhiên là màu trắng
rồi !
Picture1.PSet (SnowArr(i).x,
SnowArr(i).y), QBColor(15)
SnowArr(i).y = SnowArr(i).y +
SnowArr(i).speed
‘Khi tuyết “rơi” ra khỏi bức
tranh thì đưa nó
‘lên đầu bức tranh với vị
trí ngẫu nhiên.
If SnowArr(i).y >
Picture1.ScaleHeight Then
CreateSnow i
Next i
End Sub |
|
Trong frmScreenSaver, bạn cũng cần thêm
thủ tục xử lý sự kiện di chuyển chuột hay
ấn chuột trên Picture1. Khi xảy ra sự kiện như
vậy, bạn gọi thủ tục EndScreenSaver để thoát. |
|
Cuối cùng, trong modMain, bạn cần viết thêm vào thủ tục
Main (đoạn mã 7) để căn bức tranh ở giữa màn
hình. |
|
Đoạn mã 7: |
|
Public Sub Main()
If InStr(Command, "/s") > 0 Then
ShowCursor False
With frmScreenSaver
.Show
‘Sau khi frmScreenSaver.Show được gọi, hai thuộc
‘tính Width và Height của frmScreenSaver mới
đúng
‘là chiều rộng và chiều cao màn hình của
bạn.
.Picture1.Left = (.Width - .Picture1.Width) / 2
.Picture1.Top = (.Height - .Picture1.Height) / 2
End With
End If
If InStr(Command, "/c") > 0 Then
frmSetting.Show 1
End If
End Sub |
|
Thế là bạn đã hoàn thành Screen Saver tạo
cảnh tuyết rơi. Bạn có thể tham khảo mã
nguồn hoàn chỉnh của tôi tại
www.echip.com.vn.
Bạn nên viết vào frmSetting để thiết lập
nhiều tùy chọn cho người dùng thoải mái điều
chỉnh. Muốn chương trình hay hơn, bạn có thể
thêm các bài nhạc Giáng sinh. Chúc bạn tự
tạo được một Screen Saver thật ấn tượng cho
mùa Giáng sinh năm nay! |
|
|