घर
Top.Mail.Ru Yandeks.Metrika
मंच: "अन्य";
वर्तमान संग्रह: 2017.01.15;
डाउनलोड करें: [xml.tar.bz2];

नीचे

TCanvas। बहुरंगी अक्षरों के साथ पाठ प्रदर्शित करें। इसी तरह की शाखाएँ खोजें


K-1000 ©   (2016-02-22 16:48) [0]

उद्देश्य: कैनवास पर पाठ को प्रिंट करें, जहां प्रत्येक अक्षर अपने रंग में चित्रित किया गया हो।

सम्मिलित (Google के साथ) निम्नलिखित कोड:

समारोह CalcTextExtent (DCHandle: पूर्णांक; पाठ: स्ट्रिंग): TSize; वर CharFSize: TABCFloat; शुरू करना Result.cx:=0; Result.cy:=0; अगर पाठ = "" तो बाहर निकलने के; GetTextExtentPoint32 (DCHandle, PChar (पाठ), लंबाई (पाठ), परिणाम); GetCharABCWidthsFloat (DCHandle, Ord (पाठ [लंबाई (पाठ))], Ord (पाठ [लंबाई (पाठ))], C harFSize); यदि CharFSize.abcfC <0 तब Result.cx:=Result.cx+Trunc(Abs(CharFSize.abcfC)); अंत; फ़ंक्शन CalcTextWidth (DCHandle: पूर्णांक; पाठ: स्ट्रिंग): पूर्णांक; शुरू करना परिणाम: = CalcTextExtent (DCHandle, Text) .cx; अंत; फ़ंक्शन ड्रामूल्टिक्लोरेडटेक्स्ट (डीसी: एचडीसी; एक्स; वाई: लॉन्गआईंट; कॉन्स्ट टेक्स्ट: स्ट्रिंग; कलर्स: लॉन्गवार्ड की सरणी): बुलियन; वर i: लोंगआईंट; पत्र: स्ट्रिंग; लेटरविद: लॉन्गवर्ड; शुरू करना परिणाम: = गलत; अगर (लंबाई (पाठ) <> लंबाई (रंग)) तो बाहर निकलें; सेटबकोड (डीसी, ट्रांसपेरेंट); i: = 1 से लेकर लंबाई (पाठ) तक शुरू करना पत्र: = पाठ [i]; लेटरविदथ: = कैल्सटैक्सविदथ (डीसी, लेटर); इंक (एक्स, लेटरविदथ); SetTextColor (डीसी, रंग [i - 1]); यदि TextOut (DC, X, Y, PChar (पत्र), लंबाई (पत्र)) नहीं तो बाहर निकलें; अंत; परिणाम: = सत्य; अंत;

Использование:

DrawMulticoloredText (DC, 300, 300, "QisW", [COLOR_BLUE, COLOR_GREEN, COLOR_RED, COLOR_WHITE]);

फ़ॉन्ट: "एरियल ब्लैक", एक्सएनयूएमएक्स।
नतीजतन, पत्र "नृत्य" या "एक ढेर में।"

कुत्ते को कहाँ दफनाया जाता है?



Kerk ©   (2016-02-22 16:50) [1]

चित्र दिखाओ। नाचने या ढेर लगाने का क्या मतलब है?



K-1000 ©   (2016-02-22 16:55) [2]


> केरक © (22.02.16 16: 50) [1]
>
> चित्र दिखाओ। नाचने या ढेर लगाने का क्या मतलब है?


