2009-06-26 14 views
8

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

नहीं मैं tsButtons या tsFlatButtons

बॉर्डर सेट नहीं किया जा सकता करने के लिए टैब शैली स्थापित करने का मतलब यह नहीं है "कोई नहीं" के लिए और यह बहुत बुरा लग रहा है जब आप टैब नियंत्रण में एक पाठ संपादक जोड़ें।

क्या TpageControl फ्लैट बनाने का कोई तरीका है?

संपादित:

एक खुला स्रोत PageControl कि यहां फ्लैट का समर्थन करता है पर मैं क्या पाया है:

procedure TCustomTabExtControl.WndProc(var Message: TMessage); 
begin 
    if(Message.Msg=TCM_ADJUSTRECT) and (FFlat) then 
    begin 
    Inherited WndProc(Message); 
    Case TAbPosition of 
    tpTop : begin 
    PRect(Message.LParam)^.Left:=0; 
    PRect(Message.LParam)^.Right:=ClientWidth; 
    PRect(Message.LParam)^.Top:=PRect(Message.LParam)^.Top-4; 
    PRect(Message.LParam)^.Bottom:=ClientHeight; 
    end; 
    tpLeft : begin 
    PRect(Message.LParam)^.Top:=0; 
    PRect(Message.LParam)^.Right:=ClientWidth; 
    PRect(Message.LParam)^.Left:=PRect(Message.LParam)^.Left-4; 
    PRect(Message.LParam)^.Bottom:=ClientHeight; 
    end; 
    tpBottom : begin 
    PRect(Message.LParam)^.Left:=0; 
    PRect(Message.LParam)^.Right:=ClientWidth; 
    PRect(Message.LParam)^.Bottom:=PRect(Message.LParam)^.Bottom-4; 
    PRect(Message.LParam)^.Top:=0; 
    end; 
    tpRight : begin 
    PRect(Message.LParam)^.Top:=0; 
    PRect(Message.LParam)^.Left:=0; 
    PRect(Message.LParam)^.Right:=PRect(Message.LParam)^.Right-4; 
    PRect(Message.LParam)^.Bottom:=ClientHeight; 
    end; 
    end; 
end else Inherited WndProc(Message); 

end; 

बात है जब मैं मुख्य आवेदन यह काम नहीं करेगा पर कुछ इसी तरह की कोशिश की। यह संकलन भी नहीं करेगा।

उत्तर

11

जब टैब बटन के रूप में खींचे जाते हैं, तो प्रदर्शन क्षेत्र के चारों ओर कोई सीमा नहीं खींची जाती है, इसलिए Style गुण tsButtons या tsFlatButtons पर सेट करें। (गैर-वीसीएल प्रोग्रामर के लिए, यह टैब नियंत्रण पर tcs_Buttons विंडो शैली समेत समतुल्य है।)

एक विकल्प TNotebook का उपयोग करना है। इसमें पेज हैं, लेकिन यह कोई चित्र नहीं करता है। आपको टैब को स्वयं प्रदान करना होगा, जैसे कि टैब की ऊंचाई के बराबर टैब नियंत्रण की ऊंचाई सेट करके, या TTabSet का उपयोग करके। (TTabSet डेल्फी 2005 में उपलब्ध है; मुझे डेल्फी 7 के बारे में निश्चित नहीं है।)

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

FOldTabProc: TWndMethod; 
procedure TabWndProc(var Msg: TMessage); 

प्रपत्र के OnCreate ईवेंट हैंडलर में, आवंटित पेज नियंत्रण के WindowProc संपत्ति है कि विधि:

FOldTabProc := PageControl1.WindowProc; 
PageControl1.WindowProc := TabWndProc; 

अब जब कि लागू

इस तरह से अपनी रूप में दो नए घोषणाओं बनाओ विधि और tcm_AdjustRect मैसेज को संभाल लें:

procedure TForm1.TabWndProc(var Msg: TMessage); 
begin 
    FOldTabProc(Msg); 
    if Msg.Msg = tcm_AdjustRect then begin 
    case PageControl1.TabPosition of 
     tpTop: begin 
     PRect(Msg.LParam)^.Left := 0; 
     PRect(Msg.LParam)^.Right := PageControl1.ClientWidth; 
     Dec(PRect(Msg.LParam)^.Top, 4); 
     PRect(Msg.LParam)^.Bottom := PageControl1.ClientHeight; 
     end; 
    end; 
    end; 
