forms जनक डेल्फी: ऐप आरंभीकरण-सर्वोत्तम व्यवहार/दृष्टिकोण




व्यवहारवादी उपागम क्या है (6)

वास्तव में डेल्फी में "वैश्विक चर" के रूप में ऐसी कोई अवधारणा नहीं है सभी चर उन यूनिट में स्कॉच किए जाते हैं जो उस यूनिट में उपयोग किए जाते हैं और अन्य इकाइयां हैं।

अपने डेटा मॉड्यूल के भाग के रूप में बस ऐप शुरूआती और आरंभिक सामान बनाएं । असल में आपके सभी गैर-यूआई सामानों को विनियमित करने के लिए एक क्लास (या डाटामॉड्यूल) है (एक तरह की तरह, सभी बुराइयों को छोड़कर और एक-अंगूठी)।

वैकल्पिक रूप से आप यह कर सकते हैं:

  • इसे अपने स्प्लैश स्क्रीन से कॉल करें।
  • लॉग इन के दौरान इसे करें
  • पृष्ठभूमि थ्रेड में "अपडेट के लिए जांच करें" चलाएं - उन्हें अभी अपडेट करने के लिए बाध्य नहीं करें क्या ऐसा फ़ायरफ़ॉक्स की तरह है?

मैं इसे नियमित रूप से चलाता हूं, और बस सर्वोत्तम अभ्यास / दृष्टिकोण की तलाश कर रहा हूं। मेरे पास एक डाटाबेस / डाटाम्यूल युक्त ऐप है, और स्टार्टअप पर डाटाबेस / डाटासेट्स को फायर करना चाहते हैं, जो कि "रनटाइम पर सक्रिय" है, जो डिजाइन समय (डेटाबेस स्थान बदलता रहता है) पर सही है। ऐप के शुरू होने पर एक वेब "अपडेट्स के लिए चेक करें" नियमित चलाएं

देखते हुए TForm घटना अनुक्रम, और विभिन्न परीक्षण और त्रुटि से परिणाम, मैं वर्तमान में इस दृष्टिकोण का उपयोग कर रहा हूं:

मैं सभी ग्लोबल वार्स को स्टोर करने के लिए मुख्य रूप में "ग्लोबल" रिकॉर्ड का उपयोग करता हूं, इसका एक तत्व ग्लोबल्स है। AppInitialized (boolean), और मुख्य रूप के प्रारंभिक अनुभाग में इसे गलत पर सेट करें।

मुख्य प्रपत्र के ओनशो ईवेंट पर (सभी फॉर्म तब तक बनाए जाते हैं), मैं ग्लोबल्स का परीक्षण करता हूं। AppInitialized; यदि यह गलत है, तो मैं अपना "आरंभ" सामान चलाता हूं, और फिर ग्लोबल्स सेट करके समाप्त कर देता हूं। AppInitialized: = True

यह बहुत अच्छी तरह से काम करने लगता है, लेकिन क्या यह सबसे अच्छा तरीका है? दूसरों के अनुभव, विचार और राय से अंतर्दृष्टि की तलाश करना TIA ..


मैं उपयोग की जाने वाली एक चाल मुख्य रूप से टीटीइमर को स्थान देने के लिए है, समय को 300 एमएमएस की तरह सेट करें और किसी भी प्रारंभिक (डीबी लॉगिन, नेटवर्क फ़ाइल प्रतिलिपि, आदि) प्रदर्शन करें। एप्लिकेशन को शुरू करना मुख्य रूप से मुख्य रूप से लाता है और किसी भी प्रारंभिक 'सामग्री' को होने की अनुमति देता है उपयोगकर्ता कई उदाहरणों को प्रारंभ नहीं कर रहे हैं, "ओह..मैं dbl- क्लिक नहीं किया था ... मैं इसे फिर से करूँगा .."


मैं एक प्राथमिक डेटा मॉड्यूल का उपयोग करने के लिए यह जांचने के लिए उपयोग करता हूं कि डीबी कनेक्शन ठीक है और यदि ऐसा नहीं होता है, तो डीबी कनेक्शन सेटअप करने के लिए एक कस्टम घटक प्रपत्र दिखाएं और फिर मुख्य रूप को लोड करता है:

