2009-08-04 22 views
10

Tôi đang thử nghiệm bằng cách viết điều khiển ActiveX và nhận thấy rằng tôi dường như không thể tạo điều khiển ActiveX trong Visual Basic (6.0) có tính năng điều khiển phức tạp hơn một chút. Các nút điều khiển đơn giản như nhãn, nút và hộp kiểm có vẻ hoạt động tốt, nhưng ngay khi tôi cố gắng thêm ví dụ: một điều khiển cây cho biểu mẫu của tôi, điều khiển ActiveX vẫn hoàn toàn trống ngay sau khi tôi nhúng nó vào một số ứng dụng máy chủ trên một máy tính khác. Nó hoạt động tốt trên hộp phát triển của tôi mặc dù.Nguồn thích hợp cho thành phần Windows Common Controls 6.0 (MSCOMCTL.OCX) là gì?

Trong khi đi qua Projects-> Linh kiện (Ctrl + T) danh sách, tôi thấy hai thư viện mà dường như chứa một điều khiển cây:

  • Microsoft Windows Common Controls 5.0 (SP2)
  • Microsoft Windows Common Controls 6.0 (SP6)

Ngay khi tôi thêm bất kỳ điều khiển nào từ các thư viện này vào biểu mẫu của tôi, biểu mẫu vẫn hoàn toàn xám khi được nhúng trên máy tính khác. Các máy tính khác là một hệ thống Windows XP, vì vậy tôi hy vọng rằng redistributables mất tích sẽ không phải là một vấn đề, cho bao nhiêu tuổi Visual Basic 6 là. Để chắc chắn, tôi đã cài đặt các phân phối lại VB6, nhưng tiếc là điều đó không tạo nên sự khác biệt.

Không ai biết tại sao điều khiển ActiveX của tôi sẽ giữ màu xám trên các máy tính khác, nhưng không phải trên máy tính của tôi, ngay sau khi tôi thêm bất kỳ điều khiển nào từ thư viện trên vào biểu mẫu? FWIW Tôi chỉ cần một cây điều khiển để nếu có một số khác, thích hợp hơn, thư viện có sẵn - đó là tốt với tôi.

UPDATE: Khi nó bật ra, nó giúp tải MSCOMCTL.OCX vào C: \ WINDOWS \ SYSTEM32 trên máy tính khác và sau đó đăng ký nó qua regsvr32 C:\WINDOWS\SYSTEM32\MSCOMCTL.OCX. Tuy nhiên, tôi không tìm thấy một nguồn chính thức cho tập tin này, và chạy đăng ký COM bằng tay trông cồng kềnh với tôi. Có thực sự không redistributable tôi có thể sử dụng?

+1

Điều khiển chung trước đó 5.0 (comctl32.ocx) có khả năng tương thích tốt hơn với XP/Vista so với Common Controls 6.0 (mscomctl.ocx). Tôi khuyên bạn nên sử dụng nó thay vì – rpetrich

+1

@rpetrich: Ồ, thật sao? Đó là cảm giác ruột của bạn, hoặc bạn có một số tài liệu hay như vậy để sao lưu điều đó? Nếu đó là sự thật, tôi thực sự đi cho CC 5.0 thay thế. –

Trả lời

10

Thời gian chạy VB6 được cài đặt sẵn trên XP và cao hơn nhưng thành phần Kiểm soát chung mà bạn đang tham chiếu thì không.

Thử cài đặt Microsoft Visual Basic 6.0 Common Controls có thể phân phối lại trên máy khách hoặc sự kiện tốt hơn là thiết lập cho ứng dụng của bạn.

Chỉnh sửa:

Opps, liên kết là bản cập nhật không cài đặt OCX nếu chưa có. Chỉ phân phối lại tôi tìm thấy là merge module cho Trình cài đặt Windows.

+0

Ah, thú vị! Thật vậy, tải 'mscomctl.ocx' vào máy XP và lưu trữ nó trong C: \ WINDOWS \ SYSTEM32 đã giúp. Sau đó tôi cần phải đăng ký máy chủ (bằng cách chạy 'regsvr32 C: \ WINDOWS \ SYSTEM32 \ MSCOMCTL.OCX') và điều đó làm mọi thứ hoạt động. Điều này là khá cồng kềnh mặc dù, là có thực sự không có cách nào dễ dàng hơn? : -/ –

+0

Nếu bạn đặt OCX trong cùng một thư mục EXE được chạy, thời gian chạy VB sẽ cố gắng đăng ký nó theo cách tự động (không cần phải có regsvr32).Các thay thế khác là reg-Việt COM với Make Manifest của tôi (http://mmm4vb6.atom5.com/) nếu bạn không muốn thiết lập đầy đủ. – wqw

+2

Không đặt OCX phổ biến vào thư mục ứng dụng và cho phép chúng tự reg khi chương trình VB6 gọi chúng. Đây là nơi DLL Hell đến từ. Tạo một trình cài đặt thích hợp cho ứng dụng của bạn, phiên bản đó kiểm tra và duy trì số lượng sử dụng trong sổ đăng ký như bạn dự định. Hoặc sử dụng MMM, nhưng nếu bạn có trách nhiệm phục vụ các phụ thuộc khi các phiên bản mới được phát hành (chủ yếu vì lý do bảo mật). – Bob77

Các vấn đề liên quan