2009-02-26 19 views
6

Mỗi lần một lúc tôi đang tinh chỉnh các lớp TFrame của tôi (thêm thuộc tính, phương thức, vv), IDE bị nhầm lẫn và hoạt động như thể nó nghĩ khung là một biểu mẫu, hoàn chỉnh với tiêu đề/chú thích, biên giới, vv Tuy nhiên, rõ ràng lớp được khai báo là một hậu tố TFrame. Bất kỳ ý tưởng nào về nguyên nhân gây ra điều này, cách phòng ngừa và cách khắc phục?Delphi IDE xử lý TFrame như thể nó là một Form

Tôi đang sử dụng Delphi 2007 Pro. Cũng lưu ý (nếu nó quan trọng), con cháu TFrame thường được đăng ký với IDE (tức là trên bảng màu) thông qua một gói thời gian thiết kế.


Sau đó: bổ sung "chi tiết cụ thể": Khung rằng tôi đang gặp vấn đề này với lúc này là, trực quan, một TFrame RẤT cơ bản (chỉ thay đổi từ thương hiệu TFrame mới là kích thước và màu nền).

Dưới đây là khai báo lớp của nó:

TBasePanel = class(TFrame) 
    private 
    FPanelManager: TPanelManager; 
    procedure SetPanelManager(const Value: TPanelManager); 
    protected 
    procedure Connect; virtual; abstract; 
    procedure Disconnect; virtual; abstract; 
    procedure Refresh; virtual; 
    procedure Requery; virtual; abstract; 
    published 
    property PanelManager: TPanelManager read FPanelManager write 
     SetPanelManager; 

khung này được sử dụng như một lớp cơ sở đối với một số người khác. Tôi thường chỉnh sửa trực tiếp từ dự án BPL thuộc về (vì tất cả các khung này được cài đặt vào bảng màu), chứ không phải là một phần của dự án EXE, với các Biểu mẫu liên quan đang mở, v.v.

Ngoài ra, "Embedded designer" được chọn trong Công cụ -> Tùy chọn.

Tôi đang lưu tất cả các tệp DFM dưới dạng văn bản chứ không phải là nhị phân (nếu có vấn đề gì).

+1

Chỉ cần cập nhật về điều này: Câu trả lời có vẻ là sự kết hợp câu trả lời của birger bên dưới CỘNG ĐỒNG tạo "Lớp khung cơ sở" không có thay đổi so với TFrame bình thường và THEN kế thừa từ đó trước khi thêm bất kỳ thuộc tính, phương thức, v.v. Dường như để ổn định việc truyền thừa kế thừa bằng cách nào đó. – Jamo

Trả lời

8

Tôi đã gặp phải vấn đề tương tự. Các bước sau đây đã giải quyết được vấn đề đối với chúng ta, nó cũng có thể làm việc cho bạn:

  1. trong IDE: đóng tất cả các hình thức sử dụng khung
  2. mở khung, xem dưới dạng văn bản (* .dfm)
  3. các dfm lẽ bắt đầu với đối tượng MyFrame: TMyFrameClass
  4. thay đổi này để MyFrame thừa hưởng: TMyFrameClass

tôi không biết những gì gây ra vấn đề.

+0

Điều này dường như làm việc trên các lớp tổ tiên, nhưng tôi vẫn có vấn đề đôi khi với lớp "gốc" (một trong những giảm dần từ TFrame). Đó là "đầu tiên" một NÊN được "đối tượng", phải không? – Jamo

+0

Tôi không chắc chắn, trong dự án nơi tôi gặp sự cố này, tất cả các khung bắt đầu bằng 'MyFrame được thừa kế: TMyFrame'. Hậu duệ đầu tiên từ TFrame mà chúng tôi sử dụng không có dfm, vì vậy tôi không thể kiểm tra những gì nên có trong dfm ở đó. – Birger

+0

Thú vị! Tôi không nghĩ đến việc có con cháu TFrame "đầu tiên" là một người không có DFM hoàn toàn. Điều đó có thể loại bỏ các vấn đề "cơ sở TFrame" tôi nghi ngờ. Hmmm ... Cảm ơn thông tin đó. Sẽ thử nghiệm với cách tiếp cận này! – Jamo

0

Theo như tôi biết, bạn phải có cả biểu mẫu và khung mở trong trình chỉnh sửa khi bạn chỉnh sửa khung. Khác có thể có vấn đề cập nhật. Mặc dù tôi chưa thấy cái này.

Nhưng tôi đã từ bỏ các khung hình một thời gian dài trước đây vì tôi không thấy chúng rất đáng tin cậy.

Hiện tại tôi chỉ sử dụng chúng để tạo mẫu, tạo thành phần tùy chỉnh (bắt nguồn từ bảng điều khiển có các điều khiển thích hợp trên đó).

1

Có lẽ bạn đã bỏ chọn hộp kiểm 'Nhà thiết kế được nhúng'? (Công cụ | Tùy chọn | Tùy chọn Môi trường | Thiết kế VCL). Sau đó, thực sự, khung của bạn được hiển thị tại thời điểm thiết kế dưới dạng biểu mẫu (có chú thích, đường viền, v.v.). Ngoài ra, một mã bê tông của con cháu TFrame có vấn đề của bạn hoặc nhiều chi tiết về trường hợp của bạn sẽ hữu ích.

0

You may have to register custom module to the IDE Nhưng các thuộc tính bổ sung của bạn sẽ không hoạt động tốt trừ khi chúng thuộc lớp tổ tiên.

+0

Bạn vẫn cần thực hiện điều này, ngay cả khi toàn bộ thành phần dựa trên khung được đăng ký qua gói thiết kế? Nó hiển thị trên bảng màu tốt, và các thuộc tính được xuất bản hiển thị trong thanh tra. Nó không "mất hành vi khung của nó" nhưng đó thực sự là những gì tôi muốn. Không theo dõi điều này. – Jamo

+0

Đây không phải là việc đăng ký nó như một thành phần thông thường. Bạn có thể cần phải đăng ký mô-đun tùy chỉnh để có được thiết kế thích hợp cụ thể behaivour. Tuy nhiên tôi không chắc chắn vì làm thế nào ide được xử lý Tframe trong thời gian thiết kế không phải là minh bạch cho các lập trình viên. Nhưng nó là giá trị để thử theo ý kiến ​​của tôi. – Serguzest

0

Tôi gặp phải rất nhiều vấn đề với TFrame và cuối cùng đã giải quyết mọi vấn đề của mình: Tôi tạo và thiết kế khung trực quan, nhưng chỉ sử dụng chúng bằng mã hóa tay.

Là một tác dụng phụ, các ứng dụng của tôi trở nên nhỏ hơn, vì ít dfm-s hơn.

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