Application.CreateForm(TDmMain, DmMain);

  if DmMain.isDBConnected then
    begin
      Application.CreateForm(TDmVisualUtils, DmVisualUtils);
      Application.CreateForm(TfrmMain, frmMain);
    end;

  Application.Run;

मैं आम तौर पर हमेशा मुख्य स्वरूप के लिए सभी प्रकार के स्वत: निर्माण को बंद कर देता हूं और संभवत: प्राथमिक डेटामैड्यूल।

एक चाल जिसे आपने सीखा है, आप कर सकते हैं, अपने प्रोजेक्ट में अपना डेटामैड जोड़ सकते हैं, इसे अपने मुख्य फ़ॉर्म से स्वतन्त्र बनाने और बनाने के लिए अनुमति दें। उसके बाद, जब आपका मुख्य फ़ॉर्म बनाया जाता है, तो डेटामेट के लिए क्रिएट पहले ही चलाया जा चुका है।

यदि आपके एप्लिकेशन के पास कुछ कोड है, तो नियंत्रण का फ़ोकस सेट करें (जो कुछ आप सृजन पर नहीं कर सकते हैं, क्योंकि इसकी "अभी तक दृश्यमान नहीं है") तब एक उपयोगकर्ता संदेश बनायें और उसे अपने सृजन में फ़ॉर्म में पोस्ट करें। संदेश (कोई गारंटी नहीं) के रूप में शीघ्र ही प्रपत्र संदेश लूप संसाधित किया जाना चाहिए। उदाहरण के लिए:

const
  wm_AppStarted = wm_User + 101;


type
  Form1 = class(tForm)
    :
    procedure wmAppStarted(var Msg:tMessage); message wm_AppStarted;
  end; 

// in your oncreate event add the following, which should result in your wmAppStarted event firing.
PostMessage(handle,wm_AppStarted,0,0);

मैं एक ही समय के बारे में नहीं सोच सकता कि यह संदेश कभी संसाधित नहीं किया गया था, लेकिन कॉल की प्रकृति यह है कि इसे संदेश कतार में जोड़ा गया है, और यदि कतार पूर्ण है तो यह "गिरा दिया" है बस पता है कि बढ़त का मामला मौजूद है।


आप प्रोजेक्ट स्रोत (.dpr फ़ाइल) के साथ फार्म निर्माण कॉल के बाद और एप्लिकेशन से पहले हस्तक्षेप करना चाह सकते हैं। Run (या इससे पहले भी।)

इस तरह से मैं आम तौर पर ऐसे प्रारंभिक सामान को संभालता हूं:

...
Application.CreateForm(TMainForm, MainForm);    
...
MainForm.ApplicationLoaded; // loads options, etc..
Application.Run;
...

मुझे नहीं पता कि यह मददगार है, लेकिन मेरे कुछ आवेदनों में कोई फॉर्म ऑटो नहीं बनाया गया है, यानी आईडीई में कोई मुख्य रूप नहीं है।

एप्लिकेशन ऑब्जेक्ट के साथ पहला फॉर्म बनाया गया क्योंकि उसके मालिक स्वतः मुख्यफ़ोन बन जाएगा। इस प्रकार मैं एक लोडर के रूप में एक डाटामैडोल को स्वत: ही स्वतन्त्र करता हूं और यह निर्णय लेता है कि कौन-से डेटामैड्यूल बनाने के लिए कब और किस क्रम में बनाना है। इस डेटामोड में एक स्टार्टअप और शटडाउन पद्धति है, जिसे "ब्रैकेट्स" के नाम से जाना जाता है। डीपीआर में चलें शटडाउन पद्धति शटडाउन प्रक्रिया पर थोड़ा अधिक नियंत्रण देती है।

यह उपयोगी हो सकता है जब आपने अपने आवेदन के विभिन्न उपयोग के मामलों के लिए अलग-अलग "मुख्य प्रारूप" तैयार किए हों या आप अलग-अलग मुख्य प्रारूपों का चयन करने के लिए कुछ कॉन्फ़िगरेशन फ़ाइलों का उपयोग कर सकते हैं।





datamodule