2010-06-29 14 views
6

दबाते समय TSpinEdit पर सिस्टम बीप को अक्षम करें मेरे पास उस फ़ॉर्म पर एक डिफ़ॉल्ट बटन है जिसमें TSpinEdit नियंत्रण है। जब TSpinEdit नियंत्रण में फोकस होता है और उपयोगकर्ता एंटर कुंजी दबाता है, डिफ़ॉल्ट बटन क्लिक करने के बजाय, उपयोगकर्ता बस सिस्टम बीप सुनता है क्योंकि एंटर कुंजी एक TSpinEdit के लिए अमान्य है।एंटर

आम तौर पर, बीप से बचने के लिए, मैं ऑनकेपप्रेस ईवेंट का उपयोग करता हूं और कुंजी प्रेस को छोड़ने के लिए Key := 0 सेट करता हूं। मैं फिर डिफ़ॉल्ट बटन पर क्लिक विधि निष्पादित कर सकता था। हालांकि, इस मामले में, OnKeyPress आग नहीं है क्योंकि एंटर कुंजी मान्य नहीं है।

ऑनकेडडाउन आग, लेकिन जब मैं Key := 0 सेट करता हूं, तो यह सिस्टम बीप को रोकता नहीं है।

तो, मैं TSpinEdit नियंत्रण पर एंटर कुंजी दबाते समय सिस्टम बीप को कैसे अक्षम कर सकता हूं?

मैं डेल्फी 5 पर हूं, और उनमें Spin.pas के स्रोत शामिल नहीं थे।

+5

आप में देखने के लिए किया था "<प्रोग्राम फ़ाइलें> \ बोर्लेन्ड \ Delphi5 \ स्रोत \ नमूने \"? –

+0

@ यूवे, धन्यवाद! यही वह जगह है जहां spin.pas है। मुझे लगता है कि मेरे पास एक फाइल खोज विफल रही थी। –

उत्तर

6

आप TSpinEdit के वंशज हैं और IsValidChar ओवरराइड MessageBeep कॉल या KeyPress से बचने के लिए IsValidChar से बचने के लिए किया है की कोशिश करो।

+0

यह वही है जो मैंने किया, हालांकि, मुझे स्रोत खोजने में मदद के लिए उवे के लिए धन्यवाद! –

+0

क्या आपको एक उदाहरण दिखाना दिमाग है? :) –

7

यह एक

//Disable system beep 
SystemParametersInfo(SPI_SETBEEP, 0, nil, SPIF_SENDWININICHANGE); 

//Enable system beep 
SystemParametersInfo(SPI_SETBEEP, 1, nil, SPIF_SENDWININICHANGE); 
+0

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

+0

कूल हैक। मुझे इसके बारे में पता नहीं था। –

+0

यह मेरे लिए काम करता है, धन्यवाद: डी – Giovani

2

सेट KeyPreview = अपने फार्म पर यह सच है और फ़ॉर्म की कुंजी दबाने घटना के लिए निम्न कोड जोड़ें:

procedure TForm1.FormKeyPress(Sender: TObject; var Key: Char); 
begin 
    if SpinEdit1.Focused and (Key = #13) then 
    begin 
    Key := #0; // Cancels the keypress 
    Perform(CM_DIALOGKEY, VK_RETURN, 0); // Invokes the default button 
    end; 
end; 
संबंधित मुद्दे