का छुपा व्यवहार ओवरराइड करना मैं वर्तमान में मौजूदा डेल्फी एप्लिकेशन के लिए विंडोिंग सिस्टम लिख रहा हूं।डेल्फी - TForm.showModal
वर्तमान में, कार्यक्रम में कई पूर्ण आकार के रूप होते हैं जो क्रमशः क्रमशः क्रमशः दिखाए जाते हैं और इनमें से कोई भी उपयोगकर्ता द्वारा स्थानांतरित नहीं किया जा सकता है। मेरा उद्देश्य इन सभी रूपों को स्थानांतरित करने की अनुमति देना है। पहले रूपों को एक दूसरे के शीर्ष पर रखा गया था, लेकिन चूंकि कोई भी स्थानांतरित नहीं किया जा सकता था, इसलिए उपयोगकर्ता के लिए पृष्ठभूमि रूप दिखाई नहीं दे रहे थे। मेरा समाधान अब तक एक नया बच्चा खोलते समय 'पैरेंट' फॉर्म को छिपाने के लिए किया गया है, और उस बच्चे को बंद होने पर इसे फिर से बहाल करना है।
दुर्भाग्यवश चूंकि प्रत्येक बच्चे को शोमोडाल के साथ बुलाया जाता है, तब तक कॉल करने के लिए माता-पिता का स्वरूप दिखाई नहीं देता है जब तक कि मोडल प्रक्रिया पूरी नहीं हो जाती है और इसलिए बच्चे के रूप में छिपे जाने के बाद उपयोगकर्ता को एक अलग द्वितीय फ़्लैश दिखाई देता है जहां नहीं फॉर्म दिखाई दे रहा है।
क्या कोई तरीका है कि मैं मोडल फॉर्म को अपनी प्रक्रिया पूरी होने के बाद स्वचालित रूप से छिपाने से रोक सकता हूं? एक बार पैरेंट फॉर्म फिर से दिखाई देने के बाद यह उन्हें मैन्युअल रूप से छुपाने की अनुमति देगा। मैंने इसे प्रत्येक बच्चे के फॉर्म की फॉर्महाइड घटना में शेड्यूल करने का प्रयास किया है, लेकिन यह काम नहीं करता है क्योंकि बच्चे के रूप में भी अपने बच्चों में से एक खोलते समय छुपाया जाता है।
संपादित करें:
यहाँ मैं अब तक नीचे
procedure openModalChild(child: TForm; parent: TForm);
var
WindowList: Pointer;
SaveFocusCount: Integer;
SaveCursor: TCursor;
SaveCount: Integer;
ActiveWindow: HWnd;
Result: integer;
begin
CancelDrag;
with child do begin
Application.ModalStarted;
try
ActiveWindow := GetActiveWindow;
WindowList := DisableTaskWindows(0);
//set the window to fullscreen if required
setScreenMode(child);
try
Show; //show the child form
try
SendMessage(Handle, CM_ACTIVATE, 0, 0);
ModalResult := 0;
repeat
Application.HandleMessage;
//if Forms.Application.FTerminate then ModalResult := mrCancel else
if ModalResult <> 0 then closeModal(child as TCustomForm);
until ModalResult <> 0;
Result := ModalResult;
SendMessage(Handle, CM_DEACTIVATE, 0, 0);
if GetActiveWindow <> Handle then ActiveWindow := 0;
finally
parent.Show;
Hide;
end;
finally
EnableTaskWindows(WindowList);
parent.Show; //reshow the parent form
if ActiveWindow <> 0 then SetActiveWindow(ActiveWindow);
end;
finally
Application.ModalFinished;
end;
end;
end;
यह अच्छी तरह से काम करता है लेकिन समस्या सिर्फ सक्रिय दोहराने पाश टूट जाता है कभी नहीं, के बाद भी बच्चे को कर दिया गया है है रेमी की सलाह के आधार पर किया है बच निकला और इसलिए माता-पिता का रूप कभी भी नहीं बदला गया। क्या कोई तरीका है जिससे मैं इसे हल कर सकता हूं?
क्या आपने बंद करने से पहले बच्चे के रूप से मूल रूप से दिखाई देने का प्रयास किया है? –
मुझे नहीं लगता कि 'पैरेंट' विंडो को छिपाने के परिणामस्वरूप किसी भी रूप की गतिशीलता होगी। कृपया अपने लक्ष्य का सटीक वर्णन करें, या प्रश्न से अनावश्यक भाग को हटा दें। – NGLN
माता-पिता को छिपाना कोई बदलाव नहीं कर सकता है (वे पहले से ही कर सकते हैं)। जिन प्रारूपों का मैं संदर्भ दे रहा हूं वे सभी एक खिड़की के भीतर होना चाहिए लेकिन मौजूदा डिजाइन कार्यान्वयन के कारण वे नहीं हैं। एक-खिड़की प्रभाव देने के लिए प्रत्येक नए दिखाए गए बच्चे को अपने कॉलिंग माता-पिता के समान स्थान दिया जाता है और जब माता-पिता को बंद कर दिया जाता है तो बच्चे की स्थिति में स्थानांतरित हो जाता है और दृश्यमान होता है। दृश्यमान ये एक खिड़की के रूप में दिखाई देते हैं जिसमें एक संक्षिप्त पल के अपवाद होते हैं जहां कोई फॉर्म दिखाई नहीं देता है। – jmc