2012-01-23 23 views
18

Tôi đang sử dụng Delphi XE2, và tôi thích hiệu ứng kính, và tôi muốn "cắt" kính như trong các công cụ máy tính bảng Windows 7. Nếu bạn cũng biết làm thế nào cắt một nút tôi sẽ được hạnh phúc nếu bạn cho tôi biết làm thế nào.Kính cắt Delphi

enter image description here

Cảm ơn

+0

Vâng, @Lama, đây là những gì tôi muốn làm. Bạn có biết làm thế nào? – Astervista

+0

@Astervista, không, nhưng tôi sẽ cố gắng tìm ra nó bởi vì đó là câu hỏi thú vị và nó đã được yêu thích của tôi :) OT, ['đây'] (http://weblogs.asp.net/kennykerr/archive/2006/ 08/10/Windows-Vista-dành cho Nhà phát triển-_1320_-Phần-3-_1320_-The-Desktop-Window-Manager.aspx) một phần thú vị về Trình quản lý Cửa sổ Màn hình và một số chức năng của nó, nhưng tôi không nghĩ có một câu trả lời cho câu hỏi của bạn ở đó (đó là lý do tại sao OT :) – TLama

+0

Cảm ơn, @TLama. – Astervista

Trả lời

5

Vẽ trong lĩnh vực đầu chỉ đơn giản là vấn đề của việc sử dụng một khung kính và sơn trong khu vực phi khách hàng, hoặc cách khác, bằng cách sử dụng API DwmExtendFrameIntoClientArea.

Mẫu mã tốt nhất mà tôi đã thấy cho điều này là điều khiển "Ribbon" VCL, cung cấp vùng "QAT" (thanh công cụ truy cập nhanh), được vẽ trong "khu vực khách hàng không". Lưu ý rằng tác giả phải suy nghĩ không chỉ về cách render khi hệ thống Vista/Win7 có Glass ON, mà còn phải quyết định cách render trên WinXp, Win7 và Vista khi công cụ Themes tắt đi. Có khá nhiều logic trong các đơn vị Vcl.Ribbon.pas (hoặc chỉ là Ribbon.pas nếu bạn đang ở XE hoặc trước đó) dành riêng cho điều đó.

Nhìn vào procedure TCustomRibbonQuickAccessPopupToolbar.NCPaint(DC: HDC); trong nguồn Vcl Ribbon.

Vẽ một "vùng mở rộng" không hình chữ nhật nhô ra từ phía dưới có lẽ là vấn đề áp dụng vùng cắt cửa sổ tùy chỉnh.

+0

Nhưng sau đó bạn sẽ phải vẽ cạnh phát sáng của riêng bạn, phải không? Và nếu có thì câu hỏi là thế nào? – TLama

+1

Không nếu bạn làm theo các kỹ thuật hiện đại. Tôi tin rằng câu trả lời của daven liên kết bạn với phần đó của nó, xem các bình luận ở đây về SetWindowRgn và các giá trị màu trong suốt: http: // stackoverflow.com/questions/3572342/hình dạng bất thường –

+0

Bất kỳ ví dụ nào sẽ giải thích nhiều hơn nghìn từ. Xin lỗi tôi khá lame này và không có đầu mối làm thế nào để làm điều đó. Bạn muốn sử dụng ['UpdateLayeredWindow'] (http://msdn.microsoft.com/en-us/library/windows/desktop/ms633556%28v=vs.85%29.aspx)? Điều này thực sự sẽ làm các trick? – TLama

0

Ý của bạn là bạn muốn các biểu mẫu có hình dạng? Nếu vậy

Irregularly shaped forms

có thể giúp ích. Tôi tưởng tượng điều này sẽ làm việc trên Windows 7 (lưu ý bình luận của Remy trong câu trả lời).

hth

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