24/05/2018, 20:00

Viết ứng dụng

Viết chương trình tạo trang Web chứa các Link đến các tập tin trong một thư mục được người dùng chỉ định. Chương trình này có các chức năng và hoạt động tổng quát như sau: Chọn thư mục Lọc file Cho người dùng chọn file ...

 

Viết chương trình tạo trang Web chứa các Link đến các tập tin trong một thư mục được người dùng chỉ định.

Chương trình này có các chức năng và hoạt động tổng quát như sau:

Chọn thư mục

Lọc file

Cho người dùng chọn file

Đặt dòng văn bản ở đầu danh sách

Đặt dòng văn bản ở cuối danh sách

Sau khi tạo xong cho phép xem bằng IE hay Notepad

Chọn canh lề: Trái, phải , giữa.

Khi bạn nhấn nút "Tạo" trong Form chính (Form1) chương trình sẽ tạo một trang Web chứa các link đến các file trong thư mục, trang Web này được lưu vào cùng thư mục mà bạn chỉ định.

Mỗi lần người dùng chỉ định thư mục, chương trình sẽ tự động điền đường dẫn và tên file (mặc nhiên là List_index.htm) vào hộp chọn file name (Text1)

Để dễ dàng trong việc chọn lựa ta dùng thêm một ListBox (List1) thế cho FileListBox (File1). Bạn nên cho ListBox nằm đè lên đối tượng File1 (hoặc cho File1.Visible=False) vì ta chỉ cần File1 để lấy tên các tập tin Add vào List1 chớ không dùng đến.

Một ComboBox (Combo1) để lọc file theo từng loại file hoặc tất cả (do người dùng tự chọn hay gõ vào).

Đồng thời cung cấp thêm các nút lệnh: "Chọn" chọn tất cả các tập tin trong Listbox, "Không" bỏ chọn tất cả các tập tin trong Listbox (bạn cũng có thể chọn bằng cách Check vào từng tên file tương ứng), "Tạo" nhấn nút này để bắt đầu tạo trang Web, "Thông số" nhấn nút này để xác lập thêm các tùy chọn cho trang Web, "Thoát" Thoát khỏi chương trình.

Ta chỉ cần viết code cho menu, sau đó dùng các nút lệnh để gọi menu tương ứng.

Bây giờ chúng ta viết code cho mục Windows Explorer trong menu Windows. Vào Windows chọn  Windows Explorer để viết code cho mục chọn menu này.

Bạn gõ vào đoạn sau:

Private Sub mnuWE_Click() ' dòng này có sẵn

Dim PP = Shell("explorer", vbNormalFocus)

End Sub ' dòng này có sẵn

Giải thích:

* Dim P

Khai báo 1 biến kiểu variant để chứa trị trả về của hàm Shell. Đây là kiểu dữ liệu bao trùm tất cả các kiểu dữ liệu trong Visual Basic.

* P=Shell("explorer",vbNormalFocus)

Hàm Shell dùng để gọi một chương trình khác thi hành

Cú pháp Shell(pathname[,windowstyle])

pathname: là đường dẫn và file thực thi của chương trình cần gọi. Đây là 1 xâu cho nên khi viết bạn phải đặt chúng trong cặp dấu " " mới đúng.

windowstyle: là hằng số qui định phong cách khi khởi động của chương trình cần chạy. Thí dụ: sau khi gọi chương trình bạn cần Maximize, Minimize chương trình đó ... các hằng có giá trị và ý nghĩa như sau:

Tên hằng Giá trị ý nghĩa
vbHide 0 Window is hidden and focus is passed to the hidden window.
vbNormalFocus 1 Window has focus and is restored to its original size and position.
vbMinimizedFocus 2 Window is displayed as an icon with focus.
vbMaximizedFocus 3 Window is maximized with focus.
vbNormalNoFocus 4 Window is restored to its most recent size and position. The currently active window remains active.
vbMinimizedNoFocus 5 Window is displayed as an icon. The currently active window remains active.

Vậy có thể viết lại hàm Shell như sau Shell("explorer",1) cho gọn

Lưu ý: Trong phần pathname của hàm shell lý ra phải ghi đầy đủ đường dẫn, thí dụ"C:WindowsExplorer.exe" (giả sử thư mục windows là c:windows) thay vì "explorer.exe". Sở dĩ ta có thể ghi gọn như vậy là vì Windows tự động đặt dường dẫn path đến các thư mục như: Windows; Windowssystem. Do đó chỉ cần ghi explorer.exe cho tổng quát (khỏi sợ sai đường dẫn khi đem chạy trên máy khác).

Bây giờ nhấn F5 để chạy chương trình, vào menu Windows chọn Windows Explorer, lập tức chương trình Windows Explorer được khởi động.

Tương tự như vậy bạn có viết code cho tất cả các menu con còn lại của menu Windows.

Notepad.exe (Windows/Notepad)

Write.exe (Windows/WordPad)

Pbrush.exe (Windows/Paint)

