Tôi đang sử dụng Windows XE2, TVirtualStringTree
và TComboBox
làm trình chỉnh sửa được đặt tại chỗ.Thông báo gửi bánh xe chuột đến điều khiển sai
Khi tôi đặt TComboBox
trực tiếp trên biểu mẫu, tại thời gian chạy, tôi có thể thả danh sách xuống và con lăn chuột cuộn các mục trong danh sách lên và xuống (như mong muốn). Tuy nhiên, khi TComboBox
được tạo tại thời gian chạy bởi TVirtualStringTree
làm trình chỉnh sửa tại chỗ, mặc dù hộp tổ hợp mới được tạo có tiêu điểm, thông báo WM_MOUSEWHEEL
của bánh xe chuột được gửi tới điều khiển cây chứ không phải hộp tổ hợp.
Điều này hiển nhiên vì các mục trong danh sách thả xuống hộp tổ hợp không cuộn. Thay vào đó, điều khiển cây đằng sau hộp cuộn kết hợp. Phần cố định của hộp combo di chuyển với cây, nhưng danh sách thả xuống bị ngắt kết nối khỏi phần cố định của hộp tổ hợp và không di chuyển (như được mô tả).
Trong cả hai trường hợp, các TComboBox.Style
được thiết lập để csDropDownList
. Khi combo box được tạo ra như biên tập viên tại chỗ của cây, nó được thực hiện theo cách này:
FCBox := TComboBox.Create(TreeControl);
FCBox.Visible := False;
FCBox.Parent := TreeControl;
// ... add items to combo box ...
FCBox.Visible := True;
FCBox.SetFocus;
FCBox.DroppedDown := True;
Nó không quan trọng nơi chuột được lơ lửng. Nó có thể được trực tiếp trên các mục trong danh sách thả xuống hộp combo và điều khiển cây trong nền vẫn là một trong đó cuộn. Cách duy nhất để cuộn các mục trong hộp kết hợp là sử dụng thanh cuộn của nó.
Điều gì sẽ khiến phụ huynh của kiểm soát tập trung nhận được thông báo bánh xe chuột thay vì chính điều khiển (trong trường hợp này là TComboBox
)?
Tôi tìm thấy bài viết này (http://msdn.microsoft.com/en-us/library/windows/desktop/ms645617(v=vs.85).aspx) giải thích rằng thư được gửi đến kiểm soát, và nếu nó không xử lý nó, sau đó nó được gửi lên chuỗi cho đến khi nó được xử lý. Bây giờ tôi đang tìm xem liệu 'TVirtualStringTree' có làm thay đổi cách 'TComboBox' xử lý thông điệp không. –