• [Using Class Module] Các phương pháp bổ sung Component vào dự án của bạn
  • [Using Class Module] Các phương pháp bổ sung Component vào dự án của bạn

    maidinhdan > 07-10-16, 09:31 PM

    Tính làm 1 bài viết về Class Modules để cùng trao đổi và học hỏi thêm về cáh thức tạo và vận hành Class trong VBA Access và tạo ra các thư viên liên kết động *.dll, hay các Ad-In file để làm ứng dụng khác ta lấy ra sử dụng.

    Tình cơ đọc được bài viết này trên GPE cũng hay nên chia sẽ trước


    Trích dẫn:Bài viết của anh: [b]Đào Việt Cường[/b] Cu Tí sành điệu
    Chúng ta biết đến chức năng Add-Ins trong MS Excel như một công cụ bổ sung truyền thống. Hầu hết các mục đích bổ sung đều xuất phát từ việc mở rộng nhu cầu ứng dụng. Với các định dạng *.xla, chúng ta có gần như tất cả những gì chúng ta muốn. Chúng ta thường sử dụng cách này vì việc bổ sung và quản lý nó thuận tiện bằng công cụ Add-Ins Manager. Tuy nhiên cách thức bổ sung này bộc lộ một số nhược điểm:

    - Chỉ bổ sung được các tập tin *.xla (Microsoft Excel Add-In file)
    - Không tối ưu: một khi add-in được bổ sung vào MSE nó tự động kích hoạt khi trình Excel khởi động ngay cả khi bạn không mở ứng dụng của bạn.
    - Không bảo mật: nhiều phần mềm dò tìm mật khẩu có thể phá được password trong *.xla của bạn.
    - Tốc độ: do chưa được biên dịch ra ngôn ngữ máy, tốc độ xử lý sẽ thấp hơn (có thể do trình biên dịch phải compile mã chương trình)
    - Phân tán và khả năng chia sẻ thấp

    1. Bổ sung các component bằng "con đường Browse":
    Các bạn đã có dịp tìm hiểu về các về các thành phần cơ bản có trong một dự án VBA. Cũng từ đó, bộ lọc Browser cho các bạn biết các thành phần nào có thể được thêm vào dự án của bạn từ bên ngoài:
    • Type Libraries(*.olb, *.tlb, *.dll)
    • Executable Files (*.exe, *.dll)
    • ActiveX Controls (*.ocx)
    Hầu hết các component được bổ sung bằng con đường Browse này. Để thấy nhiều hơn, các bạn hãy ấn nút Browse trên hộp thoại References. Để ý đến mục Files of Type mặc định là Type Libraries(*.olb, *.tlb, *.dll) các bạn thấy mục đầu tiên là Microsoft Office Excel file (*.xls, *.xla). Mục này sẽ cho các bạn nhiều khám phá bất ngờ! Các bạn hãy thực hành và quan sát các hiện tượng xảy ra bên trong dự án của bạn sau khi bổ sung một *.xls hoặc *.xla vào dự án.

    2. Bổ sung các component bằng thủ tục đăng ký hệ thống RegSvr32:
    Phương pháp này hầu như chỉ áp dụng đối với các thư viện liên kết động (*.dll) hoặc các điều khiển ActiveX (*.ocx). Thủ pháp ở đây là thông qua lệnh Regsvr32 chúng ta có thể để "đăng ký" vào hệ thống các thành phần muốn được bổ sung. Các bạn thực hiện như sau:
    • Từ trình đơn RUN của Windows (tại thanh Start) nhập vào các thông tin:
    RegSvr32 <App.Path>\<component>
    Trong đó:
    - <component> là tập tin *.dll hoặc *.ocx
    - <App.Path> là đường dẫn đến tập tin <component>
    • Nếu đăng ký thành công, bạn sẽ nhận được một message thông báo:
    DllRegiterServer <App.Path>\<component> succeeded
    • Sau khi đăng ký, component sẽ được bổ sung vào danh sách References, các bạn cần mở lại hộp thoại References để đánh dấu chọn component đó trước khi sử dụng
    • Nếu bạn muốn gỡ bỏ các đăng ký hãy thêm từ khoá / u vào sau RegSvr32 như sau:
    RegSvr32/ u <App.Path>\<component>


     ______________________________________________________________________________________________
    Nào hãy tiếp tục tìm hiểu 1 số cái cơ bản về Class Module ( Bài viết được trích từ http://www.vovisoft.com)

    1. Sử dụng Class Module
     
    Class Module là gì ? Là tổng hợp của các bộ phận trong ứng dụng của các bạn.  Gọi tắt là COM ( Component Object Model ).  Phương pháp viết chương trình hiện đại là xử dụng components, một cơ chế trong ứng dụng của các bạn. Như chúng ta biết : Hệ thống viễn thông ngày càng phát triển và đóng một vai trò quan trọng trong đời sống hàng ngày của mọi người trên thế giới. Và trong hệ thống viễn thông, đại đa số, họ xử dụng COM components.  Do đó, trong việc viết chương trình ứng dụng, các bạn không thể thiếu các COM components được.
     
    Ứng dụng của các bạn, nếu được tách ra thành từng cơ cấu (components) thì rất dể dàng trong việc phát triển (developement) và giử gìn...Sau đây, chúng tôi sẽ lần lượt giải thích làm sau việc xử dụng Class Module là hữu ích.
     
    2. Sử dụng Object và Components
    COM components, chính nó là bộ phận mang lấy một chức năng nhất định trong ứng dụng.  Chính nó cũng là một ứng dụng, cũng có code, methodes, functions và được hoán chuyển thành .dll, .bas,..., và từ đó, nó được xử dụng như COM.
     
    Dưới đây là hình ảnh cho thấy các bạn có thể tạo thành một component và cùng một lúc có thể tạo thành 2 instances lúc run time
     
    [Hình: chuong3ab.gif]
     
    Khi bạn đã có Components rồi, bạn có thể lấy từ trong dự án của bạn hay là dự án ở ngoài... đều xử dụng được hết.  
     
    3. Những lợi ích khi xử dụng Components
     
    *Sử dụng nhiều lần : Khi các bạn tạo thành cho mình một bộ phận trong ứng dụng rồi (component) thì bộ phận đó sẽ được xử dụng nhiều lần.  Hoặc trong ứng dụng của bạn nhưng ở trong những form khác chẳng hạn...Hay là những người trong nhóm phát triển ứng dụng vẫn có thể xử dụng component đó...
    Chỉ cần bạn bỏ bộ phận đó trong kho nhu liệu là bạn có thể xử dụng bất cứ lúc nào.  Với Object browser, bạn có thể gọi component đó và xử dụng nhiều lần.
    *Làm giảm bớt sự phức tạp : Những người làm việc cùng nhóm với bạn sẽ không mất nhiều thời gian và công sức khi tìm hiểu những chức năng từng bộ phận trong phương trình ứng dụng.
    *Dể dàng trong việc sửa đổi : Khi cần thay đổi phương trình ứng dụng, các bạn không cần phải tốn nhiều thời gian và tránh được rất nhiều bugs khi nâng cấp ứng dụng...


     Class Module là gì ? Bài viết lấy hình ảnh trên VB6
     
    Các bạn muốn có một COM component trong ứng dụng của mình, chuyện đầu tiên là các bạn phải có một class module trong ứng dụng của bạn trước.  Rối sau đó, các bạn có thể xử dụng bộ phận COM đó trong suốt quá trình hoàn chỉnh ứng dụng hay cho các vay mượn tùy theo yêu cầu của chương trình.
     
    Class Module, đơn giản là một loại Visual Basic code module.  Ðược viết dưới dạng *.cls và tương tợ như *.bas , Khác biệt ở chổ là Class Module bao gồm chức năng (funtion) mà chức năng này có thể xử dụng ở những form khác trong cùng một ứng dụng.  Mỗi một class module ứng cho một bộ phận trong ứng dụng và các bạn có thể có vài thể loại class module trong ứng dụng của mình.
     
    Ðể xử dụng class module, các bạn phải làm cho nó một instance, rồi sau đó thông qua instance đó, mà các properties, methods, events của nó để rồi hoàn thành một cái class cho ứng dụng.
     
    Thí dụ điển hình là như vầy :
     
    Muốn có một Employee class mà nó có properties là : Lastname, Firstname.  Method là hired. Bạn phải làm một instance cho Employee object.  Rồi sau đó, muốn tìm chi tiết về các nhân viên bất cứ ở đâu trong ứng dụng, chúng ta chỉ cần xử dụng Employee class module mà thôi.
     
    Chương 3_Phần 2_Ðoạn 1 : Xử dụng Class Builder
     
    Ðể dể dàng cho việc tạo thành Class, Visual Basic có một công cụ gọi là Class Builder.  Nó tự động làm cho bạn một số việc và chuyện của các bạn là điền vào chi tiết mà thôi.  Ðây là công cụ để tạo thành Class : ( Trước đây mình cũng post 1 bài trên diễn đàn tool hỗ trợ viết Class này)
     [Hình: chuong3a1.gif]

    Sau đây là những phần mà Class Builder bao gồm :
    Property Builder
     [Hình: vb6chp1.gif]
    Method Builder
     [Hình: vb6chp2.gif]
    Event Builder
     [Hình: vb6chp3.gif]
    Attributes
     [Hình: vb6chp4.gif]
    Chương 3_Phần 2_Ðoạn 2 : Class Module Events
     
    Ðể tạo dể dàng cho các bạn viết ứng dụng, Visual Basic đã viết sẳn cho các bạn 2 events.  Ðó là initialize và terminate
     
    Initialize event : Nhất định các bạn phải kiểm soát các nhu liệu hay tài liệu cần thiết cho ứng dụng của mình, do đó, initialize event là event đầu tiên mình phải xử dụng.  Sau đây là các hàng code :

    Mã PHP:
    Private Sub Class_Initialize ()
    'Initialize Data
     iDept = 5
     End Sub 

     
    Terminate event : Dùng để chấm dứt công việc.  Sau đây là các hàng code

    Mã PHP:
     Private Sub Class_Terminate()
     'Any termination code
     End Sub 

     
    Và dỉ nhiên các bạn có thể thêm vào nhiều event nữa tùy theo yêu cầu của người xử dụng.
     
    Chương 3_Phần 2_Ðoạn 2 : Adding Component information and Help
     
    Vì có nhiều classes trong ứng dụng, cho nên để dể dàng trong việc xử dụng, chúng ta cần phải thêm vào các chi tiết nói về chức năng của class đó.  Và mỗi khi mủi chuột chỉ đến đâu thì những lời giải thích về chức năng đó hiện ra.  Theo các bước sau đây thì các bạn có thể thêm vào các lời giải thích :
     
      Nhìn vào hình ảnh dưới đây, chúng ta sẽ thấy làm sao để điền thêm chi tiết vào bộ phận Class
     [Hình: chap3a2.gif]

    Chương 3 _Phần 2_Ðoạn 4 : Xử dụng Object Browser
     
    Ðể nhận xét một cách tổng quát một class trong ứng dụng, hãy xử dụng Oject Browser.  Object Browser trong Visual Basic là một công cụ dùng để nhìn xem các properties, methods, events chứa đựng trong một class.  Trên View menu, bấm trên Object Browser, các bạn sẽ có một Object Browser.  Theo các bước trên, các bạn sẽ có được :
     [Hình: chap3a5.gif]
    Có 2 bản danh sách cho thấy project có bao nhiêu classes?  Trong class có bao nhiêu members ?...Và Object Browser cho chúng ta nhìn biết các bộ phận tron ứng dụng dể dàng hơn.
     
    Chương 3 _Phần 3 _Ðoạn 1 : Tạo thành Property
     
    Property xác định nhu liệu hay chức năng của một class.  Thí dụ như một class Employee có thể có các properties như FirstName, LastName, HireDate…Các bạn có thể xác định  property trong ứng dụng của mình bằng 2 cách :
     
    Sử dụng Public Variables : Các bạn không cần phải viết code khi property được hình thành, bạn chỉ cần xác định Public variable để giử nhu liệu mà thôi.  Thí dụ như sau
     
    Mã PHP:
    Public FirstName As String 
     
    Sử dụng Property Procedure : Dùng cách này nếu các bạn muốn viết code khi hình thành property.  Với property procedure, các bạn có thể làm những việc sau đây :
     
        Tiến hành procedure khi các dử kiện của property được xác định
        Làm cho property có một chức năng nhất định như giao trả một nhu liệu giới hạn nào đó.
        Không cho phép property thay đổi.
     
    Property procedure có 3 phần : Set, Let, Get.  Khi hình thành property procedure, các bạn xác định theo từng cặp, thí dụ như : Set và Get, Let và Get.  Bởi vì lý do giản dị là property set hay let phải được tiến hành trước, rồi sau đó, procedure get mới có thể cung cấp nhu liệu mà procedure Set hay Let xác định.  Như thí dụ điển hình sau đây :
     

    Mã PHP:
    Public Property Let FirstName(passedName As String)
                            mvarFirstName Ucase(passedName)
    End Property 


    Mã PHP:
    Public Property Get FirstName() As String
                            FirstName 
    mvarFirstName
    End Property 

     
    Sử dụng default Property : Theo những bước sau đây các bạn sẽ xác định được default property
     [Hình: chap3a7.gif]
     
    Chương 3_Phần 3_Ðoạn 2 : Tạo thành Methods
     
    Methods đại diện cho một chức năng trong ứng dụng của bạn mà class bao gồm.  Thí dụ như class Employee có 2 methods là Hire và PayIncrease.  Ðể tạo thành method cho một bộ phận trong ứng dụng, bạn chỉ cần tạo thành Public Sub hay là Function procedure trong class module đó.
     
    Sau đây là thí dụ làm sao để tạo thành một method là thêm dữ kiện vào trong kho nhu liệu :
     

    Mã PHP:
    Public Function Hire() As Boolean
            ‘ add employee record to database here
     MsgBox “Employee was added to the Database”
                ‘ 
    if successful
     Hire 
    True
    End Sub 

     
    Sau đây là thí dụ để tạo thành method tăng lương cho nhân viên :

    Mã PHP:
    Public Function PayIncrease (dPercent  As Double) As Integer
                mvarSalary 
    mvarSalary * (dPercent)
    End Function  

     
    Chương 3_Phần 3_Ðoạn 3 : Xử dụng Named Constants
     
    Khi các bạn xử dụng cách thay thế (variables) thì trong suốt quá trình ứng dụng tiến hành, variables sẽ giao trả cho bạn nhiều nhu liệu chứa trong Database (Kho nhu liệu).  Nhưng với Named Constants (thay thế bằng cách đặt tên), các bạn sẽ có lợi điểm là Named Constant chỉ giao trả một nhu liệu nhất định mà thôi.  Thí dụ như trong trường hợp phải xài 2 nút Yes và No cho một lựa chọn, bạn chỉ cần xài Named Constant là vbYesNo mà thôi.
     
    Tạo thành Named Constants : Ðơn giản như chúng ta xử dụng variable vậy.  Sau đây là thí dụ làm sao để có Named Constant tên là JobLevel
     

    Mã PHP:
    Public Enum JobLevel
              jExecutive 
    1
              jManagement 
    2
              jStaff 
    3
    End Enum 

     
    Với Named Constant này, bạn có thể thêm method vào trong class module của mình.  Như method xem cấp bậc việc làm của nhân viên như sau :
     

    Mã PHP:
    Public Sub CheckExecutiveStatus(iLevel As JobLevel
                
    If iLevel jExecutive Then
                            MsgBox “Executive Level Status Approved”
                
    Else
                            MsgBox “Executive Status Denied”
                End 
    If
    End Sub 

     
    Xử dụng Enumerations (cách xếp thứ tự bằng số) như là Property value : Các bạn đã có Named  Constant, các bạn cũng đã biết property value đi theo từng cặp Set và Get hay là Let và Get...Thì để xác định một chứ năng giao trả một dử kiện nhất định cho class module của mình, phương pháp hữu hiệu nhất là xử dụng Enumerations Property value.  Thí dụ bạn xáx định một property có tên là ActiveJobLevel thì hãy theo những bước sau đây :
     
    Private mvarJobLevel As JobLevel
     

    Mã PHP:
    Public Property Let ActiveJobLevel (jl As JobLevel)
                mvarJobLevel jl
    End Property 

     

    Mã PHP:
    Public Property Get ActiveJobLevel () As JobLevel
                ActiveJobLevel 
    mvarJobLevel
    End Property 

     
    Chương 3_Phần 3_Ðoạn 4 : Thêm Events vào trong Class Module
     
    Trước đó chúng ta đã biết Visual Basic có sẳn 2 events là Initialize và Terminate.  Và chúng ta cũng có thể thêm events vào trong class của mình tùy theo yêu cầu.  Thí dụ như chúng ta có một component gọi là COrder.  Chúng ta có thể dựng nên một event gọi là Status khi COrder tiến hành.  Theo 2 bước sau đây, chúng ta có thể thêm events vào trong class :
     
        DeClare the event      (Nhận định the event)
        Raise the event          (Dựng lên the event)
     
    Nhận định event : Xử dụng keyword là Event để nhận định.  Chẳng hạn như :
     
    Mã PHP:
    Public Event Status(ByVal StatusText As String
     
    Dựng lên event : Xử dụng RaiseEvent statement để dựng lên event.  Chẳng hạn như :
     

    Mã PHP:
    Public Sub SubmitOrder()
              ‘code to submit an order goes here
              RaiseEvent Status 
    (“Checking Credit...)
              ‘code to check the credit goes here
              RaiseEvent Status 
    (“Processing Order...)
              ‘code to process an order goes her
    End Sub 

     
    Những liên hệ khác với component : Khi nhận định Event, chúng ta có thể xử dụng ByVal (by value) hay ByRef (by reference).  Do đó tùy theo trường hợp nhận định event mà chúng ta dựng event lên. Nếu ByRef, chúng ta phải làm sao để class có thể trao đổi nhu liệu và event được tiến hành.  Chẳng hạn như thí dụ sau đây :
     

    Mã PHP:
    Dim iLimit As Integer
    iLimit 
    400
    ‘raise the event to be handled by the client
    RaiseEvent LimitChanged
    (iLimit)
    ‘now check to see if the client changed the limit
    If iLimit <> 400 Then
    ‘client did not accept the 
    new limit
    End 
    If 

    Ai còn bài nào giới thiệu lên tiếp nhé