end; 

यदि आपको उनकी आवश्यकता हो तो आप अन्य तीन मामलों को भर सकते हैं। Tcm_AdjustRectCommCtrl इकाई में घोषित एक संदेश पहचानकर्ता है। अगर आपके पास उस इकाई में वह संदेश नहीं है, तो इसे स्वयं घोषित करें; इसका मूल्य 4904 है।

मुझे संदेह है कि यह नियंत्रण को अपनी सीमाओं को खींचने से रोक नहीं देता है।इसके बजाय, यह थोड़ा बड़ा होने और सीमाओं को कवर करने के लिए TTabSheet निहित होता है।

+1

फ्लैट बटन का उपयोग कर चाल करना चाहिए। मैं अक्सर इसका इस्तेमाल करता हूं। – Hemant

+0

धन्यवाद, लेकिन जैसा कि मैंने अपने प्रश्न पर उल्लेख किया है, मैं tsFlatButtons नहीं चाहता। – wonderer

+0

फिर गैर-फ्लैट बटन का उपयोग करें। मुद्दा यह है कि जब टैब बटन होते हैं, तो वे पृष्ठ के नियंत्रण में फ्लैट होते हैं, वे किस प्रकार के बटन होते हैं। –

2

आप हमेशा एक वाणिज्यिक समाधान का उपयोग कर सकते हैं। मैं दृढ़ता से Raize components की अनुशंसा करता हूं, जो टैब के साथ फ्लैट TPageControls का समर्थन करता है। घटक सेट के साथ काम करना बहुत आसान है, और कई दृश्य संवर्द्धन का समर्थन करता है जो मेरी राय में किसी भी आवेदन को बेहतर महसूस करते हैं।

screen shot of tTPageControl with flat borders

+0

धन्यवाद। लेकिन 1) मुझे पहले से ही एक समाधान मिला है और 2) चूंकि यह एक निजी कार्यक्रम है, इसलिए मुझे कंपोनेंट – wonderer

1

ड्रॉप दो TPageControl रों, Tab रों के रूप में टैब के साथ एक, एक वैश्विक ऊंचाई टैब के बराबर के साथ, और flatbuttons और Tabvisible गुण गलत पर सेट है, जो पहले एक के तहत गठबंधन किया जाएगा के साथ एक। फिर सुनिश्चित करें कि पहले TPagecontrol पर टैब परिवर्तन दूसरे टैब में टैब भी बदल देता है।

0

मैं डेल्फी XE8 उपयोग कर रहा हूँ और निम्नलिखित चाल करने के लिए लगता है:

ATabControl.Tabs.Clear; 
ATabControl.Style := TTabStyle.tsFlatButtons; 
ATabControl.Brush.Color := clWhite; 
+0

के लिए भुगतान करने की आवश्यकता नहीं दिखाई दे रही है अगर लोगों ने अपने डाउनवॉट्स को समझाया तो अच्छा होगा। – uberlaufer

+1

मैंने समीक्षा के दौरान डाउनवोट पर क्लिक किया, क्योंकि सवाल 'डेल्फी 7'' डेल्फी XE8' के बारे में नहीं है। मुझे नहीं पता था कि समीक्षा के दौरान जोड़े गए वोट, समीक्षा समीक्षा प्रक्रिया के बाद हटाए गए नहीं हैं (उत्तर प्रकाशित या हटाया गया है)। दुर्भाग्य से मैं अब unvote नहीं कर सकता। – agabrys

+2

कोई समस्या नहीं है। मैं सिर्फ उत्सुक था और मैं कहूंगा कि यह संभवतः किसी ऐसे व्यक्ति की मदद करता है जो इस पर ठोकर खाता है, साथ ही यह स्पष्ट रूप से चिह्नित किया गया है कि यह किस संस्करण से संबंधित है, मैं व्यक्तिगत रूप से ऐसे संबंधित उत्तरों को प्रोत्साहित करने के लिए प्राथमिकता दूंगा। लेकिन मैं यहां नया हूं और अभी तक साइट की पूरी संरचना और सम्मेलनों से पूरी तरह से परिचित नहीं हूं कि इससे निपटने के तरीके के बारे में। वैसे भी प्रतिक्रिया के लिए धन्यवाद! – uberlaufer

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