2009-02-12 14 views
24

मुझे देखे जाने वाले अधिकांश उदाहरण क्लिपबोर्ड पर डालने और पेस्ट का उपयोग करने के लिए कहते हैं, लेकिन यह बहुत अच्छा प्रतीत नहीं होता है क्योंकि यह क्लिपबोर्ड को ओवरराइट करता है।मैं एक छवि को RichTextBox में कैसे सम्मिलित कर सकता हूं?

मैं one method कि मैन्युअल आरटीएफ में छवि डाल एक PInvoke का उपयोग कर एक wmf करने के लिए छवि परिवर्तित करने के लिए देखा था। क्या यह सबसे अच्छा तरीका है? क्या कोई और सीधी चीज है जो मैं कर सकता हूं?

उत्तर

47

सबसे सरल तरीका तस्वीर को स्वयं सम्मिलित करने के लिए आरटीएफ कोड को संशोधित करना होगा।

आरटीएफ में, एक तस्वीर इस तरह परिभाषित किया गया है:

'{' \ pict (?? BRDR & छायांकन & picttype & pictsize & metafileinfo) डेटा '}' प्रश्न चिह्न इंगित करता है नियंत्रण शब्द है वैकल्पिक। "डेटा" केवल हेक्स प्रारूप में फ़ाइल की सामग्री है। यदि आप बाइनरी का उपयोग करना चाहते हैं, तो \ bin नियंत्रण शब्द का उपयोग करें।

उदाहरण के लिए:

{\pict\pngblip\picw10449\pich3280\picwgoal5924\pichgoal1860 hex data} 
{\pict\pngblip\picw10449\pich3280\picwgoal5924\pichgoal1860\bin binary data} 

\ pict = एक तस्वीर समूह, \ pngblip = png चित्र शुरू होता है \ picwX = चित्र (एक्स पिक्सेल मान है) \ pichX की चौड़ाई = की ऊंचाई चित्र \ picwgoalX = twips में चित्र की वांछित चौड़ाई

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

बाद, आप अपने RichTextBox (rtbBox.Rtf) से आरटीएफ कोड प्राप्त मत भूलना, उचित स्थान पर चित्र डालें, और rtbBox.Rtf

का कोड

एक सेट जिस मुद्दे पर आप भाग सकते हैं वह यह है कि .NET आरटीबी का आरटीएफ मानक का बहुत अच्छा समर्थन नहीं है।

