2013-03-16 6 views
8

के साथ एक फॉर्म पर टीएममो में लाइन ब्रेक मेरे पास फ़ायरमॉन्की का उपयोग करके लिखे गए एप्लिकेशन में एक फॉर्म है। उस (मोडल) फॉर्म पर एक ठीक बटन है जिसके लिए मैंने डिफ़ॉल्ट संपत्ति को सही पर सेट किया है। एक ज्ञापन घटक भी है। अब यदि ज्ञापन में टाइप करते समय टाइप दबाएं, तो मेमो में लाइन ब्रेक डालने के बजाय फ़ॉर्म बंद हो जाता है।डिफॉल्ट बटन

मैं क्या हासिल करना चाहता हूं, यह है कि जब दर्ज करें (या शिफ्ट + दर्ज करें या उस तरह की smth) ज्ञापन घटक में दबाया जाता है, तो लाइन ब्रेक दर्ज होता है। अन्य घटकों में, जहां आप लाइन ब्रेक टाइप नहीं कर सकते हैं, मैं अभी भी फॉर्म को बंद करने के लिए एंटर मारना पसंद करूंगा। सबसे अच्छा मैं पाया है अब तक रूपों OnCloseQuery कार्रवाई में निम्न कोड जोड़ रहा है:

if (Focused.GetObject.ClassName = 'TMemo') and (ModalResult = mrOk) then 
begin 
    CanClose := False; 
    Memo := TMemo(Focused.GetObject); 
    Memo.InsertAfter(Memo.CaretPosition, sLineBreak, [TInsertOption.ioMoveCaret, 
    TInsertOption.ioCanUndo]); 
end 
else 
    CanClose := True; 

यह काम करता है, लेकिन अब वहाँ दर्ज करें और लाइन ब्रेक के पहले दिखाई देता से टकराने के बाद एक छोटे से परेशान भी देर है। इसके अलावा मैं समाधान चाहूंगा, जो कम हैकी होगी।

मुझे यह भी इंगित करना चाहिए कि मेरे पास ऐसे फॉर्म भी हैं जिनमें ओके बटन है, लेकिन ज्ञापन घटक नहीं है, हालांकि एक ज्ञापन को अपनी मूल संपत्ति को बदलकर रनटाइम पर उस रूप में स्थानांतरित किया जाएगा।

+1

कोशिश True को 'Memo.Lines.BeginUpdate में False को btnOk.Default सेट;' मेमो सामग्री और 'Memo.Lines.EndUpdate बदलने से पहले, उसके बाद'। – Abelisto

+3

एम्बा ने टीएममो वांटरेटर्न, वांटटाब्स गुणों को लागू करने के लिए चूक गए: ओ (मैं फॉर्म पर एक ऑनडिल्ड इवेंट का उपयोग यह जांचने के लिए करता हूं कि डिफ़ॉल्ट संपत्ति सेट करने के लिए कोई केंद्रित टीएमईओ है या नहीं। लेकिन एम्बा के पास एफएमएक्स के लिए कोई टीएप्लिकेशंस नहीं है: o (केवल TActionList है ऑन अपडेट इवेंट जो निष्क्रिय होने पर निकाल दिया गया है यदि कम से कम एक क्रिया को परिभाषित किया गया है और –

+1

पर नियंत्रण के लिए असाइन किया गया है, तो अपने डिफ़ॉल्ट बटन 'ऑनक्लिक' ईवेंट में, परीक्षण करें कि ज्ञापन केंद्रित है और यदि मामला है तो 'ModalResult' को mrNone पर सेट करें। –

उत्तर

2

अपने ज्ञापन के OnEnter, और पीठ में ज्ञापन के OnExit

+0

यह हमेशा इतना आसान नहीं होता है। मेरे पास ऐसे फॉर्म हैं जहां मेमो एक अन्य रूप पर है जो ठीक बटन के साथ फॉर्म में एम्बेड किया गया है (जैसे http://stackoverflow.com/a/9048640/721309)। इसलिए कभी-कभी ज्ञापन का कोई तरीका नहीं है कि कोई बटन है या नहीं। –

+1

उस स्थिति में, आप 'टीएममो' के वंशज बना सकते हैं जो 'डिफ़ॉल्ट 'सेट के साथ' ट्रू 'पर बटन के लिए अपने माता-पिता के नियंत्रणों के माध्यम से खोजता है, और इसे' सीएमईएनटर() 'विधि में' गलत 'पर सेट करता है, और 'CMExit()' में 'True' पर वापस जाएं –

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