[URL=http://radikal.ru/big/60b29428fd344d98b1d55826d25b504a][IMG]http://s017.radikal.ru/i405/1602/57/f50ed0482e39.png[/IMG][/URL]



K-1000 ©   (2016-02-22 16:56) [3]

* वाह।

http://s017.radikal.ru/i405/1602/57/f50ed0482e39.png



Dimka Maslov ©   (2016-02-22 17:06) [4]

और क्या Canvas.TextWidth, Canvas.TextOut, Canvas.Brush पहले ही रद्द कर दिया गया?



K-1000 ©   (2016-02-22 17:18) [5]


> डिमका मैस्लोव © (22.02.16 17: 06) [4]
>
> Canvas.TextWidth, Canvas.TextOut, Canvas.Brush के बारे में क्या
> रद्द कर दिया गया
>


ऐसा हुआ कि वीसीएल के बिना परियोजना।



Kilkennycat ©   (2016-02-22 17:27) [6]

मैंने बहुत समय पहले इसी तरह की समस्या को हल किया था (मैंने अभी इसे पेंट नहीं किया था, लेकिन बस इसे सचमुच पेंट किया है), और इस निष्कर्ष पर पहुंचा कि यह एक मोनोस्पॉन्टेड फ़ॉन्ट के लिए करना बहुत मुश्किल है, क्योंकि आपको प्रत्येक अक्षर के वैक्टर को पार्स करना है। अन्यथा यह बदसूरत होगा - बहुत अधिक दूरी।



Kilkennycat ©   (2016-02-22 17:33) [7]

लेकिन सामान्य रूप से कार्य सरल है। हाथ में कोई डेल्फी नहीं है, लेकिन यह कुछ इस तरह होगा:

प्रत्येक अक्षर के लिए एक लूप में:
DrawText (winapi) ध्वज के साथ DT_CALCRECT अक्षर की चौड़ाई की गणना करता है
वर्तमान स्थिति में परिकलित चौड़ाई जोड़ें।
कड़े का रंग सेट करें
DTTCALCRECT फ्लैग के बिना DrawText (winapi) वर्तमान स्थिति से एक पत्र खींचता है



Eraser ©   (2016-02-23 03:27) [8]


> किलकेनीकट © (22.02.16 17: 27) [6]


> एक मोनोस्पेस फ़ॉन्ट के लिए क्या नहीं करना बहुत मुश्किल है

किसी तरह TListView में तत्वों के नाम का एक हिस्सा बनाने के लिए एक विचार था कि यह अन्वेषक की खोज में कैसे बनाया गया था "a। कार्य, वास्तव में, शीर्ष स्टार्टर के समान है। इसके अलावा, सभी कार्यान्वयन विचार एक पाठ संपादक के विकास के समान थे। , इसे एक लंबी दराज में रखें, इसलिए यह भी दिलचस्प होगा, निश्चित रूप से एक सरल समाधान है।



Pavia ©   (2016-02-23 12:12) [9]

पाठ प्रदर्शित करते समय सब कुछ सरल होता है विंडोज स्वयं पेन.प्लस को विस्थापित करता है।
लूप से पहले मूव का उपयोग करें, और लूप में ड्राटैक्स।



Kilkennycat ©   (2016-02-23 14:29) [10]


> पाठ प्रदर्शित करते समय सब कुछ सरल होता है।

पत्र-दर-अक्षर आउटपुट के साथ, यह भी केवल एक मोनोपॉज़ के लिए सुंदर होगा। एक अक्षर के दूसरे भाग के सामान्य प्लेसमेंट के लिए (उदाहरण के लिए) Wj ) नहीं होगा। इस तरह दिखेगा: डब्ल्यू जे



Pavia ©   (2016-02-23 15:19) [11]

http://s7.postimg.org/pi6722n9n/image.png

और मैं क्या गलत कर रहा हूं क्योंकि मेरे पास डब्ल्यू और जे डब्ल्यू के तहत चढ़ाई है?
यहां डेल्फी संपादक में इसे कठिन बनाने के लिए एक मोनोस्पेस निष्कर्ष दिया गया है।

