डेल्फ़ी इंटरफ़ेस किसके लिए हैं? व्यवसाय के लिए सर्वोत्तम आईटी समाधान

💖क्या आपको यह पसंद है?लिंक को अपने दोस्तों के साथ साझा करें

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

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

  1. प्रोग्राम को किसी कार्य को पूरा करने में मदद करनी चाहिए, न कि वह कार्य बन जाना चाहिए।
  2. प्रोग्राम के साथ काम करते समय उपयोगकर्ता को मूर्ख जैसा महसूस नहीं करना चाहिए।
  3. प्रोग्राम को इस तरह से काम करना चाहिए कि उपयोगकर्ता कंप्यूटर को मूर्ख न समझे।
पहला सिद्धांत- यह इंटरफ़ेस की तथाकथित "पारदर्शिता" है। उपयोगकर्ता इंटरफ़ेस सहज होना चाहिए, सीखना आसान होना चाहिए और उपयोगकर्ता के लिए ऐसी समस्याएँ पैदा नहीं करनी चाहिए जिनसे उसे कार्य प्रक्रिया के दौरान निपटना पड़े। अनावश्यक अलंकरण के बिना मानक घटकों का उपयोग करें, समान कार्यक्रमों द्वारा उपयोग की जाने वाली परिचित नियंत्रण तकनीकों का उपयोग करें, और आप प्रदर्शन मानदंड प्राप्त करेंगे पहला सिद्धांत.

दूसरा सिद्धांतउपयोगकर्ताओं की बौद्धिक क्षमताओं की उपेक्षा करना है। अपने स्वयं के अनुभव से, मैं जानता हूं कि अक्सर उपयोगकर्ता न केवल कंप्यूटर पर काम करना नहीं जानते, बल्कि स्वयं कुछ भी करने से डरते हैं। इसलिए, यूजर इंटरफेस यथासंभव अनुकूल होना चाहिए।
इसके अलावा, उपयोगकर्ताओं का डर अक्सर उचित होता है, क्योंकि प्रोग्राम और यहां तक ​​कि कंप्यूटर की लागत की तुलना कई वर्षों के प्रयास से बनाए गए डेटाबेस की लागत से नहीं की जा सकती है। इसीलिए, उपयोगकर्ता इंटरफ़ेस बनाते समय, एक प्रोग्रामर को हमेशा प्रोग्राम में "फुलप्रूफ सुरक्षा" का निर्माण करना चाहिए - गलत कार्यों और गलत डेटा के उपयोगकर्ता इनपुट के खिलाफ। लेकिन कुछ प्रोग्रामर इस तरह की सुरक्षा के चक्कर में पड़ जाते हैं, इसे बहुत ज्यादा घुसपैठिया बना देते हैं, और परिणामस्वरूप प्रोग्राम का संचालन प्रसिद्ध "एक कदम बाईं ओर, एक कदम दाईं ओर एक पलायन माना जाता है" जैसा दिखता है! और प्रोग्रामर किसी समस्या के समाधान के रूप में जो बनाता है वह स्वयं समस्याएं पैदा करना शुरू कर देता है।
पालन ​​करने के लिए दूसरा सिद्धांतप्रोग्राम को उपयोगकर्ता के कार्यों को "सही" करने की अनुमति देने और यह इंगित करने की आवश्यकता नहीं है कि उसे कैसे कार्य करना चाहिए, उसे एक संकीर्ण ढांचे में मजबूर करना। इसके अलावा, आपको सूचनात्मक त्वरित संदेश, विशेष रूप से संवाद संदेश प्रदर्शित करने में बहुत अधिक रुचि नहीं लेनी चाहिए, क्योंकि इससे उपयोगकर्ता का ध्यान काम से भटक जाता है। संकेतों को पूरी तरह से अक्षम करने की क्षमता प्रदान करना बेहतर होगा।

