2013-04-17 7 views
8

मैं अपने सभी "आयत में आयत" के लिए DrawText का उपयोग कर रहा हूं, हालांकि मैं स्ट्रिंग को खींचने का एक तरीका देखने में असफल रहा हूं, उदाहरण के लिए, बोल्ड या अलग-अलग रंग, या इससे भी बदतर यादृच्छिक रूप से चुने गए शब्दों के लिए अलग-अलग पृष्ठभूमि। शायद कोई भी प्रक्रिया नहीं है जो इसे देख सकती है, जहां तक ​​मैं देख सकता हूं, मैं गलत हो सकता हूं, यह इस प्रश्न का मुख्य बिंदु है। क्या कोई ऐसी प्रक्रियाओं को इंगित कर सकता है जो इस तरह के प्रभावों को प्राप्त करने की कोशिश कर रहे किसी के लिए ब्याज हो सकता है? इसके अतिरिक्त, यदि मैं सही हूं और ऐसा करने का कोई आसान तरीका नहीं है, तो लेने का अनुशंसित तरीका क्या होगा? प्रत्येक शब्द को अलग से खींचना और उसके बाद उन सभी को गोंद लगाने की कोशिश करना एक दुःस्वप्न जैसा लगता है जब आप उन मुद्दों के बारे में सोचना शुरू करते हैं जो उसके सिर के शीर्ष से उत्पन्न हो सकते हैं: आपके पास अलग-अलग फोंट या आकार होने पर एक क्षैतिज रेखा पर उचित टेक्स्ट संरेखण। ..डेल्फी में कैनवास में एक बार में विभिन्न फ़ॉन्ट स्वरूपण के साथ टेक्स्ट कैसे आकर्षित करें?

मुझे डेल्फी xe3 मिला है; अगर कोई मेरे प्रश्न और/या पाठ के वाक्यांश को बेहतर बना सकता है, तो कृपया ऐसा करें।

+0

आप इसे पूरी तरह से ** ** ** नहीं कर सकते हैं। हालांकि आप इस नौकरी को मेटाफाइल की तरह smth करने के लिए प्रतिनिधि दे सकते हैं और फिर प्रतिपादन परिणाम को विस्फोट कर सकते हैं ताकि आप * एक बार * प्रभाव में स्पष्ट * प्राप्त कर सकें। WinGDI कैनवास केवल लाइन-फ़ीड्स या टैब जैसे बहुत ही बुनियादी स्वरूपण कोड को पहचानता है। – OnTheFly

उत्तर

15

आप VCL से कुछ मदद मिल, के बाद से TCanvas.TextOut विधि बढ़ जाती है x उत्पादन स्ट्रिंग की चौड़ाई से कलम स्थिति का समन्वय: किसी भी तरह

procedure TForm1.FormPaint(Sender: TObject); 
begin 
    Canvas.MoveTo(20, 100); 

    Canvas.Font.Name := 'Segoe UI'; 
    Canvas.Font.Color := clMaroon; 
    Canvas.Font.Style := []; 
    Canvas.Font.Height := 64; 
    Canvas.TextOut(Canvas.PenPos.X, Canvas.PenPos.Y, 'This '); 

    Canvas.Font.Color := clNavy; 
    Canvas.Font.Style := [fsBold]; 
    Canvas.Font.Height := 64; 
    Canvas.TextOut(Canvas.PenPos.X, Canvas.PenPos.Y, 'is '); 

    Canvas.Font.Name := 'Bookman Old Style'; 
    Canvas.Font.Color := clBlack; 
    Canvas.Font.Style := [fsItalic]; 
    Canvas.Font.Height := 64; 
    Canvas.TextOut(Canvas.PenPos.X, Canvas.PenPos.Y, 'a '); 

    Canvas.Font.Name := 'Courier New'; 
    Canvas.Font.Color := clSilver; 
    Canvas.Font.Style := []; 
    Canvas.Font.Height := 64; 
    Canvas.TextOut(Canvas.PenPos.X, Canvas.PenPos.Y, 'test!'); 
end; 

Screenshot http://privat.rejbrand.se/canvastextpos.png

, अगर आप अधिक की जरूरत है उन्नत टेक्स्ट आउटपुट दिनचर्या, DirectWrite पर क्यों नज़र डालें?

+0

मुझे कम से कम इसके शब्द लपेटने के लिए DrawText पसंद है टेक्स्टआउट के साथ क्षमताओं को मुझे संभालने की आवश्यकता होगी, जो स्थिति को किसी भी आसान नहीं बनाता है, शब्द रैपिंग की लक्जरी और बेहतर दिखने वाले पाठ के लिए अन्य विकल्प ... और साथ ही, ऊंचाई के आकार को फ़ॉन्ट के आकार को निर्दिष्ट करता है? या बस उस ऊंचाई के लिए एक उपयुक्त फ़ॉन्ट आकार चुनता है? – Raith

+1

@ रेथ: उत्तरार्द्ध। किसी भी तरह, यदि आपको अधिक उन्नत टेक्स्ट आउटपुट दिनचर्या की आवश्यकता है, तो क्यों न करें [DirectWrite] (http://msdn.microsoft.com/en-us/library/windows/desktop/dd368038 (v = vs.85)। aspx)? –

+0

डायरेक्टवाइट (या उस मामले के लिए कुछ भी विंडोज़ प्रोग्रामिंग) ऐसा कुछ नहीं है जिसे मैं परिचित हूं। दरअसल, आपने इसे सही तरीके से रखा: "उन्नत टेक्स्ट आउटपुट दिनचर्या", यदि डायरेक्टवाइट ऐसा करता है, तो यह वही हो सकता है जो मैं ढूंढ रहा हूं, धन्यवाद। मुझे जांच करने की ज़रूरत है। मैं सूचित करूंगा कि क्या यह उत्तर के रूप में पर्याप्त है। – Raith

2

क्या आपने रिचहेडिट का उपयोग इसकी समृद्ध स्वरूपण क्षमताओं के साथ किया है? यदि आपको कैनवास पर टेक्स्ट खींचने की आवश्यकता है, विंडो में नहीं, तो EM_FORMATRANGE संदेश स्वरूपित पाठ के आलेखीय प्रतिनिधित्व की प्रतिलिपि बनाने की अनुमति देता है।

+0

समृद्ध (adj।) <> पहुंच (v .; n।) –

+0

@Andreas Rejbrand धन्यवाद, मूर्खतापूर्ण गलती;) – MBo

+0

... * * * * समृद्ध * टेक्स्ट स्वरूपण तक पहुंचने के लिए ... ;-) – OnTheFly

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

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