2010-03-30 15 views
15

एप्लिकेशन शुरू होने से पहले मैं स्ट्रिंग की टेक्स्ट चौड़ाई प्राप्त करना चाहता हूं। सब कुछ एप्लिकेशन तक ठीक काम करता है। मेनफॉर्म कैनवास मौजूद है। समस्या यह है कि, जब मैं ऐप के ऑनक्रेट ईवेंट में गतिशील रूप से टोडिनिनियम बनाने का प्रयास करता हूं। मुख्य रूप, "कैनवास ड्राइंग की अनुमति नहीं देता है" त्रुटि होती है। (आवेदन। मेनफॉर्म शून्य है ....)। मैंने गतिशील रूप से कैनवास बनाने के कई तरीकों की कोशिश की (उनमें से एक नीचे लिखा गया है), लेकिन यह अभिभावकीय नियंत्रण से जुड़े बिना आकार के आकार को माप नहीं सकता है।स्ट्रिंग के टेक्स्टविड्थ (कैनवास के बिना) कैसे प्राप्त करें?

क्या कोई तरीका है कि इसे किसी भी तरह से कैसे काम करना है?

Thanx

मैंने कोशिश की यह:

TOrdinarium = class (TCustomControl) 
    private 
     function GetVirtualWidth:integer; 
    end; 

constructor TOrdinarium.Create(AOwner:TComponent); 
begin 
inherited; 
Width:=GetVirtualWidth; 
end; 

function TOrdinarium.GetVirtualWidth:integer; 
var ACanvas : TControlCanvas; 
    begin 
    ACanvas := TControlCanvas.Create; 
    TControlCanvas(ACanvas).Control := Application.MainForm; 
    ACanvas.Font.Assign(Font); 

    result:=ACanvas.TextWidth('0'); 

    ACanvas.Free; 
    end; 

उत्तर

27

यह काम करता है:

procedure TForm1.FormCreate(Sender: TObject); 
var 
    c: TBitmap; 
begin 
    c := TBitmap.Create; 
    try 
    c.Canvas.Font.Assign(self.Font); 
    Caption := IntToStr(c.Canvas.TextWidth('My String')); 
    finally 
    c.Free; 
    end; 
end; 
+0

हालांकि मुझे यकीन नहीं है कि यह आपकी समस्या को जोड़ता है, मुझे स्वीकार करना होगा। आम तौर पर, हालांकि, ऑफ-स्क्रीन बिटमैप्स बनाने से आपकी मदद मिल सकती है। –

+0

बिटमैप ... क्या आसान समाधान है ... मुझ पर शर्म की बात है ... धन्यवाद – lyborko

+2

इसके साथ याद रखने की एकमात्र चीज बिटमैप कैनवास की फ़ॉन्ट प्रॉपर्टी को सही ढंग से शुरू करना है (कुछ दृश्यों पर प्रारंभिक फ़ॉन्ट की अनुपस्थिति में से "उधार" करने के लिए घटक), अन्यथा रिपोर्ट की गई पाठ सीमा काफी अर्थहीन होगी। – Deltics

0

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

+0

हाँ ... बिटमैप सरल समाधान ... माफ करना, मेसन, आपको परेशान करने के ... मैं फार्म कैनवास का उपयोग किए बिना TOrdinarium अंदर चौड़ाई को मापने के लिए करना चाहता था है .... मैंने नहीं देखा कि क्या स्पष्ट था ... Thanx वैसे भी – lyborko

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