प्रक्रिया MyTextOut (str: स्ट्रिंग; कलर्स: लॉन्गवार्ड की सरणी); वर i: पूर्णांक; j: इंटेगर; डीसी: एचडीसी; पेनपोस: TPoint; शुरू करना Form1.PaintBox1.Canvas.MoveTo (20,20); DC: = Form1.PaintBox1.Canvas.Handle; j: = 0; i: = 1 से लंबाई (Str) करते हैं शुरू करना SetTextColor (डीसी, कलर्स [J mod लंबाई (रंग))]; Windows.GetCurrentPositionEx (DC, @PenPos); Form1.PaintBox1.Canvas.TextOut (PenPos.X, PenPos.Y, str [i]); इंक (जे); अंत; अंत; प्रक्रिया TForm1.Button1 क्लिक करें (प्रेषक: TObject); शुरू करना Form1.PaintBox1.Font.Size: = 23; MyTextOut ("wjklmi & # 222; मैं & # 198; jW & # 224;", [ClBLUE, ClGREEN, ClRED, clFuchsia); अंत;



Kilkennycat ©   (2016-02-23 15:24) [12]


> पाविया © (23.02.16 15: 19) [11]

हम्म ... हाँ।
लेकिन मैं नहीं चढ़ पाया। अब निष्कर्ष में बदल सकते हैं। मैंने vin98 बनाया। और इसके परिणामस्वरूप, उन्होंने अतिरिक्त बदसूरत चूक को दूर करने के लिए सिर्फ एक मोनोपेस किया।



Eraser ©   (2016-02-23 18:36) [13]


> पाविया © (23.02.16 15: 19) [11]

और क्या ओएस और संस्करण आईडीई और फ़ॉन्ट?

https://dl.dropboxusercontent.com/u/26403307/2016-02-23_18-32-58.png

विंडोज़ 10, डेल्फी 10 सीटल पर परीक्षण किया गया।



Eraser ©   (2016-02-23 18:49) [14]


> इरेज़र © (23.02.16 18: 36) [13]

स्थापना में मदद मिली
Form1.PaintBox1.Canvas.Brush.Style: = bsClear;
समापन से पहले।



Pavia ©   (2016-02-23 19:37) [15]

हां। मैं भूल गया कि पेनबॉक्स एक निचले स्तर के घटक (आमतौर पर एक फार्म) से Form1.PaintBox1.Canvas.Brush.Color लेता है।
और TextOut इस रंग को पृष्ठभूमि के रूप में, छायांकन के लिए उपयोग करता है।

OS विन 10।
IDE D7। पुराने लोगों को जांचने की आवश्यकता है, जहां तक ​​मुझे याद है, चौड़ाई प्रत्येक वर्ण के लिए नहीं, बल्कि "डब्ल्यू" के लिए ली गई थी, इसलिए कोड एक मोनोसेप्ड की तरह लग रहा था।
पुराने OS के लिए, किसी को भी देखना होगा।



Eraser ©   (2016-02-23 21:20) [16]


> पाविया © (23.02.16 19: 37) [15]

यह महसूस करना
https://dl.dropboxusercontent.com/u/26403307/2016-02-23_21-15-33.png

वहाँ कई पंक्तियों की उपस्थिति पूरी तस्वीर को खराब कर देती है, ड्राइंग के लिए आपको ड्राटेक्स्ट / ड्राटैक्सटेक्स का उपयोग करने की आवश्यकता होती है, जो चरित्र इनपुट पर ठोकर खाता है, इस बहुत "बहुविवाह" के बारे में।



Pavia ©   (2016-02-24 00:28) [17]

हाँ, कृपया।
नीचे दिए गए कोड में सभी बग को घोषित विशेषताएं हैं। ;-)

शैली के साथ RichEdit1 लें
रिचएडिटएक्सएनयूएमएक्स.बॉर्डरसाइल: = बीएसएनओएन;

