यदि आप MEMO फ़ील्ड वाली तालिकाओं के साथ डेटाबेस एप्लिकेशन विकसित कर रहे हैं, तो आप ध्यान देंगे कि, डिफ़ॉल्ट रूप से, TDBGrid घटक किसी DBGrid सेल के अंदर MEMO फ़ील्ड की सामग्री नहीं दिखाता है।
यह लेख इस TMemoField के मुद्दे को हल करने का एक विचार प्रदान करता है (कुछ और ट्रिक्स के साथ) ...
TMemoField
मेमो फ़ील्ड्स का उपयोग लंबे पाठ या पाठ और संख्याओं के संयोजन का प्रतिनिधित्व करने के लिए किया जाता है। डेल्फी का उपयोग करते हुए डेटाबेस अनुप्रयोगों का निर्माण करते समय, TMemoField ऑब्जेक्ट का उपयोग डेटासेट में मेमो क्षेत्र का प्रतिनिधित्व करने के लिए किया जाता है। TMemoField उन मूलभूत व्यवहारों को सामान्य करता है, जिनमें फ़ील्ड डेटा होता है जिसमें टेक्स्ट डेटा या मनमानी लंबाई होती है। अधिकांश डेटाबेस में, मेमो फ़ील्ड का आकार डेटाबेस के आकार द्वारा सीमित होता है।
जब आप TDBMemo घटक में MEMO फ़ील्ड की सामग्री प्रदर्शित कर सकते हैं, तो डिज़ाइन द्वारा TDBGrid केवल ऐसे फ़ील्ड की सामग्री के लिए "(मेमो)" प्रदर्शित करेगा।
वास्तव में उचित DBGrid सेल में कुछ पाठ (MEMO फ़ील्ड से) प्रदर्शित करने के लिए, आपको केवल एक सरल कोड जोड़ना होगा ...
अगली चर्चा के उद्देश्य के लिए, मान लें कि आपके पास "DataT" नाम के कम से कम एक MEMO फ़ील्ड के साथ "TestTable" नामक एक डेटाबेस तालिका है।
OnGetText
DBGrid में एक MEMO फ़ील्ड की सामग्री दिखाने के लिए, आपको फ़ील्ड में कोड की एक सरल रेखा संलग्न करनी होगी OnGetText प्रतिस्पर्धा। OnGetText ईवेंट हैंडलर बनाने का सबसे आसान तरीका मेमो फ़ील्ड के लिए एक स्थिर फ़ील्ड घटक बनाने के लिए डिज़ाइन समय पर फ़ील्ड्स संपादक का उपयोग करना है:
- "टेस्टटेबल" डेटाबेस तालिका में अपने टीडीटासेट अवरोही घटक (TTable, TQuery, TADOTable, TADOQuery ...) को कनेक्ट करें।
- फ़ील्ड्स संपादक खोलने के लिए डेटासेट घटक पर डबल क्लिक करें
- लगातार फ़ील्ड की सूची में MEMO फ़ील्ड जोड़ें
- फ़ील्ड संपादक में MEMO फ़ील्ड का चयन करें
- ऑब्जेक्ट इंस्पेक्टर में ईवेंट्स टैब सक्रिय करें
- इवेंट हैंडलर बनाने के लिए OnGetText ईवेंट पर डबल क्लिक करें
कोड की अगली पंक्ति (इटैलिकाइज़्ड नीचे) जोड़ें:
प्रक्रिया TForm1.DBTableDataGetText (
प्रेषक: TField;
var पाठ: स्ट्रिंग;
डिस्प्लेटेक्स्ट: बुलियन);
शुरू
पाठ: = कॉपी (DBTableData)। AsString, 1, 50);
नोट: डेटासेट ऑब्जेक्ट को "DBTable" कहा जाता है, MEMO फ़ील्ड को "DATA" कहा जाता है, और इसलिए, डिफ़ॉल्ट रूप से, MEMO डेटाबेस फ़ील्ड से जुड़े TMemoField को "DBTableData" कहा जाता है। असाइन करके DBTableData। रस्सी जैसी को टेक्स्ट OnGetText घटना के पैरामीटर, हम डेल्फी को एक DBGrid सेल में MEMO फ़ील्ड से सभी पाठ प्रदर्शित करने के लिए कहते हैं।
आप भी कर सकते हैं DisplayWidth को अनुकूलित करें एक अधिक उचित मूल्य के ज्ञापन क्षेत्र के लिए।
नोट: चूंकि MEMO फ़ील्ड काफी BIG हो सकता है, इसलिए इसका केवल एक हिस्सा दिखाना एक अच्छा विचार है। उपरोक्त कोड में, केवल पहले 50 अक्षर प्रदर्शित किए गए हैं।
एक अलग रूप में संपादन
डिफ़ॉल्ट रूप से, TDBGrid MEMO फ़ील्ड्स के संपादन की अनुमति नहीं देता है। यदि आप "जगह" संपादन को सक्षम करना चाहते हैं, तो आप एक उपयोगकर्ता कार्रवाई पर प्रतिक्रिया करने के लिए कुछ कोड जोड़ सकते हैं जो एक अलग विंडो दिखाती है जो TMemo घटक का उपयोग करके संपादन की अनुमति देती है।
सादगी की खातिर हम एक संपादन विंडो खोलेंगे जब ENTER दबाया जाता है "एक DBGrid में" एक ज्ञापन क्षेत्र।
का उपयोग करते हैं चाबी नीचे DBGrid घटक की घटना:
प्रक्रिया TForm1.DBGrid1KeyDown (
प्रेषक: Tobject;
var कुंजी: शब्द;
पारी: TShiftState);
शुरू
यदि कुंजी = VK_RETURN है तो
शुरू
if DBGrid1.SelectedField = DBTableData तब
TMemoEditorForm के साथ। बनाना (निल) करना
प्रयत्न
DBMemoEditor। पाठ: = DBTableData। रस्सी जैसी;
ShowModal;
DBTable। संपादित करें;
DBTableData। AsString: = DBMemoEditor। पाठ;
आखिरकार
नि: शुल्क;
समाप्त;
समाप्त;
समाप्त;
नोट 1: "TMemoEditorForm" एक माध्यमिक रूप है जिसमें केवल एक घटक होता है: "DBMemoEditor" (TMemo)।
नोट 2: "TMemoEditorForm" प्रोजेक्ट विकल्प संवाद विंडो में "ऑटो-क्रिएट फॉर्म" सूची से हटा दिया गया था।
आइए देखें कि DBGrid1 के KeyDown इवेंट हैंडलर में क्या होता है:
- जब कोई उपयोगकर्ता ENTER कुंजी दबाता है (हम कुंजी पैरामीटर की तुलना VK_RETURN से कर रहे हैं आभासी कुंजी कोड) [कुंजी = VK_RETURN],
- यदि DBGrid में वर्तमान में चयनित फ़ील्ड हमारा MEMO फ़ील्ड है (DBGrid1.SelectedField = DBTableData),
- हम TMemoEditorForm [TMemoEditorForm बनाते हैं। बनाएँ (शून्य)],
- मेमो फ़ील्ड का मान TMemo घटक [DBMemoEditor पर भेजें। पाठ: = DBTableData। रस्सी जैसी],
- औपचारिक रूप से [ShowModal],
- जब कोई उपयोगकर्ता संपादन समाप्त करता है और फ़ॉर्म बंद करता है, तो हमें डेटास्ट को संपादन मोड [DBTable] में डालना होगा। संपादित करें],
- हमारे MEMO फ़ील्ड [DBTableData] पर वापस संपादित मान निर्दिष्ट करने में सक्षम होने के लिए। AsString: = DBMemoEditor। पाठ]।
नोट: यदि आप अधिक TDBGrid संबंधित लेख और उपयोग युक्तियों की तलाश कर रहे हैं, तो अवश्य देखें: "अधिकतम करने के लिए TDBGrid"टिप्स संग्रह।