2012-02-06 20 views
5

मैं एक ऐप बना रहा हूं जिसे हमेशा एक विशेष रूप से प्रदर्शित करने की आवश्यकता होती है (यह एक ग्राहक अनुरोध है), अब तक मैं SetWindowPos का उपयोग कर रहा हूं HWND_TOPMOST मान के साथ फ़ंक्शन करें, और यह ठीक काम करता है, लेकिन जब विंडोज 7 फ्लिप 3 डी सुविधा सक्रिय होती है तो मेरा ऐप शीर्ष पर नहीं रहता है।विंडोज 7 फ्लिप 3 डी सक्रिय होने पर भी एक फॉर्म हमेशा शीर्ष पर कैसे बना है

विंडोज 7 फ्लिप 3 डी

enter image description here

सवाल, कैसे मेरे प्रपत्र अन्य सभी विंडो के शीर्ष पर रह सकते हैं, भले ही विंडोज 7 फ्लिप 3 डी सक्रिय है है?

+3

किसी भी हैक तुम क्या कोई संदेह नहीं है [oldnewthing] (पर http://blogs.msdn.com खत्म हो जाएगा है/बी/oldnewthing /) के उदाहरण के रूप में क्या नहीं करना है। – Neil

+0

आप ऐसा क्यों करना चाहते हैं? क्या आप यह सुनिश्चित करना चाहते हैं कि आपके उपयोगकर्ता आपके अनइंस्टॉल प्रोग्राम का परीक्षण करें? –

+1

@ डेविड हेफरन यह एक ग्राहक अनुरोध है क्योंकि एप्लिकेशन एक औद्योगिक प्रणाली का वास्तविक समय डेटा प्रदर्शित करता है जो हमेशा उपयोगकर्ताओं के लिए दृश्यमान रहना चाहिए। – Salvador

उत्तर

19

मैं कुछ समय पहले का उपयोग कर DwmSetWindowAttribute समारोह DWMFLIP3D_EXCLUDEABOVE मूल्य के साथ DWMWA_FLIP3D_POLICY विशेषता modyfing यह करते हैं।

इस कोड

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; 

प्रयास करें और यह परिणाम

enter image description here

+0

बहुत बहुत धन्यवाद। – Salvador

+3

रेमंड चेन आपको नफरत करेगा। EMBarbosa

+0

+1, कमाल का काम। – NeverHopeless