2008-10-01 17 views
7

पर टाइप करते हैं तो खोज को कैसे कार्यान्वित करें TComboBox वंश घटक पर "जैसा आप टाइप करते हैं" व्यवहार को लागू करने का सही तरीका क्या है जिसका शैली csOwnerDrawFixed है?जब आप टीसीम्बोबॉक्स वंशज

+0

निर्भर करता है, क्या आप केवल "खोज के रूप में खोज" भाग को लागू किए बिना भाग को लागू करना चाहते हैं उपयोगकर्ता को कोई प्रतिक्रिया (उदाहरण के लिए फ़ायरफ़ॉक्स इसे लंबी सूचियों पर करता है), या क्या आप वर्तमान खोज स्ट्रिंग को प्रदर्शित करने वाला एक छोटा उप-नियंत्रण दिखाना चाहते हैं? – dguaraglia

उत्तर

1
  1. एक टीटीमर का उपयोग करें (चलिए इसे timIncSearch कहते हैं)। निम्नलिखित गुणों को सेट करें (डिज़ाइन समय पर): सक्षम: = गलत;
    अंतराल: = 400; // अनुभवी पाया - यह विंडोज एक्सप्लोरर

में उपयोग में देरी है ... और ऑनटाइमर में आप अपना खोज इंजन लिखेंगे। सुनिश्चित करें कि यहां पहली पंक्ति timIncSearch होगी। सक्षम: = गलत; इसके अलावा, क्योंकि आप csOwnerDrawFixed का उपयोग करते हैं, शायद आपके नियंत्रण की पुनरावृत्ति को लागू करना बेहतर है।

एक तरफ के रूप में, - बस अनुमान लगाएं क्योंकि आपने हमें कई विवरण नहीं दिए हैं - शायद आपको ओपन एंटर और ऑनएक्सिट घटनाओं को कस्टम खोलने और ड्रॉपडाउन सूची को बंद करने के लिए हुक करना होगा। (Normaly, इस हिसाब से AutoDropDown संपत्ति की स्थापना द्वारा हासिल की है)

  1. अपने ComboBox.KeyPress में आप

with timIncSearch do
begin
Enabled:=False;
Enabled:=True;
end;

लिखेंगे ... भी यहां पर ख्याल रखें, शायद आपके पास # 13 अलग-अलग (या जो कुछ भी) को संभालने के लिए 'केस की' की रचना होनी चाहिए।

अन्य संकेत:

  • अपनी स्थिति पर निर्भर करता है, शायद आप (भी?) हुक चाहिए OnKeyDown (आप जैसे बैकस्पेस, Del, तीर आदि जैसे विशेष कुंजी कार्रवाई करने के लिए चाहते हैं - लेने। खाते में जब यह दबाया जाता है, तब ईवेंट स्वयं को दोहराता है) और/या ऑनकेप (यदि आप उपरोक्त के समान प्रसंस्करण करना चाहते हैं लेकिन के बिना कीबोर्ड की कुंजी ऑटो-दोहराने वाली सुविधा को ध्यान में रखते हुए)।
0

सबसे पहले आपको यह तय करने की आवश्यकता है कि आपको "* my_string *" या "my_string *" कार्यक्षमता की आवश्यकता है, जिसका अर्थ यह है कि क्या आप तारों के अंदर या शुरुआत से ही खोज करेंगे या नहीं। जब आपने इसे समझ लिया है, तो आपको कॉम्बो बॉक्स में दर्ज सभी शब्दों की अनुक्रमणिका को बुलाना होगा और प्रत्येक कीस्ट्रोक के बाद इसे खोजना होगा। मुझे नहीं लगता कि ऑनटाइमर को संभालना एक सही दृष्टिकोण है। मैं बजाय "ऑनचेंज" या इसी तरह का उपयोग करूंगा। आप इसे क्रमबद्ध (डुप्लिगोर) TStringList के साथ कर सकते हैं, या शायद हैश तालिकाओं का उपयोग कर इंडेक्स बना सकते हैं (कार्यान्वयन आपके ऊपर है)। आर्किटेक्चर आपके कॉम्बो में मौजूद तारों की अधिकतम संख्या पर निर्भर करता है। यदि यह हैश टेबल का उपयोग कर सकता है (एक हैश कार्डिनल एकाधिक इंडेक्स को इंगित कर रहा है: सरणी, टीएलआईस्ट ...)

संबंधित मुद्दे