RichEdit und TreeCtrl



  • Hallo,

    ich habe da ein paar Fragen zum RichEditor und zum TreeCtrl.
    RichEditor:
    1.Ich lade aus einer etwa 6MB großen Datei den Text in einen CString. Den CString geb ich dann mit SetDlgItemText() in einem RichEditor aus. Nun möchte ich diesen Text aber auch ändern können.
    Meine Frage dazu ist nun, manchmal kann ich Eingaben in dem RichEditor vornehmen und manchmal nicht, woran liegt das? 😕
    Und muß ich dafür z.B. eine Nachrichtenbehandlunsroutine wie EN_Change benutzen? Denn eigentlich will ich nur Text im RichEditor darstellen, diesen verändern können und diesen dann bei Bedarf über einen Button wieder abspeichern.
    2.Muß man für die Darstellung von Umlauten (ä,ü,ß,...) im RichEditor extra Einstellungen vornehmen? Denn manchmal werden diese richtig dargestellt und dann wieder auch nicht.

    TreeCtrl:
    3. Ich möchte eine Funktion in CDialog::OnInitDialog() aufrufen:

    CDialog::OnInitDialog(){
    .
    .
    .
    int nID=1046;
    treeDarstellung(nID);
    .
    .
    .
    }
    

    Bekomm aber beim Ausführen des Programmes eine Assertion failed Meldung und zwar an der Stelle:

    void TreeBib::treeDarstellung(int nID){
    .
    .
    .
    CTreeCtrl *pTreeCtrl1=(CTreeCtrl*)GetDlgItem(nID);
    .
    .
    .
    }
    

    Wenn ich den Code der Funktion direkt in die OnInitDialog() schreibe funktiooniert das ganze so wie ich das möchte. Hat jemand eine Idee wo mein Fehler liegen könnte?
    Wenn ich mit dem Debugger alles durchgehe, lande ich in
    C:\....\VC98\CRT\SRC\OUTPUT.C
    Der Code ist folgender:

    .
    .
    .
    #ifdef _UNICODE
    .
    .
    .
    if(flags &(FL_LONG|FL_WIDECHAR){
    .
    .
    .
    while(i-- && *p){
       p=text.sz;   //->Assertion failed
    .
    .
    .
    }
    }
    .
    .
    .
    

    Was das zu bedeuten hat ist mir bisher nicht gelungen herauszufinden. 😞



  • Hab da noch was sehr wichtiges vergessen.
    Danke für Eure Mühe und Hilfe.



  • zu 1.

    Die Limitierung der Eingabe erfolgt durch

    CRichEditCtrl::LimitText(..)
    

    Ist die Limitierung z.B. auf 64 kB, und man fügt einen Text von sagen wir 65 kB ein, lässt sich dieser nicht bearbeiten. Das Control limitiert sich dann zunächst selbst auf die 65 kB. Wenn Du dann 10 Zeichen rauslöscht, kannst du 10 andere dafür eingeben. (Wir sind da vor einem halben Jahr mal drüber gestolpert 🙂 .) Ein Aufruf von

    m_ctrlRichEdit.LimitText(INT_MAX-1);
    

    hat unser Problem gelöst (unsere Dateien sind allerdings nur einige 100kB groß).

    Damit das RE auf die EN_CHANGE reagiert, musst du

    m_ctrlRichEdit.SetEventMask(m_ctrlRichEdit.GetEventMask()|ENM_CHANGE);
    

    verwenden. Dann wird der EN_CHANGE-Handler, den Du mit dem ClassWizard setzt, ganz normal aufgerufen.

    Gruss, Gio



  • Moin Gio,

    danke für die Hilfe und Tipps. 🙂 Mit dem m_ctrlRichEdit.LimitText(INT_MAX-1) kann ich nun genügend zusätzlichen Text einfügen, das reicht mir. Kann mir auch kaum vorstellen, daß in meinen Dateien jemand nochmal zusätlich über 2MB an Text reinschreiben möchte. 😉
    Was vielleicht noch ganz schön wäre, wie könnte man zusätzlich Zeilen einfügen? Bei betätigen der Eingabetaste wird in meinem RichEditor keine neue Zeile eingefügt.
    Sonst funktioniert alles mit dem RichEditor wunderbar. 😃



  • Im Resource Editor den Property-Dialog des RE-Controls aufmachen. Unter Styles und Want Return anhaken (ich habe die englische Version der IDE, ist bei mir der letzte Schalter in der mittleren Spalte).

    Gruss, Gio


Log in to reply