टाइप TSegment = रिकॉर्ड प्रारंभ, लंबाई: पूर्णांक; अंत; वर LastSelectSegment: TSegment; प्रक्रिया RhichEditBackColor (RichEdit: TRichEdit; color: TColor); वर प्रारूप: CHARFORMAT2A; शुरू करना SendMessage (RichEdit.Handle, EM_HIDESELECTION, 0, LongInt (True)); फिल्चर (प्रारूप, SizeOf (प्रारूप), 0); Format.cbSize: = SizeOf (प्रारूप); SendMessage (RichEdit.Handle, EM_GETCHARFORMAT, WPARAM (गलत), LPARAM (@Format)); Format.dwEffects: = 0; Format.dwMask: = CFM_BACKCOLOR या CFM_COLOR या CFM_FACE; Format.crTextColor: = not format.crTextColor; Format.crBackColor: = $ FFFFFF xor ColorToRGB (रंग); SendMessage (RichEdit.Handle, EM_SetCHARFORMAT, WPARAM (सच), LPARAM (@Format)); अंत; वर फ़्यूडिंग: बुलियन; प्रक्रिया TForm1.RichEdit1SelectionChange (प्रेषक: TObject); वर रिचएडिट: ट्राइचडिट; SelectSegment: TSegment; शुरू करना रिचएडिट: = ट्राइकेडिट के रूप में प्रेषक; if (FUpdating = False) तो शुरू करना SelectSegment.Start: = RichEdit.SelStart; SelectSegment.Length: = RichEdit.SelLength; झूठा: = सच्चा; TCustomMemo (रिचएडिट) .SelStart: = LastSelectSegment.Start; TCustomMemo (रिचएडिट) .SelLength: = LastSelectSegment.Length; RhichEditBackColor (RichEdit, $ FFFFFF xor clWhite); रिचएडिट। सेस्टार्ट: = सेलेक्टस.शार्ट; रिचएडिट.सैलवेट्रिशन: = सेलेक्टसेगमेंट.लिफ्ट; झूठा: = गलत; RhichEditBackColor (RichEdit, clYellow); LastSelectSegment: = SelectSegment; अंत; अंत;



Eraser ©   (2016-02-24 03:18) [18]


> पाविया © (24.02.16 00: 28) [17]

तो रिचएडिट के लिए "प्रश्न नहीं हैं, सवाल यह है कि इस तरह के ड्राइंग को स्वयं कैसे व्यवस्थित किया जाए, [16] एक्सप्लोरर लिस्ट व्यू से तस्वीर में, लेकिन मुझे लगता है कि यह महत्वपूर्ण नहीं है कि कौन सा घटक है।



Eraser ©   (2016-02-24 03:23) [19]

संदेह है कि gdiplus वहाँ नहीं था, अर्थात् https://msdn.microsoft.com/ru-ru/library/windows/desktop/ms534720(v=vs.85).aspx



Eraser ©   (2016-02-24 04:54) [20]

हाँ, बॉक्स वास्तव में gdi + के माध्यम से खोला गया। वही हुआ
https://dl.dropboxusercontent.com/u/26403307/2016-02-24_4-52-50.png

Http://landsurvival.com/delphi/METHSystem.Drawing.Graphics.MeasureCharacter.anges.html पर आधारित है

प्रक्रिया TForm1.PaintBox1Paint (प्रेषक: TObject); वर MyCanvas: TGPGraphics; BrSelect, BrFont: TGPSolidBrush; MyFont: TGPFont; CharRanges: सरणी [0..1] की TCharacterRange; StringFormat: TGPStringFormat; sText: string; RctText: TGPRectF; MyRegions: TGPRegion की सरणी; मैं: इंटेगर; शुरू करना sText: = "लॉन्ग लॉन्ग लॉन्ग लॉन्ग टेस्ट टेक्स्ट xxx yyy zzz"; MyCanvas: = TGPGraphics.Create (PaintBox1.Canvas.Handle); कोशिश MyFont: = TGPFont.Create ("एरियल", 14); BrSelect: = TGPSolidBrush.Create (ColorRefToARGB (clYellow)); BrFont: = TGPSolidBrush.Create (ColorRefToARGB (clBlack)); StringFormat: = TGPStringFormat.Create; कोशिश CharRanges [0] .First: = 15; चाररंग्स [0] .Length: = 4; CharRanges [1] .First: = 25; चाररंग्स [1] .Length: = 3; StringFormat.SetMeasurableCharacterRanges (2, @CharRanges [0]); RctText.X: = 10; RctText.Y: = 10; RctText.Width: = 150; RctText.Height: = 200; सेटलॉग्रोन (MyRegions, लंबाई (CharRanges)); I के लिए: = 0 लंबाई (MyRegions) - 1 करते हैं शुरू करना MyRegions [I]: = TGPRegion.Create; अंत; कोशिश MyCanvas.MeasureCharacterRanges (sText, sText.Length, MyFont, RctText, StringFormat, 2, MyRegions); I के लिए: = 0 लंबाई (MyRegions) - 1 करते हैं शुरू करना MyCanvas.FillRegion (BrSelect, MyRegions [I]); अंत; MyCanvas.DrawString (sText, sText.Length, MyFont, RctText, StringFormat, BrFont); अंत में I के लिए: = 0 लंबाई (MyRegions) - 1 करते हैं शुरू करना MyRegions [I] .Free; अंत; अंत; अंत में StringFormat.Free; BrSelect.Free; BrFont.Free; MyFont.Free; अंत; अंत में MyCanvas.Free; अंत; अंत;



