forms - जनक - व्यवहारवादी उपागम क्या है




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

मुझे यकीन नहीं है कि मैं समझता हूं कि आपको वैश्विक चर की आवश्यकता क्यों है? आजकल मैं एक भी वैश्विक चर के बिना अपने सभी डेल्फी ऐप्स लिखता हूं यहां तक ​​कि जब मैंने उनका इस्तेमाल किया था, तब भी मैं प्रति आवेदन दो से अधिक नहीं था।

तो शायद आपको पहले सोचने की ज़रूरत है कि आपको वास्तव में उनकी आवश्यकता क्यों है।

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

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

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

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

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


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

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

...
Application.CreateForm(TMainForm, MainForm);    
...
MainForm.ApplicationLoaded; // loads options, etc..
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);

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


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

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

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

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

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

Application.CreateForm(TDmMain, DmMain);

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

  Application.Run;




datamodule