2012-02-06 29 views
5

Tôi đang xây dựng một ứng dụng cần hiển thị một biểu mẫu cụ thể luôn ở trên cùng (đây là yêu cầu của khách hàng), cho đến nay tôi đang sử dụng SetWindowPos chức năng với giá trị HWND_TOPMOST, và điều đó hoạt động tốt, nhưng khi tính năng Windows 7 Flip 3D được kích hoạt ứng dụng của tôi không ở trên đầu.Cách tạo biểu mẫu luôn ở trên cùng ngay cả khi Windows 7 Flip 3D được kích hoạt

Windows 7 Flip 3D

enter image description here

Câu hỏi đặt ra là, làm thế nào hình thức của tôi có thể ở lại trên đầu trang của tất cả các cửa sổ khác ngay cả khi Windows 7 Flip 3D được kích hoạt?

+3

Bất kỳ hack you làm sẽ không có nghi ngờ kết thúc trên [oldnewthing] (http://blogs.msdn.com/b/oldnewthing /) làm ví dụ về những gì không nên làm. – Neil

+0

Tại sao bạn muốn làm điều đó? Bạn có muốn đảm bảo người dùng của bạn kiểm tra chương trình gỡ cài đặt của bạn không? –

+1

@DavidHeffernan đây là yêu cầu của khách hàng vì ứng dụng hiển thị dữ liệu thời gian thực của hệ thống công nghiệp phải luôn hiển thị với người dùng. – Salvador

Trả lời

19

Tôi làm điều này một thời gian trước bằng cách sử dụng chức năng DwmSetWindowAttribute modyfing thuộc tính DWMWA_FLIP3D_POLICY với DWMFLIP3D_EXCLUDEABOVE giá trị.

Hãy thử mã này

uses 
    Winapi.DwmApi; 

procedure TForm40.FormCreate(Sender: TObject); 
var 
    pvAttribute: Integer; 
begin 
    pvAttribute:= DWMFLIP3D_EXCLUDEABOVE; 
    if DwmCompositionEnabled then 
    DwmSetWindowAttribute(Handle, DWMWA_FLIP3D_POLICY, @pvAttribute, Sizeof(Integer)); 
end; 

Và đây là kết quả

enter image description here

+0

Cảm ơn rất nhiều. – Salvador

+3

Raymond Chen sẽ ghét bạn. EMBarbosa

+0

+1, công việc tuyệt vời. – NeverHopeless

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