अग्रभूमि (डेल्फी) में विंडो सेट करने में असमर्थ
यहां वह कोड है जिसका उपयोग मैं एक विंडो को फोरग्राउंड में पुनर्स्थापित करने और सेट करने के लिए करता हूं। जब खिड़की को छोटा किया जाता है, तो कोड पूरी तरह से काम करता है लेकिन जब खिड़की कुछ अन्य खिड़कियों के पीछे छिप जाती है, तो मैं खिड़की को अग्रभूमि में नहीं ला सकता हूं, बाद में मुझे पता चला कि SetForegroundWindow(Handle)
झूठे वापस आ रहे हैं। हालाँकि, यदि मैं डिबगिंग मोड में प्रोग्राम चलाता हूं, तो विंडो को अग्रभूमि में लाया जा सकता है। मुझे यह पता नहीं लग सकता है कि ऐसा क्यों हो रहा है।
function EnumWindowsCallback(Handle: HWND; lParam: Integer): bool; stdcall;
var
WID, PID: Integer;
begin
WID := 0;
PID := lParam;
GetWindowThreadProcessId(Handle, @WID);
if (PID = WID) and IsWindowVisible(Handle) then begin
ShowWindow(Handle, SW_RESTORE);
SetForegroundWindow(Handle);
FlashWindow(Handle, True);
end;
Result := True;
end;
function ShowProcessWindow(PID: Integer): boolean;
begin
Result := EnumWindows(@EnumWindowsCallback, lParam(PID))
end;
जहां पीआईडी खिड़की की प्रक्रिया आईडी है जिसे मैं पुनर्स्थापित करना चाहता हूं और अग्रभूमि में सेट करना चाहता हूं।
अद्यतन: मैंने अभी इसे प्रलेखन में पढ़ा है । क्या यह संबंधित हो सकता है?
जब उपयोगकर्ता किसी अन्य विंडो के साथ काम कर रहा हो, तो कोई एप्लिकेशन किसी विंडो को अग्रभूमि पर बाध्य नहीं कर सकता है। इसके बजाय, विंडोज उपयोगकर्ता को सूचित करने के लिए विंडो के टास्कबार बटन को फ्लैश करता है।
जवाब
मैं SetForegroundWindow(Handle)
कोड की follwoing 2 लाइनों के साथ बदल दिया है और यह मेरी साइट पर काम करता है:
SetWindowPos(Handle, HWND_TOPMOST, 0, 0, 0, 0, SWP_NoMove or SWP_NoSize);
SetWindowPos(Handle, HWND_NOTOPMOST, 0, 0, 0, 0, SWP_NoMove or SWP_NoSize);