तीसरा सिद्धांतउच्चतम संभव "मानसिक" क्षमताओं वाला एक प्रोग्राम बनाना है। तीव्र विकास के बावजूद कंप्यूटर उपकरण, यहां तक ​​कि व्यापक रूप से उपयोग किए जाने वाले कार्यक्रमों को भी केवल सशर्त रूप से कृत्रिम बुद्धिमत्ता वाला कहा जा सकता है। वे मूर्खतापूर्ण प्रश्नों वाले संवाद बॉक्स प्रदर्शित करके उपयोगकर्ता के काम में हस्तक्षेप करते हैं जो सरलतम स्थितियों में भी भ्रम पैदा करते हैं। परिणामस्वरूप, उपयोगकर्ता मन ही मन कहते हैं: "क्या बेवकूफ़ मशीन है!"
मैं व्यक्तिगत रूप से लगभग हर किसी के लगातार सवालों से परेशान हूँ पाठ संपादकपरिवर्तित पाठ को सहेजना है या नहीं, इसके बारे में, हालाँकि मूल और वर्तमान पाठ में किसी भी प्रतीक में अंतर नहीं है। हां, मैंने कुछ टाइप किया था, लेकिन फिर मैंने सब कुछ वापस लौटा दिया, क्या इसका पता लगाना वाकई असंभव है! मुझे यह जांचना होगा कि आख़िरकार मैंने कुछ बर्बाद तो नहीं किया है।

निम्नलिखित नियमों का पालन करने का प्रयास करें:

मानक इंटरफ़ेस तत्व
उन घटकों का उपयोग करें जो इस इंटरफ़ेस तत्व के लिए मानक हैं। आपके कार्यक्रम का सामना करने के बाद, उपयोगकर्ता एक-दूसरे को जानने में समय बर्बाद नहीं करेंगे, बल्कि तुरंत काम करना शुरू कर देंगे - यह पेशेवर रूप से बनाए गए कार्यक्रम के संकेतों में से एक है।
उपकरणों का छोटा पैलेट
कोशिश करें कि बहुत सारे अलग-अलग घटकों का उपयोग न करें। और स्वाभाविक रूप से, एक ही स्थान पर कहीं एक मानक घटक का उपयोग करने के बाद, एक समान मामले में भी इसका उपयोग किया जाता है।
नियंत्रणों के बीच समान दूरी
इंटरफ़ेस तत्वों को एक दूसरे से समान दूरी पर रखें। बेतरतीब ढंग से बिखरे हुए घटक एक गैर-पेशेवर तरीके से बनाए गए उत्पाद की भावना पैदा करते हैं। और इसके विपरीत, फॉर्म पर इंटरफ़ेस बनाने वाले बटन, स्विच, चेकबॉक्स और अन्य घटकों का सावधानीपूर्वक सत्यापित प्लेसमेंट उच्च गुणवत्ता वाले काम का संकेत है।
टैबऑर्डर. "उचित क्रम
टैबऑर्डरवह क्रम है जिसमें कुंजी दबाए जाने पर स्क्रीन कर्सर नियंत्रणों पर चलता है टैब. सही ढंग से लिखे गए प्रोग्राम में, कर्सर प्रोग्राम के साथ उपयोगकर्ता के काम के तर्क का पालन करते हुए चलता है। प्रोग्राम बनाते समय, प्रोग्रामर अक्सर घटकों को बदलता है, कुछ को हटाता है, और आवश्यकतानुसार अन्य को जोड़ता है। परिणामस्वरूप, तैयार प्रोग्राम में कर्सर फ़ॉर्म के चारों ओर अव्यवस्थित रूप से उछलता है। प्रोग्राम पूरा करने के बाद कॉन्फ़िगर करना न भूलें टैबऑर्डर.
फ़ॉन्ट चयन
बस फ़ॉन्ट्स को अकेला छोड़ दें। डेल्फ़ी के डिफ़ॉल्ट फ़ॉन्ट किसी भी सिस्टम के लिए उपयुक्त हैं जिस पर आपका प्रोग्राम चल सकता है। महत्वपूर्ण तत्वों को उजागर करने के लिए केवल बोल्ड फ़ॉन्ट का उपयोग करें। आवेदन तिर्छाऔर विशेष रूप से रेखांकित, जिसे उपयोगकर्ता हाइपरलिंक समझने की भूल कर सकता है, वह खराब फॉर्म है।
रंगों का चयन
इंटरफ़ेस तत्वों के रंगों के लिए, फ़ॉन्ट के मामले में, उन्हें डिफ़ॉल्ट रूप से मानक छोड़ना बेहतर है। डेल्फ़ी विंडोज़ सिस्टम पैलेट का उपयोग करता है, और उपयोगकर्ता इसे बदलकर रंगों को आसानी से अनुकूलित कर सकता है।
वैकल्पिक प्रबंधन
एक पेशेवर रूप से बनाया गया प्रोग्राम न केवल माउस से, बल्कि कीबोर्ड से भी नियंत्रित होने में सक्षम होना चाहिए। ऐसे कोई कार्य नहीं होने चाहिए जो केवल माउस (ड्राइंग के साथ) से ही किए जा सकें ग्राफ़िक संपादकगिनती नहीं है!) सबसे अधिक उपयोग किए जाने वाले कार्यों के लिए, आपको त्वरित पहुंच के लिए "हॉट कुंजी" प्रदान करनी चाहिए।
इंटरफ़ेस ईंटें
जहां तक ​​यूजर इंटरफेस के विशिष्ट तत्वों का सवाल है, प्रोग्राम के साथ यूजर इंटरेक्शन की गुणवत्ता इस पर निर्भर करती है:
  • नियंत्रण तत्व का उसके द्वारा किए जाने वाले कार्य के साथ अनुपालन;
  • नियम जिनके द्वारा नियंत्रण तत्व संचालित होता है।
    यह पृष्ठ कुछ इंटरफ़ेस तत्व बनाने के नियमों पर चर्चा करता है।
