2012-01-29 3 views
5

Tôi có TListView (trong chế độ báo cáo) mà tôi đang sử dụng ở chế độ ảo (OwnerData: = True). Tất cả hoạt động tốt trừ hai tình huống mà tôi biết là tự động hóa cột tự động. Đó là:Cách xử lý tự động cột mặc định trong TListView với OwnerData true

  1. nhấp đúp vào tách cột tiêu đề để AutoSize một cột duy nhất
  2. phím Ctrl-KeypadPlus để autosizes tất cả các cột.

Xử lý mặc định của các sự kiện này khi ở chế độ ảo không thực sự hoạt động (có vẻ như tự động hóa trên hàng dữ liệu đầu tiên.) Tôi muốn tham gia vào hành vi và tự làm cột của riêng mình. Có ai biết làm thế nào để làm điều đó? Hoặc có lẽ tôi đang thiếu một cái gì đó hiển nhiên? Tôi đang sử dụng Delphi XE. Cảm ơn mọi lời đề nghị.

+0

Điều gì đó tương tự tại đây http://stackoverflow.com/q/9255540/960757 – TLama

Trả lời

1

Cột kích thước tự động cho điều khiển chế độ xem danh sách ảo được thực hiện bằng tất cả các mục hiển thị tại thời điểm thao tác kích thước tự động được thực hiện. Đó là hành vi của điều khiển Delphi TListView. Hãy thử thực hiện cùng một thao tác trong trình thám hiểm và bạn có thể dễ dàng thấy rằng đây là tiêu chuẩn của hệ điều hành.

Khi bạn vận hành chế độ xem danh sách ở chế độ không phải ảo, nội dung của tất cả các hàng được tính khi thực hiện kích thước tự động.

Tôi không chắc chắn lý do tại sao bạn quan sát kích thước tự động chỉ tính cho hàng dữ liệu đầu tiên. Nếu đó thực sự là những gì đang xảy ra với bạn thì tôi nghĩ rằng phải có điều gì đó sai trong mã của bạn mà chúng tôi sẽ cần phải xem.


Sự cố của bạn dường như là lỗi Windows XP. Chế độ xem danh sách ảo không thực hiện tự động định lại kích thước chính xác trên XP cho đến khi tôi có thể thấy. Tôi nghĩ rằng nhà thám hiểm chuyển từ phi ảo sang ảo giữa XP và Vista và tôi sẽ không ngại cá cược rằng nhóm thám hiểm có đủ đòn bẩy nội bộ để khắc phục vấn đề.

Cho đến nay, tôi biết bạn không được thông báo rằng kích thước tự động đang diễn ra nên tôi nghĩ bạn có thể gặp khó khăn trong việc khắc phục sự cố. Nếu bạn muốn theo đuổi thêm thông tin này thì bạn có thể cố gắng trả lời thông báo HDN_DIVIDERDBLCLICK cho điều khiển tiêu đề và danh sách cho CTRL +. Tuy nhiên, tôi không chắc liệu cách tiếp cận đó có mang lại niềm vui nào không.

+0

Cảm ơn David. Tôi không chắc nó sử dụng phương pháp gì, nhưng trên hệ thống XP của tôi, dường như không sử dụng các hàng có thể nhìn thấy để thực hiện việc tự động hóa (hoặc nó đo sai, dường như đặt nó nhỏ hơn để tôi nhận được nhiều dấu ba chấm, đôi khi bởi một vài nhân vật, đôi khi nhiều hơn.) Trong mọi trường hợp, câu hỏi của tôi thực sự là cách kiểm soát hành vi vì mặc định không đáp ứng được nhu cầu của tôi. – MarkF

+0

Tôi đã thử nghiệm trên Windows 7. Tôi sẽ xem qua trên máy XP. để xem nó hoạt động như thế nào. –

+0

Cảm ơn, tôi đánh giá cao bản cập nhật của bạn. Máy dev chính của tôi là XP, nhưng tất nhiên tôi đang lên kế hoạch nâng cấp lên Win 7 64bit để tôi có thể chơi với XE2. Tôi đã thấy một số bài đăng trên diễn đàn cho C++ đã đề cập rằng họ phải sử dụng kiểm soát tiêu đề của riêng họ để giải quyết vấn đề này, vì vậy tôi nghĩ bạn có thể đúng về việc thiếu niềm vui ... Tôi ngạc nhiên vì nó có vẻ giống như sẽ hữu ích để ghi đè. – MarkF