2012-02-14 15 views
7

मैं लाजर 0.9.30 चला रहा हूं।आप एक TStringGrid में कोशिकाओं के लिए अधिक आसानी से दिखाई देने के संकेत कैसे प्राप्त कर सकते हैं?

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

procedure TTmMainForm.SgScoutLinkMouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer); 
var 
    R, C: Integer; 
begin 
    R := 0; 
    C := 0; 

    SgScoutLink.MouseToCell(X, Y, C, R); 

    with SgScoutLink do 
    begin 
    if (R = 0) then 
     if ((C >= 3) and (C <= 20)) then 
     begin 
     SgScoutLink.Hint := FManager.ScoutLinkColumnTitles.stGetColumnTitleHint(C-3); 
     SgScoutLink.ShowHint:= True; 
     end; {if} 
    end; {with} 
end; 

उत्तर

10

TApplication.OnShowHint या TApplicationEvents.OnShowHint घटना के लिए एक ईवेंट हैंडलर असाइन करें, या TStringGrid उपवर्ग CM_HINTSHOW संदेश रोकना। उनमें से कोई भी आपको THintInfo रिकॉर्ड तक पहुंच प्रदान करेगा जो संकेत विंडो के व्यवहार को नियंत्रित करने के लिए उपयोग किया जाता है। आप आवश्यकतानुसार THintInfo.CursorRect सदस्य के निर्देशांक को कस्टमाइज़ कर सकते हैं। इशारा विंडो नवीनतम Hint प्रॉपर्टी टेक्स्ट (जिसे प्रदर्शित होने से पहले THintInfo.HintStr सदस्य के साथ अनुकूलित किया जा सकता है) के साथ पुनः सक्रिय किया जाता है) जब भी माउस उस आयत के बाहर चलता है। आयताकार छोटा, अक्सर संकेत विंडो सक्रिय होती है। यह सुविधा यूआई नियंत्रण को अपने क्लाइंट एरिया के भीतर कई उपखंडों की अनुमति देती है जो माउस को उसी यूआई नियंत्रण के चारों ओर घूमते समय अलग संकेत स्ट्रिंग प्रदर्शित करता है।

TApplication.HintShortPause संपत्ति का मूल्य (या CM_HINTSHOWPAUSE संदेश को अवरुद्ध करने से) नियंत्रित करता है कि पुन: सक्रिय करने से पहले संकेत विंडो गायब हो जाती है या नहीं। यदि आप रोक मान को शून्य पर सेट करते हैं, तो संकेत विंडो गायब होने के तुरंत बाद अपना टेक्स्ट अपडेट करती है। यदि आप रोक मान को गैर-शून्य मान पर सेट करते हैं, तो संकेत विंडो गायब हो जाती है और फिर मिलीसेकंड की निर्दिष्ट संख्या के बाद फिर से दिखाई देता है, जब तक कि माउस एक ही यूआई नियंत्रण पर रहता है।

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

procedure TTmMainForm.FormCreate(Sender: TObject); 
begin 
    Application.OnShowHint := AppShowHint; 
end; 

procedure TTmMainForm.FormDestroy(Sender: TObject); 
begin 
    Application.OnShowHint := nil; 
end; 

procedure TTmMainForm.AppShowHint(var HintStr: String; var CanShow: Boolean; var HintInfo: THintInfo); 
var 
    R, C: Integer; 
begin 
    if HintInfo.HintControl = SgScoutLink then 
    begin 
    R := 0; 
    C := 0; 
    SgScoutLink.MouseToCell(HintInfo.CursorPos.X, HintInfo.CursorPos.Y, C, R); 
    if (R = 0) and (C >= 3) and (C <= 20) then 
    begin 
     HintInfo.CursorRect := SgScoutLink.CellRect(C, R); 
     HintInfo.HintStr := FManager.ScoutLinkColumnTitles.stGetColumnTitleHint(C-3); 
    end; 
    end; 
end; 

संपादित करें: मैं सिर्फ देखा है कि आप लाजर उपयोग कर रहे हैं। मैंने जो बताया वह डेल्फी में इस मुद्दे को कैसे संभालना है। मेरे पास कोई सुराग नहीं है अगर यह लाजर पर भी लागू होता है या नहीं।

+0

मैं लगता है कि SgScoutLink.MouseToCell कॉल अपेक्षित के रूप में काम नहीं करेगा। यह टीजीआईडी ​​नियंत्रण से संबंधित निर्देशांक की अपेक्षा करता है, लेकिन कर्सरपॉस में वे पूर्ण स्क्रीन निर्देशांक हैं। तो SgScoutLink.ScreenToClient पहले कहा जाना चाहिए। – dummzeuch

+0

@dummzeuch 'THintInfo.CursorPos' में' THintInfo.CursorRect' के भीतर सापेक्ष ग्राहक निर्देशांक शामिल हैं, स्क्रीन निर्देशांक नहीं –

0

मैं निम्नलिखित समाधान के लिए आया था ... पता नहीं अगर यह लाजर में काम करता है, लेकिन मेरी डेल्फी इसके साथ ठीक है है ... लिखें ग्रिड MouseMove हैंडलर के लिए निम्नलिखित छद्म कोड:

if (current_coords==old_coords) then 
    {showhint=true;hint=use_mousetocell_call_to_create} 
else 
    {showhint=false;hint=''} old_coords=current_coords; 
संबंधित मुद्दे

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