और अब मैं यह दिखाना चाहता हूं कि फॉर्म पर घटकों को प्रबंधित करने के लिए डेल्फ़ी कौन से उपकरण प्रदान करता है, कुंजी दबाए जाने पर उनकी सापेक्ष स्थिति और कर्सर व्यवहार टैब.

सबसे पहले, घटकों को एक दूसरे के सापेक्ष सही क्रम में व्यवस्थित करें उन्हें उजागर करना जरूरी है. आप बस फॉर्म पर उस क्षेत्र पर गोला लगा सकते हैं जिसमें चयनित घटक शामिल हैं। या "होल्ड करके" बदलाव", चयनित होने वाले प्रत्येक घटक को इंगित करने के लिए उसी माउस का उपयोग करें। चयनित घटक पर फिर से माउस क्लिक करें (दबाते समय " बदलाव") इसे अचयनित करता है।

चयनित घटकों को एक पूरे के रूप में प्रबंधित किया जा सकता है - फॉर्म के चारों ओर ले जाया गया, समान गुणों के लिए मान निर्दिष्ट किया गया, कॉपी किया गया (इंस्टॉलेशन के लिए, उदाहरण के लिए, किसी अन्य फॉर्म पर), यहां तक ​​​​कि हटा दिया गया।

अब किसी एक घटक पर राइट-क्लिक करें और पॉप-अप मेनू से चयन करें स्थिति -> संरेखित करें...एक संवाद बॉक्स दिखाई देगा जो आपको समूह में घटकों की क्षैतिज और ऊर्ध्वाधर स्थिति को समायोजित करने की अनुमति देगा। उदाहरण के लिए, हमें अपने चार बटनों को बाईं ओर संरेखित करना होगा और सुनिश्चित करना होगा कि उनके बीच समान ऊर्ध्वाधर दूरी हो। ऐसा करने के लिए, रेडियो बटन का चयन करें क्षैतिज: बाईं ओरऔर लंबवत: समान रूप से स्थान.

आइटम का चयन करके केंद्र, हम घटकों को व्यवस्थित करेंगे ताकि उनके केंद्र क्षैतिज या लंबवत रूप से और आइटम पर एक ही पंक्ति में स्थित हों खिड़की में केन्द्रघटकों को क्षैतिज या लंबवत रूप से विंडो के केंद्र में ले जाता है।

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

मेनू आइटम का चयन करते समय नियंत्रण ->एक सबमेनू दो आइटमों से युक्त दिखाई देता है:

  • सामने लाना
  • वापस भेजो