Đối với Paint và WordPad ta phải dùng 2 file write.exe & pbrush.exe trong thư mục Windows để khởi động. Thực ra 2 file này chỉ có chức năng gọi WordPad.exe và MSPaint.exe (trong thư mục Program FilesAccessories) chứ không phải là file chương trình chính. Microsoft phải làm vậy để tương thích với các chương trình cũ.

Còn các mục chọn khác bạn cũng viết hàm Shell tương tự nhưng đường dẫn phải cụ thể và chính xác. Thí dụ để viết code cho menu "Lac Viet td". Vào VietNamese / Lac Viet td, gõ vào

Private Sub mnuLV_Click()

Dim FF=Shell("d: oolslvtdlvtd.exe",1)

End Sub

Do file lvtd.exe của máy tôi nằm trong thư mục d: oolslvtd

Nhấn F5 chạy thử xem có vừa ý hay không ?

Bây giờ ta viết lệnh cho các CommandButton tương ứng. Yêu cầu là viết code sao cho khi nhấn vào nút Windows thì menu Windows tương ứng sẽ hiện ra như hình minh họa

+ Windows (cmdWin) gọi menu Windows (mnuWin)+ Application (cmdApp) ---> mnuApp+ VietNamese (cmdVN) ---> mnuVN

Double click vào cmdWin (hay Right click chọn View code từ menu popup), gõ vào

Private Sub cmdWin_Click()

popupmenu mnuWin

End Sub

Giải thích:

popupmenu mnuWin hành vi (method) popupmenu dùng để hiển thị menu có tên mnuWin

Xem cú pháp popupmenu

Tương tự cho 2 nút lệnh còn lại. Khi chạy thử chương trình bạn click vào nút lệnh nào sẽ xuất hiện menu tương ứng. Từ đây người dùng có thể chọn lệnh từ menu popup hay menu pulldown (menu kéo xuống) đều được.

Viết lệnh cho nút Exit như sau:

Private Sub cmdExit_Click()    EndEnd Sub

Đối tượng Timer

Nếu đang ở chế động tự động thoát (mục Unload after 20 Sec được chọn) sau 20 giây chương trình sẽ tự động thoát, không cần chúng ta can thiệp. Để làm được việc này ta phải dùng Timer và  Picture box (picIns, picOut) đã tạo từ trước.

Sau khi chương trình khởi động hoặc khi check vào checkbox. Mỗi giây độ rộng hiện tại của picIns cộng với độ rộng của picOut/20 (vì 20 giây), cho đến khi độ rông của picIns = picOut thì dừng chương trình. Nếu không check chức năng tự động thoát không hoạt động.

Chúng ta tiến hành viết code cho các đối tượng như sau

Tình huống Form_Load() sẽ được kích hoạt khi chương trình khởi động, timer hoạt động với trị interval = 1000 (tương đương 1 giây), độ rộng picIns ban đầu là 0.

Private Sub Form_Load()    Timer1.Interval = 1000    PicIns.Width = 0End Sub

Khi người dùng Click vào check box. Nếu có chọn sẽ làm cho timer hoạt động tương tự như Form_Load(), nếu không chọn thì cho timer ngừng.

Private Sub chkUnload_Click()If chkUnload.Value = 1 Then    PicIns.Visible = True    Timer1.Interval = 1000Else    Timer1.Interval = 0    PicIns.Visible = FalseEnd IfPicIns.Width = 0End Sub

Kiểm tra xem độ rộng picIns >= picOut hay không. Nếu có, kết thúc chương trình (End), nếu không tiếp tục tăng độ rộng picIns theo chu kỳ mỗi giây 1 lần. 

Private Sub Timer1_Timer()If PicIns.Width >= PicOut.Width Then    EndElse    PicIns.Width = PicIns.Width + PicOut.Width / 20End IfEnd Sub

Chạy thử chương trình xem nó có tự động thoát không. Thử click vào check box xem có hoạt động như mong muốn chưa.

Thêm vài lời nhắc nhỡ

Chúng ta còn sót 1 đối tượng là lblMsg (Label box) chưa sử dụng đến. Label box này ta dùng để in câu thông báo hướng dẫn mỗi khi người dùng rê Mouse qua các Command Button.

Thí dụ như: Khi rê mouse trên nút Windows thì câu thông báo sẽ là "Các ứng dụng chuẩn của Windows" chẳng hạn. Để làm được điều này ta hãy khảo sát tình huống MouseMove của đối tượng, cụ thể là của Command Button và Form. Right click vào nút Windows, chọn View code, chọn tình huống MouseMove.

Private Sub cmdWin_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)    lblMsg.Caption = "Run Windows Utilities (Accessories group)"End Sub

Hiển thị câu thông báo Run Windows Utilities (Accessories group) trong lblMsg khi mouse di chuyển trên nút Windows. Một cách tương tự bạn có thể làm cho các button còn lại.

Private Sub Form_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)    lblMsg.Caption = "Please, select a program to start your work."End Sub

Hiển thị câu thông báo Please, select a program to start your work. trong lblMsg khi mouse di chuyển phía trên form

