2012-02-08 33 views
5

Tôi hiện đang cố gắng phát triển một dự án dựa trên Firemonkey. Tôi đang sử dụng Firemonkey cho các tính năng giao diện người dùng của nó vì dự án bao gồm nhiều ứng dụng nhỏ hơn, mỗi ứng dụng đều có khía cạnh 3D. Tôi hiện đang chỉ phát triển/triển khai cho Windows với khung công tác FMX, nhưng có thể chuyển sang nền tảng chéo sau này.Firemonkey - Xử lý tin nhắn

Tôi đã gặp phải hầu hết các vấn đề tôi gặp phải khi xây dựng ứng dụng Windows VCL trong nền để thực hiện một hành động rất cụ thể và sau đó xây dựng giao diện FMX. Tuy nhiên, điều này chỉ phù hợp khi bạn chỉ muốn thực thi ứng dụng để thực hiện hành động đó mà nó được thiết kế để làm, và do đó có thể thực thi ứng dụng với các tham số. Trong một trong các ứng dụng, tôi đã đến khi cần phải sử dụng tin nhắn (hoặc một cái gì đó tương tự). Ví dụ, trong ứng dụng FMX của tôi, nếu tôi nhấp vào "button1", tôi muốn nó gửi một tin nhắn đến ứng dụng nền VCL để thực hiện "action1", thay vì thực hiện nó với các tham số.

Một ví dụ điển hình có thể đang sử dụng ứng dụng nền VCL TMediaPlayer, với ứng dụng FMX mặt trước đang được sử dụng để hiển thị thông tin và kiểm soát phát, tạm dừng, v.v. Giao diện người dùng với khả năng VCL.

Tôi đã cho đến nay đã không thể tìm thấy bất cứ điều gì về cách thông báo (ví dụ như trong VCL, họ sẽ được thực hiện với "SendMessage" hoặc "PostMessage" hoặc một cái gì đó tương tự) được xử lý với Firemonkey, hoặc thông qua các địa phương tệp trợ giúp hoặc thông qua Googling mở rộng. Tất cả mọi thứ tôi đã bật lên có liên quan đến email (có lẽ vì từ "Message" trong hầu hết các từ tìm kiếm của tôi).

Can anyone point me in the right direction on how messages would be handled with Firemonkey/FMX?

Kính trọng, Scott Pritchard

+2

Bạn biết rằng bạn có thể sử dụng VCL và FMX trong cùng một quy trình ứng dụng, phải không? Vâng, nó có một số công việc phụ, nhưng nó là kỹ thuật có thể, và có thư viện của bên thứ ba và bài viết cho bạn thấy làm thế nào để làm điều đó. Vì vậy, bạn sẽ không cần phải xử lý trực tiếp các thông báo cửa sổ nếu bạn có thể chỉ cần gọi phương thức 'Click() 'của nút VCL từ trình xử lý sự kiện UI FMX (hoặc tốt hơn, cô lập mã chia sẻ của bạn theo chức năng riêng của nó mà cả VCL và FMX gọi khi cần). –

Trả lời

4

sự hiểu biết của tôi là Firemonkey không dựa trên cửa sổ truyền thống, vì vậy gửi tin nhắn cửa sổ để Firemonkey điều khiển không phải là thường là một tùy chọn. Mặc dù một số điều khiển sử dụng cửa sổ (rõ ràng nhất là TCommonCustomForm), vì vậy bạn có thể sử dụng chức năng FmxHandleToHWND() trong đơn vị FMX.Platform.Win để trích xuất một HWND từ số TFmxHandle khi cần. Tôi không có đầu mối làm thế nào để nhận và tùy chỉnh cửa sổ thông báo trong điều khiển FMX, nếu điều đó thậm chí có thể.

Firemonkey trong Windows có quyền truy cập vào API Win32, vì vậy sẽ không có gì ngăn bạn gửi tin nhắn cửa sổ đến các điều khiển cửa sổ khác, chẳng hạn như giao diện người dùng VCL của bạn. Bao gồm đơn vị Winapi.Windows trong mệnh đề uses của bạn để truy cập các chức năng API của Win32, giống như bạn làm trong ứng dụng VCL.

CẬP NHẬT: vì FireMonkey không tiếp cận với thư được gửi tới cửa sổ Biểu mẫu, bạn phải phân lớp theo cách thủ công cửa sổ để nhận thư trước khi FireMonkey nhìn thấy chúng. Bạn có thể ghi đè phương thức CreateHandle() của Biểu mẫu, trước tiên hãy gọi phương thức inherited để tạo cửa sổ, sau đó sử dụng FmxHandleToHWND() để nhận số HWND mà bạn có thể phân lớp. Đảm bảo cũng ghi đè phương thức DestroyHandle() để xóa lớp con trước khi gọi inherited để giải phóng HWND.

3

Hiện tại, FireMonkey không có trình xử lý tin nhắn mà bạn có thể sử dụng để gửi và đăng tin nhắn.

Có khả năng gắn kết mọi thứ bằng cách sử dụng các trình nghe như FireMonkey hoạt động bên trong, nhưng không có tài liệu nào được ghi lại.

Vì vậy, thay vào đó, đây là những gì tôi đã thực hiện:

Tôi đã tạo lớp "thông điệp" tùy chỉnh của riêng mình. Tôi tạo ra các cá thể của lớp và thêm chúng vào một danh sách an toàn chỉ từ bất kỳ luồng nào mà tôi cần. Về chủ đề chính, tôi có một bộ đếm thời gian kiểm tra danh sách và xử lý "thông báo".

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