ये घटक विधियाँ हैं जो प्रोग्रामेटिक रूप से भी उपलब्ध हैं। बटन1.SendToBackबटन को "पृष्ठभूमि" पर ले जाता है और बटन 1. सामने लाओ- "अग्रभूमि" के लिए. अर्थात्, यदि एक घटक दूसरे के ऊपर स्थित है, तो ये विधियाँ अपनी स्थिति बदल देती हैं। जिन मामलों में यह लागू हो सकता है वे बिल्कुल स्पष्ट हैं।

लेख हमारे समूह के युवा डेवलपर्स द्वारा लिखे गए कार्यक्रमों के विश्लेषण के परिणामों के आधार पर लिखा गया था।

हम स्विचिंग घटकों के अनुक्रम को सही ढंग से व्यवस्थित करते हैं

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

कंटेनर के अंदर घटकों को स्विच करने का क्रम TabOrder प्रॉपर्टी द्वारा निर्दिष्ट किया गया है। सक्रिय होने वाला पहला घटक वह है जिसमें TabOrder 0 के बराबर है, दूसरा 1 के साथ है, आदि, जब तक कि सभी घटकों की गणना नहीं हो जाती। इसके अलावा, घटक में TabStop गुण होता है, जो इंगित करता है कि Tab कुंजी के साथ टॉगल करने पर घटक को फोकस प्राप्त होगा या नहीं। यदि आपको किसी घटक पर स्विच करने पर रोक लगाने की आवश्यकता है, तो उसका TabStop = false सेट करें। इस स्थिति में, आप केवल माउस का उपयोग करके इस घटक पर स्विच कर सकते हैं।

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

प्रक्रिया TForm1.FormKeyPress(प्रेषक: TObject; var कुंजी: चार);
शुरू
यदि ord(key)=vk_Return तो
फॉर्म1.SelectNext(PriemForm.ActiveControl, सत्य, सत्य);
अंत;

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

डिफ़ॉल्ट बटन

सभी समान उपयोगकर्ता जल्दी से इस तथ्य के अभ्यस्त हो जाते हैं कि एप्लिकेशन संवाद बॉक्स में, एक नियम के रूप में, आप Enter कुंजी के साथ अपनी पसंद की पुष्टि कर सकते हैं, और Esc कुंजी के साथ रद्द कर सकते हैं। आइए अपने कार्यक्रमों में उन्हें निराश न करें, खासकर इसलिए क्योंकि यह करना बहुत आसान है। एंटर पर प्रतिक्रिया देने वाले बटन के लिए, डिफ़ॉल्ट प्रॉपर्टी को सत्य पर सेट करें। Esc पर प्रतिक्रिया देने वाले बटन के लिए, रद्द करें गुण को सत्य पर सेट करें। बस इतना ही।

हां या नहीं

उपयोगकर्ता कार्रवाई का अनुरोध करने वाले सभी संवाद बॉक्स में कम से कम दो बटन होने चाहिए: कार्रवाई की पुष्टि करना और कार्रवाई को अस्वीकार करना (हां/नहीं, सहेजें/रद्द करना, आदि)। विंडो शीर्षक में [X] बटन के साथ विंडो को बंद करके कार्रवाई को रद्द किया जा सकता है। यह अस्वीकार्य है यदि कार्रवाई की पुष्टि करने के लिए केवल एक बटन है, और इसे अस्वीकार करने के लिए शीर्षक में [X] बटन के साथ विंडो को बंद करना माना जाता है, या इनकार करने की कोई संभावना नहीं है। यह उपयोगकर्ता को भ्रमित करता है, एक तार्किक प्रश्न उठाता है: कैसे मना करें?

साथ ही, ऊपर "डिफ़ॉल्ट बटन" पैराग्राफ में जो कहा गया था उसे भी न भूलें।

सभी डायलॉग बॉक्स स्क्रीन के केंद्र में खुलने चाहिए

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

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

विंडो का आकार स्क्रीन के आकार से अधिक नहीं होना चाहिए

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

विंडो तत्वों का सही आकार बदलना