Khi chạy chương trình, bạn thử rê mouse lên các button sẽ thấy nội dung của lblMsg thay đổi liên tục (hiển thị các câu thông báo của chính bạn).

Làm sao để form khởi động ở giữa màn hình

Đối với Visual Basic version 5 & 6, thì chuyện này rất dễ nhưng có vẻ bí hiểm. Bạn chỉ cần right click lên cửa sổ Form Layout (nếu chưa hiển thị hãy bật lên bằng cách ViewForm Layout Window) chọn Startup Position, chọn Center Screen là xong ngay.

Không những thế, bạn còn có thể tự hiệu chỉnh vị trí form sẽ hiển thị trên màn hình khi chạy một cách rất trực quan. Còn nếu bạn khoái thủ công, hãy thêm dòng lệnh này vào tình huống FormLoad của form cần canh giữa màn hình như sau.

Private Sub Form_Load()    Me.Move (Screen.Width - Me.Width) 2, (Screen.Height - Me.Height) 2End Sub

Cách này áp dụng cho mọi phiên bản của Visual Basic.

Cuối cùng bạn chỉ dịch ra file EXE để chạy.

Chúc bạn thành công !

    Bạn có thể thực hiện các chức năng với một cửa sổ như Phóng to, Thu nhỏ, Gửi xuống Taskbar, Di chuyển, Chỉnh kích thước hoặc bật nút Start của Windows hay đặt chế độ Standby, chạy Screen Saver thậm chí tắt màn hình máy tính của mình bằng cách gọi hàm API. Chương trình VB dưới đây mô phỏng những việc này.

Caption Name
Standby cmdStandby
Start cmdStart
Minimize cmdMinimize
Maximize cmdMaximize
Move cmdMove
Size cmdSize
Close cmdClose

Copy đoạn code này và dán vào chương trình của bạn

Private Const WM_SYSCOMMAND = &H112Private Const SC_SCREENSAVE = &HF140&Private Const SC_MINIMIZE = &HF020&Private Const SC_MAXIMIZE = &HF030&Private Const SC_RESTORE = &HF120&Private Const SC_TASKLIST = &HF130&Private Const SC_MOVE = &HF010&Private Const SC_SIZE = &HF000&Private Declare Function SendMessage Lib "user32" Alias "SendMessageA" _(ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As LongDim WDMax As BooleanPrivate Sub cmdMinimize_Click()SendMessage Form1.hwnd, WM_SYSCOMMAND, SC_MINIMIZE, 0End SubPrivate Sub cmdMaximize_Click()If WDMax = True ThenSendMessage Form1.hwnd, WM_SYSCOMMAND, SC_RESTORE, 0WDMax = FalseElseSendMessage Form1.hwnd, WM_SYSCOMMAND, SC_MAXIMIZE, 0WDMax = TrueEnd IfEnd SubPrivate Sub CmdClose_Click()EndEnd SubPrivate Sub cmdMove_Click()SendMessage Form1.hwnd, WM_SYSCOMMAND, SC_MOVE, 0End Sub

Private Sub cmdSize_Click()SendMessage Form1.hwnd, WM_SYSCOMMAND, SC_SIZE, 0End SubPrivate Sub cmdStandby_Click()SendMessage Form1.hwnd, WM_SYSCOMMAND, SC_SCREENSAVE, 20End SubPrivate Sub CmdStart_Click()' Start menuSendMessage Form1.hwnd, WM_SYSCOMMAND, SC_TASKLIST, 0End Sub

 

o=========)================ END ===============================>

 

    Với chương trình này bạn có thể làm được nhiều việc khá thú vị, nhưng tiếc là tôi không tìm ra cách để tắt màn hình và gọi trình bảo vệ màn hình (Screen Saver) bằng VB, do đó tôi sử dụng Borland Delphi 6.0 để thực hiện. Dưới đây là đoạn code bằng Delphi có thể tắt màn hình và chạy Screen Saver. 

Nếu có thể bạn nên viết chương trình có chức năng đặt biểu tượng vào Systray, sau đó bật một Popup menu để chọn các chức năng như Đóng mở CD-ROM, Tắt màn hình, Chạy Screen Saver.... đó quả là một chương trình có ích.

 Delphi

 

Bạn tự thiết kế giao diện, và trên đó bạn đặt 2 Button với Name là Button1 và Button2, Caption tuỳ ý, sau đó click đúp vào một Button để hiện ra cửa sổ soạn thảo và gõ đoạn lệnh sau vào.

 

procedure TForm1.Button1Click(Sender: TObject);beginSendMessage(application.Handle,WM_syscommand,SC_MonitorPower,1);

{bạn có thấy số 1 ở gần cuối dòng lệnh trên không ? nó có nghĩa là Tắt màn hình,

bạn thay bằng số 0 (không) thì sẽ chuyển về chế độ Text }end;procedure TForm1.Button2Click(Sender: TObject);begin{Tương tự như trên}

{1: Standby}{0: Screen Save (chỉ có hiệu lực khi bạn đang sử dụng 1 trình Screen Saver)}SendMessage(application.Handle,WM_syscommand,SC_ScreenSave,0);

0