Chương 4 : Building ActiveXControlActiveXControl là một object trong ứng dụng, được viết dưới dạng *.ocx và bộ phận này đặt trong form và nối liền với những ứng dụng khác như Visualbasic application, Microsoft Office documents (Word, Exel .), Web pages trình bày bởi Internet Explorer. Hãy xem khi các bạn xử dụngActiveX Control, bạn sẽ có những lợi ích gì ? Chương 4 _Phần 1 _Ðoạn 1 : Giới thiệu về Controls Activex Controls là bộ phận được xử dụng nhiều lần, bao gồm visual elements và code. Control Classes : Controls được hoán chuyển thành file dưới dạng *.ocx và các bạn sẽ đặt *.ocx file này vào trong form của ứng dụng. Bước này chúng ta gọi là design-time instance, khi người xử dụng cho form này chạy thì bộ phận ActiveX sẽ hoạt động, bước này gọi là run-time instance. Sau đây là hình ảnh trình bày về Control class và những bộ phận có liên quan với nó : Project files : Source codes và property value được giử dưới dạng *.ctl (text file) và đi chung với *.frm (form file). Graphical elements được giử dưới dạng *.ctx và đi chung với *.frx . Tất cả các files trên không thể thiếu khi hoán chuyển thành dạng ứng dụng, vì thiếu chúng, các bạn sẽ gặp trở ngại. Sau đây là hình ảnh cho thấy một ActiveX bao gồm những gì . Chương 4_Phần 1_Ðoạn 2 : Cách tạo thành một ActiveXControl Tuần tự chúng ta có 7 bước để tạo thành một ActiveX Control: 1. Mở một ActiveXControl project, giống như hình ảnh như sau 2. Thêm vào user interface cho nó, chẳng hạn như textbox, command button . 3. Xếp đặt properties và methods cho control đó. 4. Viết event procedure cho control đó, những tiết mục mà nó sẽ biểu diển, thí dụ như một clock control sẽ được xử dụng trên web page 5. Hoàn thành Events và các tiết mục sẳn sàng biểu diển khi gọi đến, thí dụ như tạo thành một clock control như sau 6. Tạo thành property pages cho Control 7. Ðiều chỉnh và chạy thử Control, bằng cách cho form mà có chứa control là start up project Chương 4_Phần1 _Ðoạn 3 : Adding Constituent Controls Một ActiveXControl bao gồm 2 bộ phận : UserControl object và Constituent Control. UserControl Object : Ðậy là bộ phận căn bản để tạo thành ActiveX Control. UserControl Object gồm có code modules và visual designer như chúng ta đã nói ở phần trên. Khi chúng ta mở bộ phận UserControl object thì bộ phận này được trình bày trong Visual Designer Window. Các bạn cũng có thể xử dụngVisual Designer Window Property để thêm vào Constituent Control (Tổ hợp các control phụ trong ActiveXControl mà đã được đặt trong Form). Sau đây là hình ảnh cho thấy UserControl Visual Designer với các hàng code đi chung với nó : Constituent Control : Nói cách khác là một instance của một bộ phận mà đã được đặt vào trong Form. Một khi mà bạn cho vào trong Form một ActiveX Control, thì cùng một lúc các instance của UserControl Object cũng được hình thành và hổ trợ cho nhau. Sau đây là hình ảnh cho thấy một UserControl Object cùng với các tổ hợp (constituent) của nó : Khi các bạn xử dụng các ActiveXControl không có trong tiêu chuẩn của Visual Basic, các bạn cần phải có sự đồng ý của người làm ra ActiveXControl đó. Chương 4_Phần 1_Ðoạn 4 : User Control events ActiveXControl là bộ phận chạy trên Form hoặc là những thể loại chứa đựngControl khác như Frame .ngoại trừ OLE object .cho nên những events (tiết mục mà nó sẽ biểu diển hay nói cách khác là những công việc sẽ được tiến hành) có phần khác biệt với những control events đặt trên tiêu chuẩn *.exe form. Khi các bạn làm một Control cho ứng dụng của mình thì UserControl object sẽ làm việc như một bản sao (blueprint). Và bản sao này đặt vào trong Form thì instance của Control đó cũng đồng thời được dựng nên để mà hổ trợ cho nhau. Những việc đó làm xong rồi thì các tiết mục sẽ được biểu diển. VisualBasic xử dụng từ Event là từ ý nghĩa đó. Có phải là trước khi biểu diển các bạn phải chuẩn bị sân khấu hay không ? Có sân khấu rồi thì các diển viên đã sẳn sàng chưa ? Khi diển viên biểu diển thì âm thanh và ánh sáng đã sẳn sàng chưa ? . Và trong UserControl event cũng tiến hành tương tự như vậy, control đã được đặt vào trong Form hay các Container khác hay chưa ? Instance của Control đó đã hình thành với các chức năng riêng biệt cho nó chưa? Kho nbu liệu đã sẳn sàng đáp ứng các tàiliệu mà bạn muốn không ? .Một event quan trọng là initialize, nó kiểm duyệt ứng dụng của các bạn đã đáp ứng đúng các yêu cầu mà control sẽ làm cho các bạn hay chưa ? Chúng tôi sẽ trình bày cùng các bạn các event quan trọng trong UserControl sau đây : User action Type of Control instance Events Ðặt control vào trong Form Design-time instance được hình thành Initialize InitProperties Resize Paint Cho ứng dụng làm việc lúc Design-time Design-time instance bị loại bỏ, run-time instance hình thành WriteProperties (if needed) Terminate Initialize Resize ReadProperties Paint Rời bỏ ứng dụng có chứa đựngControl trở về design mode Run-time instance bị loại bỏ, design-time instance hình thành trở lại. Terminate Initialize Resize ReadProperties Paint Ðóng lại form mà form đó có chứa Control Design-time instance bị loại bỏ WriteProperties (if needed) Terminate Hoán chuyển ứng dụng thành các dạng khác để có thể cho vay mượn Run-time instance hình thành Initialize ReadProperties Resize Paint Chương 4_Phần 1_Ðoạn 5 : Interacting with a Container Application Bởi vì control object bản chất của nó là đa tính, đa dạng, cho nên các bạn không thể nào đoán trước được control mà bạn sắp sửa xử dụng sẽ nằm trong container nào ? và càng không thể biết control đó biến dạng lớn nhỏ cở nào .Do đó, các bạn khi sắp đặt control của mình vào bất cứ container nào, đều phải để ý tới bản chất chung quanh hay là ảnh hưởng chung quanh giửa container và control. VisualBasic 6 giúp bạn làm việc này bằng cách tạo sẳn cho bạn một object gọi là Ambient properties (đặc tính chung quanh giửa container và control phụ thuộc vào nhau như thế nào ?). Cở lớn nhỏ của control được VisualBasic điều khiển bởi Resize event (chúng ta đã nói qua ở phần trên). Xử dụng Ambient Properties : Containers cung cấp cho Ambient Properties một số đặc tính để thích nghi với control, khi control đặt để vào trong container. Thí dụ như là BackColor property. Màu sắc của Control có phù hợp với container hay không ? . AmbientChanged Event : Tiết mục này sẽ được biểu diển khi ambient property có biến đổi. Vì nó là một event, cho nên các bạn phải viết code và argument (phần mà event phụ trách) của nó là PropertyName để xác định propery nào thay đổi. Ambient object : Bộ phận này giúp các bạn đọc được các giá trị của từng ambient property. Thí dụ như những hàng code sau đây cho chúng ta thấy cách xử dụng bộ phận Ambient trong AmbientChanged event : Private Sub UserControl_AmbientChanged(PropertyName As String) If PropertyName = "BackColor" Then UserControl.BackColor = Ambient.BackColor End If End Sub Xếp đặt cho property sẳn sàng hoạt động (Enabled Property) : Bạn phải làm 2 việc. Thứ nhất là viết code, dùng Get và Let procedure. Thứ nhì là đổi Enabled procedure ID thành Enabled. Thí dụ như những hàng code sau đây : Public Property Get Enabled() As Boolean Enabled = UserControl.Enabled End Property Public Property Let Enabled(ByVal NewValue As Boolean) UserControl.Enabled = NewValue PropertyChanged "Enabled" End Property Hãy theo các bước sau đây, các bạn có thể đổi Enabled procedure ID thành Enabled: 1. Trên Tools menu chọn Procedure Attributes. 2. Trong Name textbox, chọn Enabled procedure. 3. Bấm trên Advanced để mở rộng Procedure Attributes 4. Trong Procedure ID box, chọn Enabled thì code và user interface hòa hợp cùng nhau. Chương 4_Phần 1_Ðoạn 6 : Setting Display Characteristics of your Control Xếp đặt sao cho Control của bạn hiện hữu trong ứng dụng : VisualBasic làm dùm cho bạn một số properties và một event để giúp các bạn sắp xếp Control của mình xuất hiện trên khung ảnh máy vi tính khi ứng dụng tiến hành. Trong số đó có BackStyle property. BackStyle property có trong UserControl object dùng để sắp xếp sự xuất hiện của Control. Tuy nhiên, các bạn sẽ gặp một số trở ngại nếu các bạn có Control chứa đựng những vấn đề sau đây : • Control của bạn chứa nhiều constituent controls khác. • Control của bạn chứa bitmap với lượng màu cao. • Control của bạn có Label với TrueType font và lượng chử cao. Một phương pháp hữu hiệu khác là dấu đi Control và khiến nó xuất hiện trong quá trình tiến hành ứng dụng. Thí dụ như Timer control .Và muốn dấu nó đi, chúng ta sẽ không lấy làm khó khăn khi đổi InvisibleAtRuntime trong UserControl Object. Một điều quan trọng nữa là : làm sao trình bày Control của mình khi user xử dụng ? Không dể dàng vì màn ảnh máy vi tính không những có nhiều cở không chưa đủ, user họ còn xếp đặt màn ảnh của họ lớn nhỏ nữa để thích nghi với yêu cầu làm việc của họ??? .Nhưng các bạn không cần lo !!! .Vì VisualBasic làm cho bạn một event gọi là Resize event. Khi user xử dụng ứng dụng của bạn, với Resize event, họ sẽ không gặp trở ngại và chúng ta đở phiền phức. Sau đây là thí dụ về Resize event : Private Sub UserControl_Resize() Const MinWide = 2000 If UserControl.ScaleWidth < MinWide Then Text1.Width = 1000 Else 'Scale textbox to size of the UserControl. Text1.Width = UserControl.ScaleWidth - Text1.Left End If End Sub Chương 4_Phần 1_ Ðoạn 7 : Customizing your Control for the VB Environment Sau khi các bạn đã tạo thành một ActiveXControl rồi thì để dể dàng cho những người khác trong nhóm viết ứng dụng xử dụng cái ActiveXcontrol đó, có 2 chuyện chúng ta nên làm : 1. Thêm vào Control đó một About box nói khái quát về ActiveXcontrol 2. Thêm vào một Bitmap để trình bày về ActiveXcontrol đó trong VisualBasic toolbox Thêm About box vào ActiveXControl : Ðó là một property trong Properties Window. About box này sẽ trình bày khái quát về Công ty, chuyên nghiệp, chức năng của ActiveXcontrol .Dưới đây là hình ảnh cho thấy About box property: Theo các bước sau đây, các bạn sẽ thêm About box property vào trong control một cách dể dàng: 1. Mở một form và đặt tên là form About 2. Viết một Public procedure như sau : Public Sub ShowAbout() frmAbout.Show vbModal Unload frmAbout Set frmAbout = Nothing End Sub 3. Phân phối Pubilc procedure cho About box property : a) Trên Tool menu, chọn procedure Attributes b) Trong khung ảnh Procedure Attributes, chọn procedure mà nó trình bày About box, rồi bấm trên Advanced c) Trong danh sách Procedure ID, chọn About box, rồi bấm trên OK Dùng Bitmap tượng trưng cho ActiveXcontrol trong toolbox : Trong UserControl object, có một property là ToolboxBitmap, property này giúp các bạn thêm bitmap vào trong toolbox. Khi hoàn thành, các bạn sẽ có một bitmap xuất hiện trong toolbox như sau: . Constituent Controls Một ActiveX Control bao gồm 2 bộ phận : UserControl object và Constituent Control. UserControl Object : Ðậy là bộ phận căn bản để tạo thành ActiveX. 1. Thêm vào Control đó một About box nói khái quát về ActiveX control 2. Thêm vào một Bitmap để trình bày về ActiveX control đó trong Visual Basic toolbox