जब विंडो का आकार बदला जाता है, जब विंडो को अधिकतम किया जाता है, और जब विंडो को अधिकतमीकरण के बाद पुनर्स्थापित किया जाता है, तो विंडो तत्वों का आकार बदलना चाहिए या सही ढंग से चलना चाहिए।

सब कुछ हमेशा दिखाई देता है

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

हर जगह संकेत, हमेशा संकेत

बटनों के लिए, विशेष रूप से टूलबार (जैसे टूलबार) पर, संकेत निर्दिष्ट किए जाने चाहिए ताकि यह हमेशा स्पष्ट रहे कि इस या उस बटन की आवश्यकता क्यों है।

रंग श्रेणी

आपको फॉर्म के घटकों को इंद्रधनुष के सभी रंगों में नहीं रंगना चाहिए। इससे आंखें थक जाती हैं और इस्तेमाल करने वाले का ध्यान भटक जाता है। यह "अच्छा" नहीं लगता. हाइलाइटिंग का उपयोग तब किया जाता है जब किसी विशिष्ट तत्व या विंडो के किसी विशिष्ट भाग पर उपयोगकर्ता का ध्यान आकर्षित करना आवश्यक होता है। उदाहरण के लिए, रंगीन रिकॉर्ड जिनमें हल्के लाल रंग की त्रुटियां हैं या, इसके विपरीत, ऐसे रिकॉर्ड रिकॉर्ड जिन्हें हल्के हरे रंग से सफलतापूर्वक जांचा गया था।

निष्कर्ष

एक बहुत अच्छी विधि है जो आपको सामान्य रूप से प्रोग्राम और विशेष रूप से इंटरफ़ेस में खामियां ढूंढने की अनुमति देती है। यह सरल है: उपयोगकर्ता के स्थान पर स्वयं की कल्पना करें और आधे घंटे तक उसके काम करने के तरीके पर काम करने का प्रयास करें। यदि आपका उपयोगकर्ता सीमा के भीतर है (उदाहरण के लिए, एक ही संगठन में काम करता है) तो और भी बेहतर। इस मामले में, उसके बगल में बैठें, या बेहतर होगा कि उसके बजाय, और उसका काम करने का प्रयास करें। डेटा दर्ज करें, उसे बदलें, रिपोर्ट प्रदर्शित करें, आदि। यदि आप नहीं जानते कि इसे सही तरीके से कैसे करें, तो अपने उपयोगकर्ता से पूछें। डिबग मोड में एक ही प्रकार के केवल एक या दो ऑपरेशन नहीं, बल्कि अलग-अलग क्रम में 20-30, या उससे भी अधिक अलग-अलग ऑपरेशन करें। कुछ दर्ज करना भूल जाएं या इसे गलत तरीके से दर्ज करें और देखें कि प्रोग्राम इस पर कैसे प्रतिक्रिया करता है। आपको तुरंत अपने प्रोग्राम की कमज़ोरियाँ दिखाई देंगी.

लेख के लेखक ने विश्वविद्यालय में प्रवेश समिति के काम को स्वचालित किया, और कार्यक्रम शुरू करने के पहले वर्ष में, उन्होंने प्रवेश समिति में प्रतिदिन 3-4 घंटे बिताए, आवेदकों का पंजीकरण किया, उनका व्यक्तिगत डेटा भरा और उन्हें जारी किया। परीक्षा उत्तीर्ण करने पर रिपोर्ट। और शेष कार्य घंटों में उन्होंने त्रुटियों और कमियों को ठीक किया। यकीन मानिए, अगले साल व्यावहारिक रूप से कोई समस्या नहीं बचेगी। कार्मिक मॉड्यूल शुरू करते समय भी यही हुआ।

इस प्रकार, उपयोगकर्ता अनुभव को ध्यान में रखें। उनके लिए अपने कार्यक्रमों के साथ काम करना आसान और सुखद बनाएं।

केवल परिणाम के लिए

समय सीमा का कड़ाई से पालन

पारदर्शिता

परियोजना कार्यान्वयन

उपहार के रूप में तकनीकी सहायता

1सी पर प्रोग्रामिंग, संशोधन, परामर्श

हम कैसे काम करते हैं

