2012-06-02 11 views
7

मैं VirtualTreeView के आधार पर एक साधारण 2 कॉलम ग्रिड "संपत्ति संपादक" बनाने की कोशिश कर रहा हूं।वर्चुअलट्रीव्यू में संपादक को जिंदा कैसे रखा जाए?

(मैं डेल्फी के आईडीई वस्तु निरीक्षक पर देखा देखो और उपयोगकर्ता अनुभव की नकल करना चाहते हैं)


घटक लगभग काम कर रहा है और कई संपादकों संभाल कर सकते हैं, लेकिन मैं एक कष्टप्रद बग का सामना करना पड़ रहा हूँ:

जब मैं एक नए नोड (एक नई पंक्ति) पर क्लिक करें, नोड चुना गया है और संपादक प्रकट होता है, स्तंभ मैं पर क्लिक किया है की परवाह किए बिना। यह उम्मीद है और ठीक है।

तब, जब मैं एक ही पंक्ति के पहले स्तंभ पर क्लिक करें, मैं अपने संपादक सामग्री मान्य देखने की उम्मीद और (डेल्फी के वस्तु निरीक्षक में) की तरह संपादक रखने फोकस।

लेकिन संपादक सामग्री मान्य है तो यह गायब हो जाते हैं और पूरे नोड (पंक्ति) चुना गया है। जब तक मैं एक और नोड का चयन नहीं करता और पहले चयनित नोड पर वापस क्लिक नहीं करता तब तक संपादक वापस नहीं मिलेगा (भले ही मैं दूसरे कॉलम पर क्लिक करता हूं)।

संपादित करें: मेरे कोड के बारे में चित्रण और सटीकता जोड़ा गया। मैं कोड यहाँ डाला है नहीं है, क्योंकि मैं इस्तेमाल किया (एक प्रारंभिक बिंदु के रूप में) एक उन्नत डेमो (गुण पेज)

पर पाया के रूप में ठीक उसी कोड:

illustration of the problem

कोड के बारे में


मैं क्या करने की कोशिश की और पता चला:

2003 की संकलित उन्नत डेमो (गुण पेड़ पेज) found here क्या की तरह काम करता है लगता है मैं अपने घटक (और आभासी वृक्षदृश्य से) की उम्मीद करता हूं।

लेकिन जब मैं इसी डेमो को संकलित करता हूं (मैंने Google कोड पर मौजूदा ट्रंक से संस्करण 4.5.2, 4.8.7 और 5.0.0 के साथ भी कोशिश की, डेल्फी 2007 और 200 9 दोनों पर) बग फिर से दिखाई देता है!

मैं पहली बार लगता है कि 2003 और अधिक हाल के संस्करणों, लेकिन मैं कुछ भी नहीं मिल सकता है जो दस्तावेज तोड़ने में परिवर्तन किया गया। मैंने इसे हल करने की कोशिश कर रहे सभी उपलब्ध विकल्पों के साथ भी खेला है, लेकिन सफलता के बिना।

मैं अभी भी इस समस्या को नई डेल्फी RTL या तोड़ने परिवर्तन (बग?) Virtualtreeview में से आता है, तो पता नहीं है।

तो मेरे सवाल:

  • जब उन्नत डेमो संकलन आप एक ही समस्या है?
  • किसी भी टिप या कोड में समाधान मेरी समस्या का समाधान के लिए?

एक तरफ ध्यान दें के रूप में, मैं लगभग अप virtualtreeview साथ आज दोपहर दो और मैं एक और घटक के साथ एक समाधान की कोशिश करना चाहता था ...मुझे यह interesting question मिला और बर्ग के घटक को आजमाने का फैसला किया, लेकिन अपने होमपेज पर सलाह पढ़ने पर खरीद प्रक्रिया में रोक दिया गया था (संबंधित प्रश्न पर मेरी टिप्पणी देखें)

+2

वहाँ एक कारण है कि आप 'TValueListEditor' कि VCL में प्रदान की जाती है उपयोग नहीं कर रहे है? यह विशेष रूप से आप खुद कर (कुंजी की एक सूची प्रदान करते हैं और आप, मूल्यों संपादित करने के लिए वस्तु इंस्पेक्टर की तरह की अनुमति देने) करने की कोशिश कर रहे हैं करने के लिए तैयार है। यह 'KeyOptions.KeyEdit' को सही पर सेट करके आप जिस व्यवहार को खोज रहे हैं उसे लागू करता है। इसमें 'ऑनगेट' ईवेंट हैंडलर हैं जो आपको सूचियां प्रदान करने और मास्क संपादित करने देते हैं, और 'ऑनएडिट बटन बटन' ईवेंट है जो '...' टाइप बटन की अनुमति देता है। –

+0

@ केनहाइट अच्छा बिंदु लेकिन एकमात्र कारण यह है कि मैं देख सकता हूं कि मैंने बाईं ओर [-] बटन देखा है, इसलिए डेमियन संभवतः ढहने की क्षमताओं को ढंका सकता है, जिसे 'TValueListEditor' के पास नहीं हो सकता है। –

+1

हाँ, मैं (आईडीई की संपत्ति संपादक में) की तरह टूट की जरूरत क्षमताओं। खैर, मैं वांछित व्यवहार से संपर्क करने में कामयाब रहा, कई घटनाओं (WDClick, आदि) में WM_START संपादन संदेश जोड़ रहा हूं लेकिन मुझे अभी भी लगता है कि वर्चुअलट्रीव्यू में कुछ टूटा हुआ हो सकता है (मैंने नियंत्रण के आंतरिक भाग को देखना शुरू किया और ऐसा लगता है कि tsEditPending आंतरिक स्थिति को ठीक से संभाला नहीं जाता है) – DamienD

उत्तर

3

वीएसटी ऑनचेंज सिर्फ नोड्स के चयन को बदलकर बुलाया जाता है । यदि नोड पहले से ही चुना गया है, तो राज्य अब और नहीं बदलेगा। इसलिए, आपको ऑब्जेक्ट इंस्पेक्टर के समान व्यवहार को अपने आप पर लागू करना होगा, उदा। VSTS EditNode() कॉल करके - OnClick-कॉलबैक में विधि:

procedure TMainForm.VSTClick(Sender: TObject); 
var node: PVirtualNode; 
begin 
    node:= VST.GetFirstSelected(); 
    if(node <> nil) then 
    VST.EditNode(node, EDITABLE_COLUMN_INDEX); 
end; 
+0

स्पष्टीकरण और नमूना कोड के लिए धन्यवाद। – DamienD

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