2012-08-14 25 views
7

आप कह सकते हैं कि स्टैक ओवरफ्लो में इसके बारे में बहुत सी चर्चाएं हैं, लेकिन उनमें से अधिकतर मुझे अन्य भाषाओं के लिए अधिक जटिल हैं।सरल रिचटेक्स्ट को डेल्फी में HTML टैग में कैसे परिवर्तित करें?

मेरे पास एक MySQL दूरस्थ डेटाबेस है जिसमें मेरे पास इस डेटाबेस का उपयोग करने वाली गतिशील वेबसाइट के सहायता पृष्ठों को भरने के लिए कोड के साथ "सहायता" तालिका है।

मैंने वेब साइट द्वारा अधिक गति और सुरक्षा के लिए वेबसाइट की बजाय उस वेबसाइट को प्रबंधित करने के लिए डेल्फी एप्लिकेशन बनाने का निर्णय लिया।

मैं उस सहायता पाठ को बनाने के लिए TRichEdit डालना चाहता हूं और संरेखण, बोल्ड, इटैलिक और रेखांकित शैलियों जैसे साधारण चीजों का उपयोग करना चाहता हूं। मैं चित्रों और फोंट का उपयोग नहीं करना चाहता हूं।

कैसे है कि अमीर स्टाइल पाठ लेने और HTML को दूरस्थ डाटाबेस में मेरी ब्लॉब क्षेत्र के लिए डाल करने के लिए और फिर रिच टेक्स्ट के लिए reconvert अगर मैं इसे फिर से संपादित करना चाहते हैं यह कन्वर्ट करने के लिए?

+1

वहाँ HTML/आरटीएफ डेल्फी के लिए एक्सएचटीएमएल कनवर्टर पुस्तकालय के लिए करने के लिए एक, वाणिज्यिक उपयोग करने के लिए आसान आरटीएफ ScroogeXHTML कहा जाता है, केवल बुनियादी फ़ॉन्ट गुण कार्रवाई करने के लिए विन्यस्त किया जा सकता है जो है। (अस्वीकरण: मैं इस पुस्तकालय का लेखक हूं) – mjn

+1

और यह पुस्तकालय कितना है? – PSyLoCKe

+0

आप इसे ['इस पृष्ठ'] पर देख सकते हैं (http://www.habarisoft.com/scroogexhtml_delphi.html) ;-) – TLama

उत्तर

5

कई अलग-अलग समाधानों की कोशिश करने के बाद, जो सटीक परिणाम नहीं दिए, मैं इस समाधान से प्रेरित था: Convert RTF to HTML and HTML to RTF

विचार यह है कि TWebBrowser नियंत्रण (डिज़ाइन/संपादन मोड में) सही ढंग से संभाल और परिवर्तित कर सकते हैं रिच टेक्स्ट प्रारूप जब इसे क्लिपबोर्ड से चिपकाया गया था।

uses SHDocVw, MSHTML; 

function ClipboardToHTML(AParent: TWinControl): WideString; 
var 
    wb: TWebBrowser; 

    function WaitDocumentReady: Boolean; 
    var 
    StartTime: DWORD; 
    begin 
    StartTime := GetTickCount; 
    while wb.ReadyState <> READYSTATE_COMPLETE do 
    begin 
     Application.HandleMessage; 
     if GetTickCount >= StartTime + 2000 then // time-out of max 2 sec 
     begin 
     Result := False; // time-out 
     Exit; 
     end; 
    end; 
    Result := True; 
    end; 
begin 
    Result := ''; 
    wb := TWebBrowser.Create(nil); 
    try 
    wb.Silent := True; 
    wb.Width := 0; 
    wb.Height := 0; 
    wb.Visible := False; 
    TWinControl(wb).Parent := AParent; 
    wb.HandleNeeded; 
    if wb.HandleAllocated then 
    begin 
     wb.Navigate('about:blank'); 
     (wb.Document as IHTMLDocument2).designMode := 'on'; 
     if WaitDocumentReady then 
     begin 
     (wb.Document as IHTMLDocument2).execCommand('Paste', False, 0); 
     Result := (wb.Document as IHTMLDocument2).body.innerHTML; 
     end; 
    end; 
    finally 
    wb.Free; 
    end; 
end; 

procedure TForm1.Button1Click(Sender: TObject); 
begin 
    RichEdit1.SelectAll; 
    RichEdit1.CopyToClipboard; 

    ShowMessage(ClipboardToHTML(Self)); 
end; 
6

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

चाहे आप किस तरह से जाते हैं, उपयोगकर्ताओं के लिए सामग्री को संपादित करने के लिए देशी प्रारूप को स्टोर करना सबसे अच्छा है, और इसे अन्य प्रारूपों (इसे दोनों दिशाओं में परिवर्तित करने के बजाय) के रूप में परिवर्तित करने के लिए सबसे अच्छा है।

आप TRichEdit उपयोग करते हैं, तो आप आसानी से में और नियंत्रण से बाहर आरटीएफ सामग्री, धारा हालांकि मेरा सुझाव है TJvRichEditTRichEdit से अधिक कर सकते हैं:

procedure GetRTFData(MS: TMemoryStream; RTF: TRichEdit); 
begin 
    MS.Clear; 
    RTF.Lines.SaveToStream(MS); 
    MS.Position := 0; 
end; 

procedure SetRTFData(MS: TMemoryStream; RTF: TRichEdit); 
begin 
    MS.Position := 0; 
    RTF.StreamFormat := sfRichText; 
    RTF.Lines.LoadFromStream(MS); 
end; 

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

JvRichEditToHtml आरटीएफ को एचटीएमएल में परिवर्तित करने के लिए एक सभ्य नौकरी करता है, लेकिन हमने अपनी रूपांतरण इकाई लिखना समाप्त कर दिया क्योंकि हम सरल प्रारूपण से आरटीएफ के साथ बहुत कुछ करते हैं। JvRichEditToHtml को तब तक आसानी से संभालना चाहिए जब तक कि उपयोगकर्ता प्रतिलिपि/पेस्ट के माध्यम से जटिल सामग्री नहीं पेश करते हैं, या सामग्री को प्रारूपित करने के लिए कीबोर्ड शॉर्टकट का उपयोग करते हैं (उदाहरण के लिए, गोलियां = ctrl + shft + l, indent = ctrl + M , आदि।)।

Google Results :: Delphi, HTML, Editor, Component

Stack Overflow :: Delphi, HTML, Editor, Component

हम क्योंकि इसकी व्यापक क्षमताओं का TRichView का उपयोग करें। यह आरटीएफ लोड/बना सकता है, और एचटीएमएल निर्यात कर सकता है। हालांकि यह मुफ्त नहीं है। यदि आप कुछ मुफ्त खोज रहे हैं, TJvRichView और JvRichEditToHtml अच्छे विकल्प हैं।

+0

मैंने उन HTML संपादकों के साथ संघर्ष किया। वे भी अर्द्ध सभ्य/पूर्ण नहीं हैं। यहां तक ​​कि वाणिज्यिक समाधान भी मैला हैं। – Ampere