1. हम फोन पर समस्या पर चर्चा करते हैं। उपलब्धता का विषय दूरदराज का उपयोग- अपने कंप्यूटर स्क्रीन पर दिखाएं.

2. यदि परियोजना बड़ी है तो हम काम का अनुमान रूबल में लगाते हैं, यदि नहीं, तो घंटों की अनुमानित संख्या;

3. हम काम पूरा कर लेते हैं.

4. आप अपने कार्यक्रम में कार्य को स्वीकार करते हैं यदि कोई कमी है तो हम उसे ठीक करते हैं।

5. हम चालान जारी करते हैं, आप भुगतान करें।

काम की लागत

1. सभी कार्यों को 3 श्रेणियों में विभाजित किया गया है: परामर्श, एक मानक कॉन्फ़िगरेशन को अद्यतन करना, एक नई रिपोर्ट विकसित करना या प्रोग्रामिंग करना, प्रसंस्करण, बटन, आदि।

3. 10 घंटे से अधिक काम के लिए पहले से तैयारी करनी होगी। संदर्भ की शर्तेंकार्य के विवरण और लागत के साथ। आपके साथ तकनीकी विशिष्टताओं पर सहमति बनने के बाद काम शुरू होता है।

तकनीकी समर्थन

1. यदि आपको 3 महीने के भीतर पहले से स्वीकृत कार्य में कोई त्रुटि मिलती है, तो हम उसे निःशुल्क ठीक करते हैं।

2. नियमित ग्राहकों के लिए, हम अपने काम में किसी भी कमी को एक वर्ष के भीतर निःशुल्क ठीक करते हैं।

आपके व्यवसाय को प्रबंधित करने के लिए सॉफ़्टवेयर.

1सी खरीदें: एंटरप्राइज़

हम 1सी के आधिकारिक डीलर हैं, आप विभिन्न खरीद सकते हैं सॉफ्टवेयर उत्पादऔर लाइसेंस. "बॉक्स" खरीदने के अलावा, हम आपको प्रोग्राम सेट करने, सलाह देने और बुनियादी सेटिंग्स करने में मदद करेंगे।

  • लेखांकन
  • स्टोर स्वचालन
  • थोक बिक्री
  • इंस्टॉलेशन और प्रारंभिक सेटअप सहायता पैकेज में शामिल है!
  • ग्राहकों की आवश्यकताओं के अनुरूप कॉन्फ़िगरेशन को ठीक करना, मानक कॉन्फ़िगरेशन में आवश्यक कार्यों की अनुपस्थिति में नए मॉड्यूल विकसित करना।
1सी: लेखांकन 1सी: व्यापार प्रबंधन 1सी: खुदरा 1सी: वेतन और कार्मिक प्रबंधन
3300 रूबल से। 6700 रूबल से। 3300 रूबल से। 7400 रूबल से।

सर्वर प्रावधान.

सर्वर + 1सी का त्वरित सेटअप।

कोई सर्वर नहीं? कोई समस्या नहीं, हम क्लाउड में एक सर्वर का चयन करेंगे और उसे तुरंत सेटअप करेंगे। एक छोटे से शुल्क के लिए आपको एक बहुत विश्वसनीय समाधान मिलता है।

  • उपलब्धता 24\7
  • अपना खुद का रखने की कोई जरूरत नहीं कार्यकारी प्रबंधक(बचत आपके सर्वर लागत को कवर करेगी)।
  • सर्वर पर 1C का त्वरित सेटअप और इंस्टालेशन, 3 दिनों में आपके पास पहले से ही पूरी तरह से काम करने वाला सिस्टम होगा।
  • यदि आप समाधान से संतुष्ट नहीं हैं तो आप किसी भी समय स्थानीय सर्वर पर जा सकते हैं।

आपके 1सी से एसएमएस

क्या आप चाहते हैं कि आपके ग्राहक प्रमोशन और छूट के बारे में जानें? क्या ग्राहक वापस नहीं लौट रहे हैं? 1सी से सीधे एसएमएस भेजने की व्यवस्था करें!

