2016-12-01 9 views
5

मेरे पास एक प्रकार का टीवीलाउलिस्ट एडिटर है जिसमें कुंजी कॉलम में किसी फ़ंक्शन के कुछ पैरामीटर और फ़ंक्शन का परीक्षण करने के लिए उपयुक्त मान कॉलम के लिए इनपुट शामिल है। पैरामीटर होना चाहिए डेटा के प्रकार के आधार पर मैंने वैल्यू इनपुट में एक संपादन मास्क जोड़ा है। उदाहरण के लिए पैरामीटर Num1 टाइप int का है, इसलिए इनपुट केवल संख्याएं होनी चाहिए, लेकिन चूंकि मुझे अग्रिम में अंकों की सटीक संख्या नहीं पता है, क्या निश्चित रूप से वर्णों की निश्चित लंबाई के बिना संपादनमास्क निर्दिष्ट करने का कोई तरीका है?डेल्फी सेट मास्क को अक्षरों की कोई निश्चित लंबाई के साथ संपादित करें

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

if parser.sParams.Values[parser.sParams.Names[i]]='float' then 
    begin 
    lstValParamValues.ItemProps[parser.sParams.Names[i]].EditMask:='#########.#'; 
    end 

शायद मुझे संपादनमास्क पर रेगेक्स की तरह कुछ लागू करना चाहिए? या मूल्य इनपुट के सत्यापन को लागू करने का एक और तरीका है?

+0

उपयोग OnGetEditMask editmask बदलने के लिए क्षेत्र देखने के प्रकार के आधार: http://docs.embarcadero.com/products/rad_studio/delphiAndcpp2009/HelpUpdate2/EN/html /delphivclwin32/ValEdit_TValueListEditor_OnGetEditMask.html –

उत्तर

5

प्रति TItemProp.EditMask documentation:

मान्यता EditMask संपत्ति का उपयोग कर एक चरित्र-दर-चरित्र आधार पर किया जाता है।

तो आप केवल निश्चित-चौड़ाई मास्क का उपयोग कर सकते हैं। जिसका अर्थ है कि आपको यह निर्दिष्ट करना होगा कि दशमलव बिंदु कहां होगा, और कितने अग्रणी और पीछे वाले अंक स्वीकार किए जाएंगे।

बजाय TValueListEditor.OnValidate घटना उपयोग पर विचार करें:

तब होता है जब फोकस मूल्य सूची संपादक में एक सेल से दूर बदलाव।

फोकस छोड़ने से पहले उपयोगकर्ता द्वारा किसी सेल में प्रवेश करने वाले किसी भी संपादन को सत्यापित करने के लिए एक ऑनवालिडेट ईवेंट हैंडलर लिखें। OnValidate अनुप्रयोगों को संबंधित TItemProp ऑब्जेक्ट की EditMask प्रॉपर्टी की तुलना में अधिक सत्यापन प्रदान करने का अवसर प्रदान करता है प्रदान कर सकता है।

ऑनवालिडेट केवल तब होता है जब उपयोगकर्ता उस सेल के मान को संपादित करता है जो फोकस खोने वाला है। ऑनवालिडेट इवेंट हैंडलर उपयोगकर्ता द्वारा प्रदान किए गए मान को सत्यापित कर सकता है, और यदि यह स्वीकार्य नहीं है, तो अपवाद बढ़ाएं।

उदाहरण के लिए:

uses 
    SysConsts; 

procedure TMyForm.lstValParamValuesValidate(Sender: TObject; ACol, ARow: Integer; const KeyName: String; const KeyValue: String); 
var 
    ValueType: string; 
    sIgnored: Single; 
    dIgnored: Double; 
begin 
    if KeyValue = '' then Exit; 

    ValueType := parser.sParams.Values[KeyName]; 

    if ValueType = 'int' then 
    StrToInt(KeyValue) 

    else if ValueType = 'float' then 
    begin 
    if not TryStrToFloat(KeyValue, sIgnored) then 
     raise EConvertError.CreateFmt(SInvalidFloat, [KeyValue]); 
    end 

    else if ValueType = 'double' then 
    begin 
    if not TryStrToFloat(KeyValue, dIgnored) then 
     raise EConvertError.CreateFmt(SInvalidFloat, [KeyValue]); 
    end 

    // etc... 
end; 
संबंधित मुद्दे