2011-11-17 25 views
5

Có thể tạo ứng dụng MDI bằng FireMonkey theo nghĩa truyền thống của nhiều dạng tài liệu/khung và một biểu mẫu chính không?Giao diện MDI với FireMonkey

Tôi đặc biệt quan tâm vì không có điều khiển MDI trên biểu mẫu nữa .. Nó đã được thay thế bằng một cái gì đó khác?

EDIT: Thêm vào câu hỏi, khi tôi tạo các biểu mẫu con tất cả họ đều cho thấy riêng trong thanh tác vụ, ngay cả những OpenDialogs ..

+0

Tôi đoán điều đó sẽ được khắc phục sau khi bản cập nhật XE2 vẫn được phát hành. – Kromster

Trả lời

5

Dưới đây là một cách tiếp cận bạn có thể sử dụng:

1) Tạo hình thức cá nhân của bạn như bình thường, ngoại trừ sử dụng TLayout, gọi nó là "LayoutMain", (căn chỉnh alClient) làm cha mẹ của tất cả các điều khiển trên biểu mẫu đó.

2) Trên "biểu mẫu chính" của bạn, khi bạn muốn đưa biểu mẫu vào để hoạt động như giao diện MDI, hãy tạo TLayout (gọi nó là "FormContainer"), đặt dưới dạng con của (liên kết đến đầu) một TLayout khác (gọi nó là "FormHeader"), chứa các điều khiển riêng lẻ cho Phụ đề biểu mẫu, các nút Thu nhỏ/Tối đa/Đóng và bất kỳ thứ gì bạn muốn trên tiêu đề "khung". Đây được gọi làComposite.

3) Tạo một thể hiện của biểu mẫu con của bạn (nhưng không hiển thị nó), sau đó cha mẹ của cá thể đó là TLayout chính "LayoutMain" vào biểu mẫu chính của bạn "FormContainer".

4) Trên TLayout đã đề cập trước đó (với tên "FormHeader"), hãy cho các sự kiện OnMouseDownOnMouseMove để cung cấp khả năng kéo nó xung quanh Biểu mẫu chính.

Khi bạn muốn tối đa hóa biểu mẫu con bên trong biểu mẫu chính, bạn chỉ cần đặt thuộc tính căn chỉnh bên ngoài "FormContainer" thành alClient, nhớ lưu trữ các giá trị Gốc, Trái, Chiều rộng và Chiều cao ban đầu trong biểu mẫu Ví dụ để bạn có thể gọi lại khi nhấn nút Khôi phục.

Đúng, đây là một giải pháp khá có liên quan, nhưng theo hiểu biết của tôi thì đây là cách duy nhất bạn sẽ đạt được những gì bạn đang cố gắng làm với FireMonkey vì nó tồn tại ngày hôm nay (circa Update 2).

Tôi không mong đợi Embarcadero cung cấp bất kỳ dạng mô phỏng MDI nào như một phần của FireMonkey "ngoài hộp", vì MDI được coi là một cách tiếp cận kiểu cũ.

Giải pháp hiện đại hơn sẽ là sử dụng Docking, như chính RAD Studio IDE. Điều này cung cấp tốt nhất của cả hai thế giới, cho phép người dùng tự do lựa chọn hình thức con mà họ muốn liên kết vào biểu mẫu chính hoặc hiển thị bên ngoài hình thức đó (hoặc bất kỳ sự sắp xếp nào được sắp xếp).

+0

Cảm ơn câu trả lời tốt, chắc chắn nó sẽ giúp ích. Đối với trường hợp của tôi, tôi đang tìm kiếm một giải pháp kinh điển hơn cho phép tôi có một số cửa sổ MDI với TFMXHandles duy nhất (mà tôi sẽ chuyển đổi sang nền tảng HWNDs để khởi tạo ngữ cảnh OpenGL trên chúng). Giải pháp hiện tại của tôi là tạo ra một số hình thức, nhưng thật đáng buồn là họ không hành động tốt - Z trật tự và tập trung từ thanh tác vụ là sai. – Kromster