मैं सिर्फ एक छोटे से आवेदन * जो आप जल्दी से एक RTB अंदर कुछ आरटीएफ कोड का परीक्षण और देखें कि यह कैसे यह संभालती है की अनुमति देता है बना दिया है। आप इसे यहां डाउनलोड कर सकते हैं: RTB tester (http://your-translations.com/toys)।

आप कुछ आरटीएफ सामग्री (उदाहरण के लिए, शब्द से) बाएं आरटीएफ बॉक्स में पेस्ट कर सकते हैं और सही आरटीएफ बॉक्स में आरटीएफ कोड प्रदर्शित करने के लिए "आरटीएफ कोड दिखाएं" पर क्लिक कर सकते हैं, या आप आरटीएफ कोड पेस्ट कर सकते हैं दाएं आरटीबी पर दाएं हाथ के परिणामों को देखने के लिए "आरटीएफ कोड लागू करें" पर क्लिक करें।

आप निश्चित रूप से कोड को संपादित कर सकते हैं, जो आपको पसंद करते हैं, यह जांचने के लिए काफी सुविधाजनक बनाता है कि RichTextBox आपको आवश्यक आदेशों का समर्थन करता है या आरटीएफ नियंत्रण शब्दों का उपयोग कैसे करें।

आप आरटीएफ ऑनलाइन के लिए एक पूर्ण विनिर्देश डाउनलोड कर सकते हैं।


एनबी यह सिर्फ एक छोटे से बात मैं 5 मिनट में एक साथ थप्पड़ मारा है, तो मैं फ़ाइल को लागू नहीं किया खुला है या बचाने के लिए, खींचें और ड्रॉप, या अन्य सभ्य सामान।

सम्मिलित वर्डपैड या एमएस-वर्ड में आवश्यक छवि:

+1

मुझे पीएनजी दिखाने के लिए आरटीबी नहीं मिल सका, लेकिन कम से कम यह डब्लूएमएफ दिखाता है। –

+0

1 "टिप" = 1/20 बिंदु। 1 प्वाइंट ~ 1.333 पिक्सेल (यह स्क्रीन रिज़ॉल्यूशन पर निर्भर करता है; अधिकांश मॉनीटर आज अपने मूल रिज़ॉल्यूशन में 9 6 पिक्सल प्रति इंच चलाते हैं, इसलिए यह है) – KeithS

4

यहाँ मैं रिच टेक्स्ट नियंत्रण हैक करने करना है। फ़ाइल को 'आरटीएफ' के रूप में सहेजें। कच्चे आरटीएफ कोड को देखने के लिए नोटपैड में आरटीएफ फ़ाइल खोलें। आवश्यक टैग & अपने रिच टेक्स्ट बॉक्स (मौजूदा टेक्स्ट में शामिल) की 'आरटीएफ' संपत्ति में सामान कॉपी करें।

कुछ परीक्षण और त्रुटि शामिल है लेकिन काम करता है।

सी # के साथ, मैं आवश्यक आरटीएफ कोड के साथ प्लेस धारक स्ट्रिंगबिल्डर ऑब्जेक्ट्स का उपयोग करता हूं। तब मैं सिर्फ छवि पथ जोड़ता हूं।

यह आरटीएफ वाक्यविन्यास सीखने के लिए एक कामकाज है।

+3

यह मैंने कभी सुना है सबसे उग्र समाधान है। –

+0

मैं सुबह से "Richtextbox में एक छवि कैसे सम्मिलित करें" के लिए खोज रहा हूं, लेकिन सभी वैन हैं। इस जवाब को पढ़ने के बाद मैंने इसे 180 सेकेंड में कम किया है। आपके लिए +1 –

0

यदि आप सी ++ में थे, तो ऐसा करने का तरीका ओएलई के माध्यम से है। अधिक विशेष रूप से, यदि आप ImageDataObject के लिए Google को खोजते हैं तो यह सी ++ कोड दिखाएगा कि आरटीएफ नियंत्रण में एचबीआईटीएमएपी कैसे डालें। एक लिंक here है।

अब, यह नेट कोड में कैसे अनुवाद करता है, मुझे नहीं पता। मेरे पास वर्तमान में विवरण के माध्यम से काम करने का समय नहीं है।

6
private void toolStripButton1_Click(object sender, EventArgs e) 
    { 
     FileDialog fDialog = new OpenFileDialog(); 
     fDialog.CheckFileExists = true; 
     fDialog.CheckPathExists = true; 
     fDialog.RestoreDirectory = true; 
     fDialog.Title = "Choose file to import"; 
     if (fDialog.ShowDialog() == DialogResult.OK) 
     { 
      string lstrFile = fDialog.FileName; 
      Bitmap myBitmap = new Bitmap(lstrFile); 
      // Copy the bitmap to the clipboard. 
      Clipboard.SetDataObject(myBitmap); 
      DataFormats.Format format = DataFormats.GetFormat(DataFormats.Bitmap); 
      // After verifying that the data can be pasted, paste 
      if(top==true && this.rtTop.CanPaste(format)) 
      { 
       rtTop.Paste(format); 
      } 
      if (btmLeft == true && this.rtBottomLeft.CanPaste(format)) 
      { 
       rtBottomLeft.Paste(format); 
      } 
      if (btmCenter == true && this.rtBottomCenter.CanPaste(format)) 
      { 
       rtBottomCenter.Paste(format); 
      } 
      if (btmRight == true && this.rtBottomRight.CanPaste(format)) 
      { 
       rtBottomRight.Paste(format); 
      } 
     } 
    } 
+5

'== सच' सचमुच सबसे बेकार कोड है जिसे मैंने कभी देखा है। – Nyerguds

11

मैं निम्नलिखित कोड का उपयोग पहले,, क्लिपबोर्ड से डेटा प्राप्त करने स्मृति में सहेज क्लिपबोर्ड में छवि सेट रिच टेक्स्ट बॉक्स में पेस्ट करें और अंत में क्लिपबोर्ड में डेटा को पुनर्स्थापित।

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click 
    OpenFileDialog1.Filter = "All files |*.*" 
    OpenFileDialog1.Multiselect = True 
    Dim orgdata = Clipboard.GetDataObject 

    If OpenFileDialog1.ShowDialog = Windows.Forms.DialogResult.OK Then 
     For Each fname As String In OpenFileDialog1.FileNames 
      Dim img As Image = Image.FromFile(fname) 
      Clipboard.SetImage(img) 
      RichTextBox1.Paste() 

     Next 
    End If 
    Clipboard.SetDataObject(orgdata) 
End Sub 

OpenFileDailog1, RichTextBox1 और Button1 फ़ाइल खोलें संवाद, रिच टेक्स्ट बॉक्स और बटन नियंत्रण क्रमशः रहे हैं।

+1

ईमानदार होने के लिए, मुझे इस समाधान पर संदेह था।मेरा मतलब है, अगर आपके पास पहले से क्लिपबोर्ड (मेरे मामले में) पर एक छवि है, तो उसे क्लिपबोर्ड से बाहर ले जाना, और इसे ठीक से वापस रखना कुछ भी नहीं करना चाहिए। लेकिन कुछ सही चाल इस सपने की तरह काम करती है। धन्यवाद! – Jerry

+0

विश्वास नहीं कर सकता कि यह काम करता है आप एक प्रतिभाशाली हैं .... –

+0

क्या होता है यदि Richtextbox केवल पढ़ने के लिए संपत्ति सही है? यह क्लिपबोर्ड विधि असफल हो जाएगी। इस समाधान के लिए –

0

मैं भी इस एक ही कार्य के लिए कुछ की तलाश में और मिला था इस ->

http://sourceforge.net/projects/netrtfwriter/

आप आरटीएफ पाठ के किसी भी प्रकार है कि आप चाहते हैं और उसके बाद का उपयोग यह जैसा आप चाहते हैं उत्पन्न कर सकते हैं। बहुत अच्छी तरह से संरचित उदाहरण है जो छवि प्रकार का उपयोग किया जा रहा है (jpg/jpeg/png आदि) और छवि फ़ाइलों के लिए काम किया है जो मैं उपयोग कर रहा हूं। यदि आप जल्दी में हैं तो यह एक महान आरटीएफ जनरेटर है!

0

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

यहां कोड है।

private void InsertPicture_Click(object sender, EventArgs e) 
    { 

        { 
      if (openFileDialog4.ShowDialog() == DialogResult.OK) 
      { 
       // Show the Open File dialog. If the user clicks OK, load the 
       // picture that the user chose. 
       pictureBox2.Load(openFileDialog4.FileName); 
       Clipboard.SetImage(pictureBox2.Image); 
       pictureBox2.Image = null; 
       this.richTextBox1.Paste(); 

      } 
    } 
} 
0

मेरे स्वयं के संस्करण है कि मैं एक नया थ्रेड में पोस्ट किया, जाहिरा तौर पर मैं खोज की है चाहिए और यह यहां पोस्ट। वैसे भी, क्लिपबोर्ड का फिर से उपयोग करना, बहुत आसान है।

private void button1_Click(object sender, EventArgs e) 
    { 
     openFileDialog1.Filter = "Images |*.bmp;*.jpg;*.png;*.gif;*.ico"; 
     openFileDialog1.Multiselect = false; 
     openFileDialog1.FileName = ""; 
     DialogResult result = openFileDialog1.ShowDialog(); 
     if (result == DialogResult.OK) 
     { 
      Image img = Image.FromFile(openFileDialog1.FileName); 
      Clipboard.SetImage(img); 
      richTextBox1.Paste(); 
      richTextBox1.Focus(); 
     } 
     else 
     { 
      richTextBox1.Focus(); 
     } 

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