2009-09-30 21 views
6

Tôi đang đi dạo xung quanh SO và gặp phải một số cuộc thảo luận về khung.Cách được chấp nhận để sử dụng khung ở Delphi là gì?

tôi chủ yếu là một hobbyist Delphi và không phải là một chuyên nghiệp vì vậy tôi đã phải học cách sử dụng TFrames cách phù thủy của riêng tôi là:

  • Tạo một TFrame đơn vị bên trong nó.
  • Thêm đơn vị đó vào dạng Sử dụng biểu mẫu chính.
  • Có một biến riêng của loại hình của TFrame rằng
  • OnCreate của mẫu instanciates các TFrame và gắn nó vào một TPanel cả vào Create và .Parent
  • Trên một trong những hành động của tôi thiết lập rằng TFrame.Visible: = True và .BringToFront.

Đây là thực tế của tôi sau khi cân nhắc một số cá nhân.

Bạn có thể sử dụng các khung khác bằng cách nào?

Trả lời

13

Đó là một cách và không có gì sai với nó. Một cách khác, là làm điều đó một cách trực quan. Vì vậy, về cơ bản bạn có thể thêm khung vào biểu mẫu. để làm điều này bạn:

  • Tạo khung của bạn.
  • Chuyển đến biểu mẫu bạn muốn đặt khung.
  • Thêm thành phần khung (Tab chuẩn)
  • Chọn khung của bạn từ trình đơn thả xuống.
  • Đúng vậy!
+3

Đây cũng là phương pháp ưa thích của tôi, nhưng trong một số trường hợp, tôi thấy hữu ích khi tạo khung "theo yêu cầu". Đặc biệt đối với các khung được sử dụng như một phần của điều khiển tab và có thể không bao giờ được hiển thị. –

+0

@sveinbringsli: yeah đó cũng là suy nghĩ của tôi. Quá nhiều bộ nhớ lãng phí để tạo ra 'em tất cả nếu người dùng của bạn sẽ chỉ sử dụng một hoặc hai. –

4

Bạn thậm chí có thể tiến thêm một bước nữa, bằng cách đăng ký khung của bạn làm thành phần.

Điều đó không cho phép bạn chỉnh sửa các thuộc tính của các thành phần trên Khung ngay sau khi thành phần Khung có trên biểu mẫu. Nhưng tôi nghĩ đó là một điều tốt.

Bạn cần thêm một điều nữa so với việc đăng ký khung của mình làm thành phần, như tôi giải thích trong bài viết này về Delphi – Frames as visual Components – don’t forget your Sprig!.

Kiến thức đó không phải của tôi: Tôi nhận được từ số Ray Konopka trong một trong số session s của mình tại số Delphi Live conference ở San Jose đầu năm nay.

1

Đây là câu trả lời tiêu cực hơn, nhưng tôi đã thử một tuyến đường bao gồm sửa chữa các TFrames cho một giao diện phức tạp chút. Lúc đầu nó đã ổn, nhưng khi ứng dụng trưởng thành và nhiều sự kiện khác bắt đầu bay, tôi phải tắt và sau đó xử lý tin nhắn một lúc (20ms) trước khi thay đổi, và thỉnh thoảng vẫn gặp sự cố khi thay đổi khung.

Một trong những thủ phạm tôi cuối cùng đã tìm thấy, TPopmenu cũng đăng ký chính nó trong cơ sở dữ liệu toàn cầu. Điều này làm giảm các vấn đề, nhưng họ vẫn còn ở đó, vì vậy tôi di chuyển ra khỏi khái niệm này.

+0

Yeaps, có ý nghĩa. Nếu bạn có quá nhiều khung hình thì chắc chắn sẽ hỏng. –

+0

Đó là nhiều hơn rằng có một nguy cơ rằng cửa sổ tin nhắn cho một khung sẽ đến mặc dù khung đã được reparented. –

5

Vấn đề duy nhất với cách tiếp cận của bạn là bạn không thể thêm nhiều trường hợp của cùng một khung mẫu cho:

Frame1 := TMyFrame.Create(Self); 
Frame1.Parent := Self; 
// ... 
Frame2 := TMyFrame.Create(Self); // bombs out with "a component with the name MyFrame already exists" 

Cách giải quyết cho mình là gán một tên khác nhau cho mỗi trường hợp:

Frame1 := TMyFrame.Create(Self) 
Frame1.Parent := Self; 
Frame1.Name := "FirstFrame"; 
// ... 
Frame2 := TMyFrame.Create(Self); // works now, there is no name conflict 
+0

Cảm ơn ý tưởng. Tôi thường chỉ cần một khung hình cho mỗi chức năng nhưng nó sẽ xảy ra sớm đủ để tôi cần nhiều phiên bản. Cảm ơn bạn!! –

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