2009-12-31 13 views
6

आप मेरे सवाल का इतिहास में देख सकते हैं, मैं एक ई-पुस्तक प्रबंधक के विकास कर रहा हूँ, कि खुले स्रोत हो जाएगा और मैं के बारे में 10 दिनों में यह जारी करेंगे, लेकिन मैं एक TRadioGroup है, जैसा कि आप देख सकते हैं:
TRadioGroup Used On My Form http://img85.imageshack.us/img85/1830/radiogroup.pngTRADioGroup में कौन सा रेडियो बटन चुना गया है?

और मैं कुछ चर को एक चर में स्टोर करना चाहता हूं (जिसे Integer होना चाहिए) जो इस TRadioGroup के साथ "लिंक" होगा। > संख्या कि चर

फ़िट 2xWidth में संग्रहित किया जा करने की आवश्यकता होगी - - डिफ़ॉल्ट -> 0
फ़िट

TRadioButton के

कैप्शन:

मैं एक if समारोह इस तरह करने की जरूरत है 2xHeight -> 1
फ़िट चौड़ाई -> 2
फ़िट ऊंचाई -> 3

लेकिन मैंने अभी एक TRadioGroup और TRadioButton एक बार इस्तेमाल किया, सी # से अलग है जिसे मैंने 20 से अधिक बार उपयोग किया है। तब मैं, पता है कि मैं अगर समारोह पर डाल करने की आवश्यकता चाहते हैं, क्योंकि मैं पहले से ही पता है कि यह क्या करेंगे कैसे करना है:

var 
    num: Integer; 

begin 
    if(TRadioButton1 checked?) 
    begin 
    num := 0; 
    end; 
end. 

क्या मैं if समारोह के कोष्ठक के अंदर डाल करने की आवश्यकता है?

पीएस: मैं उन लोगों के लिए कार्यक्रम पर क्रेडिट डाल रहा हूं जिन्होंने मुझे इस छोटी परियोजना में मदद की।

+0

आपके प्रश्न इतिहास से, मैंने सोचा कि आप जीसीसी के लिए फ्रंट-एंड लिख रहे थे। ई-बुक प्रबंधक को सी कंपाइलर का आह्वान करने की आवश्यकता क्यों होती है? –

+0

यह मेरे ईबुक प्रबंधक की एक नई सुविधा है। –

उत्तर

9

एक ट्रैडियो बटन में चेक की गई संपत्ति है। लेकिन एक TRADioGroup में आइटम इंडेक्स संपत्ति है।

एक TRADioGroup में आइटम एक TStrings का उपयोग करके संग्रहीत किए जाते हैं। तो आप किसी ऑब्जेक्ट को प्रत्येक विकल्प से जोड़ सकते हैं और आप संग्रहीत करने के लिए एक टॉब्जेक्ट में एक पूर्णांक डाल सकते हैं।

उदाहरण:

value := radiogroup.ItemIndex; 

या जुड़े पूर्णांक प्राप्त करने के लिए:

// fill the radiogroup 
radiogroup.Items.AddObject('Fit 2xWidth', TObject(0)); 
radiogroup.Items.AddObject('Fit 2xHeight', TObject(1)); 
radiogroup.Items.AddObject('Fit Width', TObject(2)); 
radiogroup.Items.AddObject('Fit Height', TObject(3)); 
radiogroup.ItemIndex := 0; 

वर्तमान सेटिंग पढ़ने के लिए

index := radiogroup.ItemIndex; 
Assert(index>=0); // Sanity check 
value := Integer(radiogroup.Items.Objects[index]); 

आपके मामले में, मूल्यों 0 से 3 कर रहे हैं तो आप आइटम इंडेक्स का उपयोग कर सकते हैं।

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

+0

ठीक है, लेकिन मैं कोड के इस टुकड़े को 'इंटीगर' पर संग्रहीत करने के लिए कैसे उपयोग कर सकता हूं, जो केवल एक नंबर आयोजित करेगा, जो कि चयनित एकमात्र ऐसा होगा? –

+1

यदि फिट चौड़ाई का चयन किया गया है, तो आइटमइंडेक्स = 2, यदि 2xWidth को ठीक किया गया है तो आइटमइंडेक्स = 0 आदि .. –

+0

बहुत बहुत धन्यवाद! –

5

बस थोड़ा सा टीआईपी: .ItemIndex सेट करना रेडियो आइटम पर कीबोर्ड फोकस नहीं भेजता है, मुझे पता है कि इसे कैसे ठीक किया जाए, आगे पढ़ें।

कोड द्वारा चयन करने के बजाय .ItemIndex सेट करके रेडियो ग्रुप में एक रेडियो रेडियो आइटम पर ध्यान केंद्रित करके इसे करना बेहतर होता है; बस स्पष्ट होने के लिए: मेरा मतलब है कि रेडियो आइटम पर ध्यान केंद्रित करना, पूरे रेडियो समूह में नहीं।

बजाय: radiogroup.itemindex:=TheIndex;

यह इस रूप में कार्य करें: TRadioButton(radiogroup.Controls[TheIndex]).SetFocus;

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

नोट 1: इसे क्रिया में कीबोर्ड कीबोर्ड कर्सर कुंजी का उपयोग करने के लिए और .ItemIndex सेटिंग और रेडियो आइटम पर फ़ोकस भेजने के व्यवहार की तुलना करने के लिए तुलना करें।

नोट 2: यदि आप TRadioButton(radiogroup.Controls[TheIndex]).SetFocus; का उपयोग करते हैं तो .ItemIndex सेट करने की कोई आवश्यकता नहीं है, यह भी किया जाएगा।

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

+1

उत्कृष्ट अवलोकन! – TomR

+0

इस निफ्टी बिट लॉजिक ने ऑनक्लिक घटना के आधार पर एक लूप में फंसने वाले फॉर्म के साथ एक निराशाजनक समस्या हल की। धन्यवाद! –