2009-08-10 4 views
6

में संकेत देता है मैं एक टीपीएज कंट्रोल और कुछ टीटीएबीशीट्स चाहता हूं, 'प्रति टैबशीट' टूलटिप संकेतों के साथ दिखाई देता है क्योंकि मैं प्रत्येक टैब पर बदले में रहता हूं।TTabSheet डेल्फी

क्या डेल्फी 200 9 में इस प्रभाव को पाने का कोई तरीका है?

+2

फ़ायरफ़ॉक्स यह –

उत्तर

6

बस पेज कंट्रोल के माउस मूव इवेंट को हुक करें और टैबएटपोस प्रॉपर्टी का उपयोग यह निर्धारित करने के लिए करें कि माउस किस टैब पर हो रहा है। फिर पेज नियंत्रण की संकेत संपत्ति पर उस टैब का संकेत असाइन करें।

procedure TForm.PageMouseMove(Sender: TObject; Shift: TShiftState; X, Y: integer); 
var 
    tabindex: integer; 
begin 
    tabindex := PageControl.IndexOfTabAt(X, Y); 
    if (tabindex >= 0) and (PageControl.Hint <> PageControl.Pages[tabindex].Hint) then 
    begin 
    Application.CancelHint; 
    PageControl.Hint := PageControl.Pages[tabindex].Hint; 
    PageControl.ShowHint := true; 
    end; 
end; 

CancelHint/ShowHint संकेत खिड़की को अद्यतन करने का ख्याल रखना होगा जब एक टैब से सीधे एक और करने के लिए माउस ले जाता है।

बेहतर लेकिन बदसूरत संस्करण नीचे भी अस्थायी रूप से हिंटपोज़ को 0 में बदल देता है जब माउस सीधे टैब से टैब पर ले जाया जाता है ताकि संकेत तुरंत फिर से चलाया जा सके। ("बदसूरत" समाधान का हिस्सा Application.ProcessMessages को जाता है फोन जो बलों संदेशों से पहले HintPause पुनर्स्थापित किया जाता है संसाधित करने के लिए संकेत।)

procedure TForm.PagesMouseMove(Sender: TObject; Shift: TShiftState; X, Y: integer); 
var 
    hintPause: integer; 
    tabindex: integer; 
begin 
    tabindex := PageControl.IndexOfTabAt(X, Y); 
    if (tabindex >= 0) and (PageControl.Hint <> PageControl.Pages[tabindex].Hint) then 
    begin 
    hintPause := Application.HintPause; 
    try 
     if PageControl.Hint <> '' then 
     Application.HintPause := 0; 
     Application.CancelHint; 
     PageControl.Hint := PageControl.Pages[tabindex].Hint; 
     PageControl.ShowHint := true; 
     Application.ProcessMessages; // force hint to appear 
    finally Application.HintPause := hintPause; end; 
    end; 
end; 

मुख्य पृष्ठ शरीर पर संकेत छुपाने के लिए, निम्न विधि आवंटित पृष्ठ नियंत्रण के OnMouseLeave घटना में।

procedure TForm.PageMouseLeave(Sender: TObject); 
begin 
    PageControl.Hint := ''; 
    PageControl.ShowHint := false; 
end; 
+0

TabAtPos मौजूद नहीं है, आपका मतलब इंडेक्सऑफटाब (एक्स, वाई) था। यह * इतना * लगभग सही काम करता है। सिवाय इसके कि जब आप एक टैब से दूसरे स्थान पर जाते हैं, तो संकेत अद्यतन या पुन: प्रदर्शित नहीं होता है। – Roddy

+0

माफी; मैं TRzTabSheet (Raize घटक) का उपयोग कर रहा था जिसमें TabAtPos प्रॉपर्टी है और अच्छी तरह से काम करता है। आप केवल थिंटविंडो क्लास का उपयोग करके टैबिंडेक्स के बदलाव पर संकेत दिखा सकते हैं। पृष्ठ नियंत्रण के संकेत संकेत को झूठी पर सेट करें और अपना स्वयं का बनाएं। – Gerard

1

1 - उस संपत्ति को भरें, और सेट करें। PageHontrol के लिए TrueHint प्रॉपर्टी को सही (मान लें कि प्रत्येक टैबशीट में माता-पिताशॉइंट सही है, अन्यथा आपको प्रत्येक पृष्ठ को अलग-अलग सेट करना होगा)।

2 - PageControl के OnChange इवेंट हैंडलर को यह घटना असाइन करें:

procedure TForm1.PageControl1Change(Sender: TObject); 
begin 
    PageControl1.Hint := PageControl1.ActivePage.Hint; 
end; 

आप करते हैं उसके बाद, संकेत किया जाएगा जो कुछ सक्रिय टैब है। मुझे यकीन नहीं है कि माउस कहां चल रहा है, इस पर आधारित संकेत को कैसे बदलना है - यह एक दिलचस्प घटना है जिसे मैंने पहले कभी नहीं देखा है।

+0

भी करता है, मुझे लगता है कि प्रश्न सक्रिय पृष्ठ को बदले बिना पेज-विशिष्ट संकेत दिखा रहा था। – Wolf

5

Raize Components में, इस true को trzpagecontrol.tabhints संपत्ति सेट कर पूरा किया जा सकता है। अच्छे घटक आपको बहुत समय बचा सकते हैं (इसलिए पैसा)।

(बस एक खुश ग्राहक, Btw)

+2

+1 - राइज घटकों में निवेश इसके लायक है। समर्थन विश्व स्तर है, और दृश्य शैली विकल्प मानक नियंत्रण का उपयोग कर दूसरों से अलग अपने आवेदन को वास्तव में सेट कर सकते हैं। – skamradt

+0

सहमत हुए। हम सभी यूआई डिजाइन काम के लिए लगभग विशेष रूप से राइज का उपयोग करते हैं।महान घटक और अच्छा समर्थन। – Gerard

1

पर tPageControl.OnMouseMove लगता है Pgctrl.IndexOfTabAt (एक्स, वाई) द्वारा tabindex और tPageControl संकेत करने के लिए TabSheet संकेत आवंटित

यहाँ देखो:

http://www.delphigroups.info/2/9/321680.html