हमारी कंपनी 1सी से सीधे आपके ग्राहकों को एसएमएस भेजने की त्वरित व्यवस्था करने में सक्षम होगी। उन घटनाओं के उदाहरण जिन्हें स्वचालित किया जा सकता है:

  • खरीदारी के लिए धन्यवाद और अगली खरीदारी के तुरंत बाद बोनस प्रदान किया जाता है।
  • जन्मदिन/अन्य महत्वपूर्ण दिन या छुट्टी के लिए उपहार के रूप में कार्ड पर बोनस जमा करना।
  • गोदाम में माल के आगमन की सूचना.
  • उपहार बोनस की समाप्ति.
  • अग्रिम भुगतान की प्राप्ति और माल के आरक्षण की अधिसूचना।
  • स्टोर/कार्यालय के लिए दिशा-निर्देश, टेलीफोन नंबर सहित पता।
  • वगैरह।

1सी में सेटिंग हमारे विशेषज्ञों या आपके कर्मचारियों द्वारा की जा सकती है। आप एसएमएस टैरिफ पेज पर टैरिफ देख सकते हैं।

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

ताकि आप अपना आधा जीवन यह पता लगाने में न बिता दें, इस लेख में मैं सब कुछ एक थाली में सजाकर लाऊंगा।

इस लेख के विषयों को इस ब्लॉग में अलग-अलग स्तर पर एक से अधिक बार छुआ गया है, लेकिन इस लेख में उन्हें एक साथ एकत्र किया गया है और उचित ठहराया गया है। संक्षेप में, आप इस आलेख का लिंक उन लोगों को दे सकते हैं जो डीएलएल विकसित करते हैं।

महत्वपूर्ण नोट: लेख अवश्य पढ़ना चाहिए क्रमिक रूप से. कोड उदाहरण केवल इस प्रकार प्रदान किए जाते हैं उदाहरण, लेख के प्रत्येक चरण (बिंदु) पर, उदाहरण कोड नए विवरण के साथ जोड़ा जाता है। उदाहरण के लिए, लेख की शुरुआत में कोई त्रुटि प्रबंधन नहीं है; "शास्त्रीय" तरीकों का संकेत दिया गया है (जैसे कि GetLastError, sdtcall कन्वेंशन आदि का उपयोग करना), जिन्हें लेख के आगे बढ़ने के साथ अधिक पर्याप्त तरीकों से बदल दिया जाता है। ऐसा इसलिए किया गया ताकि "नए" ("असामान्य") डिज़ाइनों पर सवाल न उठें। अन्यथा, प्रत्येक उदाहरण के लिए एक नोट सम्मिलित करना आवश्यक होगा जैसे: "इस पर नीचे उस पैराग्राफ में चर्चा की गई है, लेकिन इस पैराग्राफ में उस पर चर्चा की गई है।" किसी भी स्थिति में, लेख के अंत में तैयार कोड का एक लिंक है, जो लेख में कही गई हर बात को ध्यान में रखते हुए लिखा गया है। आप बस इसे ले सकते हैं और इसका उपयोग कर सकते हैं। और लेख बताता है कि क्यों और क्यों। यदि आप "क्यों और क्यों" में रुचि नहीं रखते हैं, तो उदाहरण डाउनलोड करने के लिए निष्कर्ष और लिंक के अंत तक स्क्रॉल करें।

मुझे C++ कोड से डेल्फ़ी क्लास का उपयोग करने में समस्या आ रही है। डेल्फ़ी डीएलएल डेमो, जो एक फ़ंक्शन निर्यात करता है जो ऑब्जेक्ट लौटाता है।
मेरा डेल्फ़ी डीएलएल कोड इस तरह दिखता है:

लाइब्रेरी डेल्फ़ीटेस्ट; // भाग का उपयोग करता है... प्रकार IMyObject = इंटरफ़ेस प्रक्रिया DoThis(n: Integer); फ़ंक्शन DoThat: PWideChar; अंत; TMyObject = class(TInterfacedObject,IMyObject) प्रक्रिया DoThis(n: Integer); फ़ंक्शन DoThat: PChar; अंत; // TMyObject कार्यान्वयन यहां जाएं... प्रक्रिया TMyObject.DoThis(n: Integer); शोमेसेज शुरू करें ("आप DoThis मेथड को" +intToStr(n) +"पैरामीटर" के साथ कॉल कर रहे हैं); अंत; फ़ंक्शन TMyObject.DoThat: PChar; शोमेसेज शुरू करें ("आप DoThat फ़ंक्शन को कॉल कर रहे हैं"); परिणाम:= Pchar('हैलो मैं दोथाट'); अंत;

