Friday, October 30, 2009

Thủ thuật nhỏ trong VB p9

(Kỳ 9: Lấy tham số truyền từ dòng lệnh. Lấy các biểu tượng cửa sổ. Thu nhỏ chương trình sau khi dịch bằng NeoLite 2.0)

1. Lấy tham số truyền từ dòng lệnh

VB cung cấp cho ta hàm Command() hay Command$(). Hàm này trả về một String mà bạn truyền vào từ dòng lệnh khi gọi chương trình.

Lưu ý: Hàm Command$() mới thực sự trả về một String còn Command() lại trả về một Variant

Ví dụ: Hình bên dưới cho thấy ta khởi động chương trình MyPad.exe & truyền cho nó một tham số là C:\WINDOWS\WIN.INI

Bây giờ chúng ta hãy thử lấy tham số đó qua một chương trình viết bằng VB.

Ta sẽ viết một chương trình tên MYPAD, có một form, trên đó có một TextBox. Nếu khi chạy chương trình người dùng không truyền tham số thì để TextBox đó trống (hoặc chứa một thông báo). Còn ngược lại thì kiểm trả xem đó có phải là đường dẫn đến một tập tin hay không (tập tin văn bản), nếu đúng thì hiển thị nội dung file đó vào TextBox.

Đối với TextBox bạn phải đặt thuộc tính Multiline = TRUE. ScrollBars là 2-Vertical hay 3-Both

Double Click lên form để tạo code cho sự kiện FormLoad như sau:

Private Sub Form_Load()

Dim sFile As String

Dim nd As String, dong As String

nd = "" : dong = ""

sFile = Command$()

If Dir$(sFile) <> "" And sFile <> "" Then

Open sFile For Input As #1

Do While Not EOF(1)

Line Input #1, dong

nd = nd + dong + vbCrLf

Loop

Close #1

Text1 = nd

Caption = "MyPad - " & sFile

Else

Text1 = "Tập tin: [" & sFile & "] không tìm thấy." & vbCrLf & "Hoặc không cho đường dẫn file."

End If

End Sub

Để cho Textbox (Text1) lúc nào cũng có kích thước bằng với form, bạn hãy gõ code sau vào sự kiện FormResize.

Private Sub Form_Resize()

Text1.Left = 0 : Text1.Top = 0

Text1.Width = ScaleWidth : Text1.Height = ScaleHeight

End Sub

Bây giờ bạn hãy cho chạy thử chương trình & truyền cho nó một tham số để mở file WIN.INI

Click Start / Run & gõ vào D:\MYPAD\MyPad.exe C:\WINDOWS\WIN.INI (Giả sử chương trình MyPad của tôi lưu trên D:\MYPAD), sau đó click OK. Chương trình MyPad của chúng ta chạy & hiển thị nội dung của WIN.INI trong Textbox.

Nếu bạn cho chạy MYPAD mà không cho tham số hoặc cho sai chương trình sẽ hiển thị như sau:

Vì đây chỉ là một chương trình thí dụ đơn giản minh cho cách nhận tham số từ dòng lệnh, cho nên bạn phải chú ý là file (đường dẫn file) mà bạn truyền cho nó không được có thuộc tính ẩn, nếu không nó sẽ báo là không tìm thấy.

Về đầu trang

2. Lấy các biểu tượng chuẩn của cửa sổ trong Windows

Nếu bạn có nhu cầu tự viết lấy một cửa sổ cho mình thì chắc chắn bạn sẽ cần các ký tự sau đây.

Windows dùng font tên là Marlett để thể hiện các ký tự này. Muốn thể hiện các ký tự này bạn gõ các ký tự từ 0 đến 9 & từ a đến y, sau đó chọn font là Marlett. Từ đó bạn có thể tìm thấy biểu tượng mình cần.

Chương trình sau đây sẽ thể hiện các biểu tượng đó:

- Bạn hãy tạo 1 Project mới

- Tạo một Textbox (Text1) & một CommandButton (Command1) đặt Caption cho nút này là "Marlett"

- Nhập đoạn Code sau đây vào Form1 rồi chạy thử

Option Explicit

Private Sub Form_Load()

Text1.FontName= "Tahoma"

Text1.FontSize = 20

Text1.Text = "0123456789" & vbCrLf & _

"abcdefghijkl" & vbCrLf & "mnopqrtusxy"

End Sub

Private Sub Command1_Click()

Text1.FontName = "Marlett"

End Sub

Khi chương trình chạy bạn sẽ thấy các ký tự xuất hiện bình thường với font Tahoma.

Nhưng khi click vào nút Marlett thì kết quả như hình sau đây.

Rất tuyệt phải không bạn, như vậy nếu cần biểu tượng nào bạn có thể dùng ngay mà không phải mất công vẽ lại.

Về đầu trang

3. Thu nhỏ kích thước tập tin exe sau khi dịch chương trình.

Sau khi dịch chương trình thành file exe nếu thấy file này hơi lớn, bạn có thể dùng chương trình NeoLite để nén nó lại cho nhỏ bớt. Chương trình có thể nén các file sau:

NeoLite dùng để nén các chương trình 32 bit của Windows (.EXE, .DLL và .OCX). Sau khi đã nén chương trình này vẫn chạy bình thường như khi chưa nén, người dùng khó mà phát hiện được sự thay đổi do tốc độ của chương trình gần như không hề suy giãm. Chỉ có 1 sự khác biệt duy nhất là file đã nén nhỏ chỉ bằng 60% lúc đầu do đó tiết kiệm được một lượng đáng kể khoảng trống của chương trình trước khi phân phối đến người dùng.

- NeoLite có 2 mức nén: nén có khả năng phục hồi & nén vĩnh viễn (không phục hồi được, tùy chọn này cho tỷ lệ nén cao hơn).

- Không những thu nhỏ kích thước mà việc nén có thể bảo vệ cho chương trình, tránh được việc dịch ngược (de-compilers, dis-assemblers).

- Không có gì đảm bảo file sau khi nén còn chạy tốt trăm phần trăm, cho nên bạn phải cẩn thận khi sử dụng, đặc biệt là phải sao lưu trước khi nén.

* Cơ chế nén của NeoLite:

Khi NeoLite nén một chương trình nó sẽ ghép một module đặc biệt của chính mình với module của file chương trình đã được nén, module đặc biệt đó của NeoLite được gọi là loader program (xem hình).

Khi file chương trình này được triệu gọi, loader program sẽ chạy trước và mở nén module của chương trình đã nén trực tiếp vào bộ nhớ và cho thực thi như một chương trình bình thường.

Mọi sự ta nhìn thì vẫn cứ tưởng diễn ra bình thường, nhưng thật ra đằng sau hậu trường êm ái ấy, chương trình còn phải tốn chút thời gian để tự mở nén chính nó trước khi nạp vào bộ nhớ, khoảng thời gian này lớn hay nhỏ là còn tùy thuộc vào kích thước thực của file chương trình & tốc độ xử lý của máy tính.

No comments:

Post a Comment