2012-06-02 29 views
7

Tôi đang cố gắng xây dựng một trình soạn thảo thuộc tính lưới 2 cột đơn giản dựa trên VirtualTreeView.Làm cách nào để giữ trình chỉnh sửa còn sống trong Virtualtreeview?

(Tôi muốn bắt chước cái nhìn và kinh nghiệm người dùng nhìn thấy trên thanh tra đối tượng IDE Delphi)


Các thành phần được làm việc gần và có thể xử lý nhiều biên tập viên, nhưng tôi phải đối mặt với một lỗi gây phiền nhiễu:

Khi tôi nhấp vào nút mới (hàng mới), nút được chọn và trình chỉnh sửa xuất hiện, bất kể cột tôi đã nhấp vào. Đó là mong đợi và OK.

Sau đó, khi tôi nhấp vào cột đầu tiên của cùng một hàng, tôi hy vọng sẽ thấy nội dung của trình chỉnh sửa được xác thực và trình chỉnh sửa giữ tiêu điểm (như trong thanh tra đối tượng của delphi).

Nhưng nội dung của trình chỉnh sửa được xác thực thì nó biến mất và toàn bộ nút (hàng) được chọn. Trình soạn thảo sẽ không lấy lại (ngay cả khi tôi nhấp vào cột thứ hai), cho đến khi tôi chọn một nút khác và nhấp lại vào nút đã chọn trước đó.

EDIT: thêm minh họa và chính xác về mã của tôi.

illustration of the problem

về mã: Tôi không có chèn mã ở đây vì tôi đã sử dụng (như là một điểm khởi đầu) cùng mã chính xác như một phát hiện vào Advanced Demo (trang tính)


những gì tôi đã cố gắng và phát hiện ra:

của 2003 được biên soạn chi tiết bản demo (các thuộc tính trang cây) found here dường như công trình giống như những gì Tôi mong đợi từ thành phần của tôi (và từ treeview ảo).

Nhưng khi tôi biên dịch cùng một bản demo này (tôi đã thử với các phiên bản 4.5.2, 4.8.7 và thậm chí 5.0.0 từ thân hiện tại trên mã google, trên cả delphi 2007 và 2009), lỗi này lại xuất hiện!

Lần đầu tiên tôi nghĩ có sự thay đổi đột phá trong tài liệu giữa năm 2003 và các phiên bản mới hơn, nhưng tôi không thể tìm thấy bất kỳ điều gì. Tôi cũng đã chơi với tất cả các tùy chọn có sẵn đang cố gắng giải quyết vấn đề này nhưng không thành công.

Tôi vẫn không biết liệu sự cố này đến từ RTL delphi mới hay thay đổi đột ngột (lỗi?) Trong virtualtreeview.

nên câu hỏi của tôi:

  • làm bạn có vấn đề tương tự khi soạn thảo bản demo nâng cao?
  • bất kỳ mẹo hay giải pháp nào trong mã để giải quyết vấn đề của tôi?

Như một mặt lưu ý, tôi gần như bỏ cuộc với virtualtreeview chiều nay và tôi muốn thử một giải pháp với các thành phần khác ...Tôi tìm thấy điều này interesting question và quyết định thử thành phần của berg, nhưng đã dừng lại trong quá trình mua khi đọc lời khuyên trên trang chủ của họ (xem nhận xét của tôi về câu hỏi liên quan)

+2

Có lý do nào bạn không sử dụng 'TValueListEditor' được cung cấp trong VCL không? Nó được thiết kế đặc biệt để làm những gì bạn đang cố gắng để làm cho mình (cung cấp một danh sách các phím và cho phép bạn chỉnh sửa các giá trị, như Object Inspector). Nó thực hiện hành vi mà bạn đang tìm kiếm bằng cách đặt 'KeyOptions.KeyEdit' thành True. Nó có các trình xử lý sự kiện 'OnGet' cho phép bạn cung cấp danh sách và chỉnh sửa mặt nạ, và có một sự kiện' OnEditButtonClick' cho phép nút '...'. –

+0

@KenWhite Điểm tốt nhưng lý do duy nhất tôi có thể thấy là tôi nhận thấy nút [-] ở bên trái để Damien có thể có khả năng sụp đổ, mà 'TValueListEditor' có thể không có. –

+1

Có, tôi cần khả năng thu gọn (như trong trình soạn thảo thuộc tính của IDE). Vâng, tôi quản lý để tiếp cận hành vi mong muốn, thêm WM_STARTEDITING tin nhắn trong nhiều sự kiện (onDblclick, v.v.) nhưng tôi vẫn nghĩ rằng có thể có điều gì đó bị hỏng trong virtualtreeview (tôi bắt đầu xem xét nội bộ của kiểm soát và có vẻ như tsEditPending trạng thái bên trong không được xử lý đúng cách) – DamienD

Trả lời

3

VSTs onChange chỉ được gọi bằng cách thay đổi lựa chọn nút . Trạng thái sẽ không thay đổi nữa, nếu nút đã được chọn. Vì vậy, bạn phải triển khai một hành vi tương tự như Trình kiểm tra đối tượng, ví dụ: bằng cách gọi VSTs EditNode() - Phương thức trong OnClick-Callback:

procedure TMainForm.VSTClick(Sender: TObject); 
var node: PVirtualNode; 
begin 
    node:= VST.GetFirstSelected(); 
    if(node <> nil) then 
    VST.EditNode(node, EDITABLE_COLUMN_INDEX); 
end; 
+0

cảm ơn lời giải thích và mã mẫu. – DamienD

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