// निर्यात डीएलएल फ़ंक्शन:

फ़ंक्शन CreateMyObject: IMyObject; stdcall;निर्यात; var txt: टेक्स्टफ़ाइल; AssignFile शुरू करें(txt,"C:\log.log"); रीसेट(txt); Writeln(txt,"हैलो"); परिणाम:= TMyObject.Create; अंत; CreateMyObject निर्यात करता है;

अपने C++ प्रोजेक्ट में मैंने IMyObject इंटरफ़ेस इस प्रकार घोषित किया:

क्लास IMyObject ( सार्वजनिक: IMyObject(); वर्चुअल ~IMyObject(); वर्चुअल शून्य DoThis(int n) = 0; वर्चुअल char* DoThat() = 0; );

और मेरा मुख्य कार्य इस प्रकार है:

टाइपडेफ़ IMyObject* (__stdcall *CreateFn)(); int मुख्य() ( HMODULE hLib; hLib = LoadLibrary(L"DelphiTest.dll");assert(hLib != NULL); // pass !! CreateFn pfnCreate; pfnCreate = (CreateFn)GetProcAddress((HINSTANCE)hLib, "CreateMyObject "); यदि (pfnCreate == NULL) (DWORD errc = GetLastError(); printf("%u\n", errc); // इसे त्रुटि 127 मिलती है) अन्यथा( printf("सफलता लोड\n"); ) IMyObject* objptr = pfnCreate(); objptr->DoThis(5); int_s("%i", &in);

इस उदाहरण में जब मैं निर्यातित फ़ंक्शन तक पहुंचने का प्रयास करता हूं तो मुझे रनटाइम त्रुटि मिलती है। पंक्ति में त्रुटियाँ:
IMyObject* objptr = pfnCreate();

क्या आप मुझे बता सकते हैं कि मेरे उदाहरण में क्या ग़लत है?
और यदि संभव हो, तो C++ कोड से डेल्फ़ी क्लास (DLL में) तक पहुँचने के लिए कोई कार्यशील उदाहरण।

समाधान

पहली समस्या विधि सम्मेलन को कॉल करने की है। डेल्फ़ी इंटरफ़ेस रजिस्टर का उपयोग करता है जो डेल्फ़ी विशिष्ट कॉलिंग कन्वेंशन है। उदाहरण के लिए, इंटरफ़ेस विधियों के लिए stdcall का उपयोग।

अगली समस्या C++ में है। आपका C++ इंटरफ़ेस IUnknown से प्राप्त होना चाहिए, इसके अतिरिक्त, इसे कंस्ट्रक्टर या डिस्ट्रक्टर घोषित नहीं करना चाहिए।

इसके अलावा, आपका डेल्फ़ी कोड PWideChar द्वारा निर्यात किया जाता है जिसे char* पर मैप नहीं किया जाता है। इसे wchar_t* पर मैप किया जाता है।

आगे देखते हुए, PChar को लौटाना यहाँ ठीक काम करता है क्योंकि आपका कार्यान्वयन एक शाब्दिक परिणाम देता है। लेकिन अधिक गंभीर कोड संभवतः गतिशील रूप से आवंटित स्ट्रिंग का उपयोग करना चाहेगा, जिस बिंदु पर आपका डिज़ाइन त्रुटिपूर्ण है।

कृपया ध्यान दें कि रूट में एक फ़ाइल बनाने के लिए सिस्टम डिस्कआपको उन्नत अधिकारों वाला प्रशासक होना चाहिए। तो यह विफलता का एक और संभावित बिंदु है।

मुझे उम्मीद है कि अन्य बग भी होंगे, लेकिन अब तक मुझे बस यही मिला है।

मित्रों को बताओ