2012-06-08 16 views
12

पर एक मोडल फॉर्म दिखाने से पहले अधिकतम और पूरी तरह से फिर से खींचा गया है यह सुनिश्चित करने के लिए अनुशंसित तरीका क्या है कि मुख्य प्रारूप पूरी तरह से अधिकतम हो गया है और एप्लिकेशन को पहले लोड पर मोडल फॉर्म दिखाने से पहले सभी नियंत्रण फिर से खींचे जाते हैं?मुख्य लोड को सुनिश्चित करने के लिए सही तरीका है कि आवेदन लोड

एप्लिकेशन शुरू होने पर मुझे एक मोडल संवाद दिखाने की ज़रूरत है (एक लॉगिन स्क्रीन नहीं) लेकिन यदि स्क्रीन को अधिकतम करने के दौरान फॉर्म को wsMaximized पर सेट किया गया है, तो नियंत्रणों को फिर से निकालने का मौका नहीं है और आपको बदसूरत गड़बड़ी के साथ छोड़ दिया गया है ।

मैं निम्नलिखित का उपयोग कर वर्तमान में मोडल स्क्रीन दिखाई:

procedure TForm1.FormActivate(Sender: TObject); 
var 
    frmOrderLookup:TfrmOrderLookup; 
begin 
    onactivate := nil; 
    frmOrderLookup:=TfrmOrderLookup.Create(nil); 
    try 
    frmOrderLookup.showmodal; 
    finally 
    frmOrderLookup.Free; 
    end; 
end; 

उत्तर

14

क्या मैं सामान्य रूप से करते वापस मेरे फार्म के लिए एक कस्टम संदेश पोस्ट है। इस तरह से यह तब तक संसाधित नहीं होगा जब तक फॉर्म के अन्य संदेशों को पहले से ही संभाला नहीं जा चुका है। जब तक यह संदेश संसाधित हो जाता है, तब तक आपका फॉर्म पहले ही समाप्त हो जाना चाहिए था।

type 
    TMyForm = class(TForm) 
    procedure FormCreate(Sender: TObject); 
    private 
    procedure HandleLookupMessage(var Message: TMessage); message WM_USER + 1; 
    end; 

procedure TMyForm.HandleLookupMessage(var Message: TMessage); 
var 
    frmOrderLookup: TfrmOrderLookup; 
begin 
    frmOrderLookup := TfrmOrderLookup.Create(Application); 
    try 
    frmOrderLookup.ShowModal; 
    finally 
    frmOrderLookup.Release; 
    end; 
end; 

procedure TMyForm.FormCreate(Sender: TObject); 
begin 
    // Maximise form here if needed 
    PostMessage(Handle, WM_USER + 1, 0, 0); 
end; 

आप संदेश फिर से किसी भी तरह अपने आवेदन के लिए हो रही बारे में चिंतित हैं, तो आप हमेशा संकेत मिलता है कि यह एक बार संभाला गया है के लिए एक निजी बूलियन चर जोड़ सकते हैं।

+1

+1। यदि आप इसके बजाय 'ऑनशो' में संदेश पोस्ट करते हैं, तो इसे प्रक्रिया में बाद में संसाधित किया जाएगा; जो इसे जल्द ही भेजने के किसी भी मौके को समाप्त करता है। (और इसके बजाय इसे 'फॉर्मक्रेट' नहीं होना चाहिए? 'ऑनक्रेट' संपत्ति का नाम ही है।) –

+0

@ केन: सुधार के लिए धन्यवाद। 'ऑनशो' का उपयोग करने के लिए, मुझे लगता है कि फॉर्म बनाया जा रहा है, दिखाया गया है, फिर 'एप्लिकेशन' से पहले सभी को सक्रिय किया गया है। रून संदेश संदेश कतार पंप करना शुरू कर देता है, इसलिए इससे कोई फर्क नहीं पड़ता। अन्य रूपों और डेटामोड्यूल भी बनाए जा रहे हैं (और उनकी 'ऑनक्रेट' घटनाओं को ट्रिगर किया गया है) पहले भी। जब मैंने 'ऑनक्रेट' से उपयोग किया था, तब तक मुझे यह मूर्खता अभी तक अभ्यास में विफल नहीं हुई है। – afrazier

+0

आपकी मदद के लिए धन्यवाद - ऑनशो सिफारिश –