2013-02-14 9 views
5

Trong tài liệu Delphi về số TCustomForm.FormStyle một ghi chú được thêm vào rằng các trạng thái: "Không nên thay đổi FormStyle khi chạy."Tại sao không nên thay đổi kiểu dáng khi chạy?

Tôi muốn biết lý do tại sao không nên thay đổi kiểu dáng khi chạy. Bạn có nên sử dụng điểm giao diện người dùng hoặc có một số vấn đề kỹ thuật có thể xảy ra không? Và loại vấn đề nào có thể xảy ra sau khi thay đổi formstyle khi chạy?

Sử dụng trường hợp

Chúng tôi muốn cải thiện hỗ trợ đa màn hình của ứng dụng MDI của chúng tôi. Hiện tại tất cả các cửa sổ con được mở trong cửa sổ chính (cửa sổ chính của MDI). Những gì người dùng muốn là để có thể mở/di chuyển một cửa sổ con bên ngoài cửa sổ chính để cửa sổ con sẽ được mở ra như cửa sổ nổi riêng biệt có thể được đặt bất cứ nơi nào trên màn hình Windows.

Tôi đã xem các ví dụ về chức năng này trong Adobe Photoshop, Google chrome và Microsoft Internet Explorer. (Các tab có thể được di chuyển từ thanh tabbar và sẽ được mở trong cửa sổ nổi riêng biệt)

Trả lời

8

Thay đổi FormStyle khi chạy từ fsNormal để fsMDIform hoặc fsMDIChild đòi hỏi phải tái tạo tay cầm cửa sổ, và đến lượt nó đòi hỏi sự tái tạo của tất cả các cửa sổ xử lý cho tất cả các điều khiển trên mẫu của bạn. Có rất nhiều điều ngoài tầm kiểm soát của Delphi khi điều đó xảy ra: có thể bạn đang sử dụng một số kiểm soát của bên thứ ba dựa trên một số điều khiển Windows nhưng điều khiển bên thứ 3 không biết cách lưu trạng thái của nó. Người dùng sẽ mất tất cả công việc khi xử lý Cửa sổ được tạo lại.

May mắn thay, bạn có thể làm việc xung quanh vấn đề này:

  • Dừng sử dụng MDI, làm cho tất cả các cửa sổ của bạn "phao" và đối phó với họ một số cách khác. MDI đã lỗi thời trong một thời gian.
  • Chỉ cần làm điều đó, tùy thuộc vào loại điều khiển bạn có, nó có thể hoạt động tốt. Nếu không, hãy xem những gì đã xảy ra và làm việc xung quanh nó (ví dụ: bạn có thể cần tự mình lưu lại một số trạng thái của điều khiển và khôi phục lại nó sau khi hoán đổi)
  • Hãy thử đặt mọi thứ trên một khung; Khi người dùng muốn di chuyển, hãy tạo một biểu mẫu không MDI/MDI trống mới, tái bố trí khung hình, phá hủy Biểu mẫu cũ.
+0

+1 Các tùy chọn cuối cùng có lẽ là sự chuyển đổi dễ dàng nhất có sẵn cho một cơ sở mã hiện có. –

6

Rất có thể đó là do thay đổi kiểu biểu mẫu sẽ dẫn đến việc tạo lại cửa sổ xử lý. Và điều này sẽ buộc tái tạo các tay cầm của tất cả các cửa sổ con.

Tạo lại cửa sổ bằng và lớn thứ gì đó có thể xảy ra mà bạn không nhận thấy. Nhưng có những điều khiển có vấn đề với việc tái tạo. Tôi đã bị điều này với điều khiển thanh công cụ trong quá khứ, ví dụ. Các phiên bản gần đây của Delphi có tính đàn hồi cao hơn để tái tạo.

+0

Đây cũng là suy nghĩ của tôi. Tôi đã có vấn đề với các tin nhắn được gửi đến tay cầm cũ của một điều khiển chưa được xử lý (không có ý định chơi chữ) bị loại bỏ, đó cũng là điều cần chú ý. – hvd