Макс Черных ©   (2016-02-25 02:22) [21]


> अक्षर-दर-अक्षर आउटपुट के साथ, केवल एक मोनोस्पेस के लिए सुंदर है
> होगा। एक पत्र के एक हिस्से के सामान्य प्लेसमेंट के लिए दूसरे के तहत
> (उदाहरण के लिए Wj) नहीं होगा। इस तरह दिखेगा: डब्ल्यू जे


इसे "कर्निंग जोड़े" कहा जाता है। कैरिज ऑटो-शिफ्ट के साथ एक कुंद चरित्र-वार आउटपुट के साथ, इसे परिभाषा द्वारा निष्पादित नहीं किया गया है। स्क्रीन पर, सही निष्कर्ष के साथ अंतर दिखाई दे सकता है, या शायद नहीं। यह हेडसेट और फ़ॉन्ट आकार पर निर्भर करता है।

और इसलिए कि रिचएडिट के रूप में सब कुछ सुंदर है, यह गेटचैटरप्लसमेंट फ़ंक्शन का उपयोग करने के लिए सही है, एक मैमथ के रूप में प्राचीन है। वह तो बस एक पत्र के सभी पदों को सही ढंग से गणना करता है।



Kerk ©   (2016-02-25 11:38) [22]

https://imgs.xkcd.com/comics/kerning.png



पन्ने: 1 पूरी शाखा

मंच: "अन्य";
वर्तमान संग्रह: 2017.01.15;
डाउनलोड करें: [xml.tar.bz2];

ऊपर





मेमोरी: 0.65 एमबी
समय: 1.289 c
15-1457006151
Rincewind
2016-03-03 14:55
2017.01.15
आपकी पसंदीदा और सबसे अनलॉक्ड प्रोग्रामिंग भाषा क्या है?


2-1429690912
टोकन
2015-04-22 11:21
2017.01.15
कक्षा कार्य


2-1428036109
एक्स पुरुष
2015-04-03 07:41
2017.01.15
उन फ़ाइलों के साथ काम करें जिनके नाम यूनिकोड में हैं।


15-1453242651
मज़ाक उड़ाना
2016-01-20 01:30
2017.01.15
मज़ाक उड़ाना


2-1426163311
Aleshka
2015-03-12 15:28
2017.01.15
TDateTime में रजिस्ट्री से





अफ्रीकी अल्बानियन अरबी भाषा अर्मेनियाई आज़रबाइजानी बस्क बेलारूसी बल्गेरियाई कैटलन सरलीकृत चीनी) चीनी पारंपरिक) क्रोएशियाई चेक डेनिश डच अंग्रेज़ी एस्तोनियावासी फिलिपिनो फिनिश फ्रेंच
गैलिशियन् जॉर्जियाई जर्मन यूनानी हाईटियन यहूदी हिंदी हंगरी आइसलैंड का इन्डोनेशियाई आयरिश इतालवी जापानी कोरियाई लात्वीयावासी लिथुआनियाई मेसीडोनियन मलायी मोलतिज़ नार्वेजियन
फ़ारसी पोलिश पुर्तगाली रोमानियाई रूसी सर्बियाई स्लोवाक स्लोवेनियाई स्पेनिश स्वाहिली स्वीडिश थाई तुर्की यूक्रेनी उर्दू वियतनामी वेल्श यहूदी बंगाली बोस्नियाई
सिबुआनो एस्पेरांतो गुजराती हौसा हमोंग ईग्बो जावानीस कन्नड़ खमेर लाओ लैटिन माओरी मराठी मंगोलियन नेपाली पंजाबी सोमाली तामिल तेलुगु योरूबा
ज़ुलु
Английский Французский Немецкий Итальянский Португальский Русский Испанский