Zeile aus RichEdit lesen



  • Hi, ich möchte die Zeile, in der sich der Cursor befindet (blinkding) einlesen, und ggf etwas damit anfangen, aber irgendwie liest der nur mist...

    Zum testen, möchte ich einfach mal die Eingelesene zeile in eine txt ausgeben, aber es werden nur Leerzeichen ausgegeben 😞

    //Aktuelle Position: Var erstellen und aus Controll holen
           static CHARRANGE crCurrent;
           SendMessage(hwnd, EM_GETSEL, (LPARAM)&crCurrent.cpMin, (WPARAM)&crCurrent.cpMax);
    
           //Aktuelle Zeilennummer holen:
           long Line = (long)SendMessage(hwnd, EM_LINEFROMCHAR, crCurrent.cpMax, 0);
           //Globalen Wert für Zeilenbeginn holen:
           long LineBegin =(long) SendMessage(hwnd, EM_LINEINDEX, Line, 0);
           //Länge der Zeile holen:
           int LineLength =(int) SendMessage(hwnd, EM_LINELENGTH, LineBegin, 0);
    
           //Komplette erste Zeile einlesen:
           char* LineBuffer = new char[LineLength+2];
    
            SendMessage(hwnd, EM_GETLINE, Line, (LPARAM)LineBuffer);
           //SendMessage(hwnd, EM_GETLINE, Line, (LPARAM)LineBuffer);
    
            OemToChar(LineBuffer/*in*/, LineBuffer/*out*/); //Ohne ist alles nich schlimmer
    
           //Einfach mal so zum Testen
           ofstream out;
           out.open(".\\debug.txt",ios::app);
           out << LineBuffer << endl;
           out.close();
    

    Was ist hier falsch??

    UND:
    Wenn ich bei Google:

    richedit -Delphi -VB -Assembly -Borland -Pascal -MFC

    eingebe, bekomme ich keine seiten, in der Sowas in C++ Beschrieben ist, nur in sämtlichen anderen Sprachen, die ich nicht ausgeschlossen habe (PHP, Basic, ...) Und seiten, mit einer Nicht leserlichen sprache (Japanisch, Fanzösich,...)

    => Wonach muss ich suchen, wenn ich Informationen/Tutorials uber Das Richedit-feld haben möchte??



  • Informationen zum RichEdit solltest du meines Wissens in der SDK finden.

    Gruß Alex



  • SDK?? Was'n das??



  • Ich zitiere aus der SDK
    "Software Development Kit (SDK) documentation. This documentation provides information about the application programming interfaces (API) supported by Microsoft® Windows®."
    Du findest eine Link im WINAPI Forum ganz oben "Bevor du hier postest:"....

    Oder nimm den hier:
    http://www.microsoft.com/msdownload/platformsdk/sdkupdate/XPSP2FULLInstall.htm

    Gruß
    Alex



  • "# Click each PSDK-FULL .cab file to save it. Save all .cab files to a temporary directory with at least 266 MB free space (for example, c:\psdktemp)."
    Nur weil ich 'n' kleines Problem mit nem RichEdit Control hab, soll ich 270 MB runterladen?!?!?!
    # Run Psdk-full.bat to extract the full image from the .cab files. Specify an install directory with at least 1.4 GB free space."

    Das währen
    ca 1 Stunde Download
    ca 1,5 Stunden Installation
    ---------------
    ca 2,5 Stunden, um nachzusehen, wie ich ne scheiß zeile aus dem Ding rausbekomme!?!

    Außerdem ist es in Englisch. d.h. ich könnte zwar an meine Infos kommen, aber so richtig verstehen würde ich's nicht
    Und dann den Ganzen mist wieder Löschen??

    Gibts da nicht andere Möglichkeiten??



  • Ohne aktuelles PlatformSDK wirst Du noch bei weiteren Funktionen an Deine Grenzen stoßen.



  • Muss ich alle *.cab Datein runterladen, oder reicht "PSDK-FULL.1"??



  • Englischnachhilfe: 😉
    2.Click each PSDK-FULL .cab file to save it.
    each - jede

    Du mußt wohl alle runterladen. Die 1,4 GB kann ich nicht bestätigen bei mir 550 MB.
    Ich muß immer wieder reinschauen, und auch ich stehe mit der englichen Sprache auf Kriegsfuß.
    Mir hilft nur eins: Nochmal und Nochmal lesen zudem habe ich als Wörterbuch QuickDic installiert (frei erhältlich).
    Ich versuche mich halt mit der Sprache vertraut zu machen da es ohne halt nicht geht.

    Gruß Alex



  • Ok, und wonach muss ich suchen??





  • Genau oder in der SDK nach Rich Edit, da stößt Du dann auch auf die "Rich Edit Conrols".

    Gruß
    Alex



  • Das was in der MSDN steht, wusste ich ja schon.
    Und das aus der SDK ist auch nicht viel mehr...

    So wie das da beschrieben ist, müsste es ja Funktionieren, mein Problem ist aber, das es SO NICHT funktioniert, und ich auch nicht genau weis, wo das Problem bei (meinem) code ist, da halt alles so ist, wie es sein müsste. Ich weiß nur, das es an der Stelle irgendwo nen Problem gibt, was dazu führt, das nicht die Zeichen eingelesen werden, die in dem Control stehen...
    -> Gibts nicht nen irgendwo nen Beispielcode, mit dem ich (meinen) code vergleichen könnt??



  • so, hab inzwischen nen paar Fehler beseitigt:

    //Komplette erste Zeile einlesen:
     char* LineBuffer = new char[LineLength+2];
     ZeroMemory(LineBuffer,LineLength+2);
      char LineBufferSize[10];
      itoa(LineLength+2, LineBufferSize, 10);
      strcpy(LineBuffer,LineBufferSize);
     SendMessage(this->RichEdithWnd,EM_GETLINE,Line,(LPARAM)LineBuffer);
    

    Den code hab ich zZ immer noch bei WM_CHAR...

    Wenn ich jetzt "123" eingebe, steht in dem Buffer folgendes:

    LineLength: 0
    LineBegin:  0
    Line:       0
    LineBuffer: 
    
    LineLength: 1
    LineBegin:  0
    Line:       0
    LineBuffer: 1
    ?w???
    
    LineLength: 2
    LineBegin:  0
    Line:       0
    LineBuffer: 12
    w???
    

    Die Zahlen in LineBuffer sind genau so, wie sie sein sollten, aber was ist mit den "w"s und den "?"-Zeichen?? Wo kommen die wech??



  • Hi RedEagle,
    ich würde darauf tippen, daß dies einfach der Wert ist der im Speicher steht nachdem du diesen allociert hast. Du solltest deinen String am Schluß einfach mit NULL terminieren.

    Gruß Alex



  • So, nach langem suchen weiß ich jetzt endlich woran es lag.
    Nach dem ende der zeile kam noch ein '\r' und dann dieser müll.

    Das hab ich jetzt so behoben:

    char* TempLine = new char[arraylength];
       strcpy(TempLine,LineBuffer);
       ZeroMemory(LineBuffer,arraylength);
       for(int i=0; TempLine[i]!='\r'; i++) LineBuffer[i]=TempLine[i];
     delete[] TempLine;
    

    gibts da auch ne "schönere" lösung für??
    Also um bis zum '\r' beizubehalten, und den rest löschen??



  • RedEagle schrieb:

    gibts da auch ne "schönere" lösung für??
    Also um bis zum '\r' beizubehalten, und den rest löschen??

    So sollte das eigentlich auch funktionieren:

    *(strchr(LineBuffer,'\r')) = 0;
    


  • danke, aber irgendwie brauchte ich das nur, solange ich in der Funktion ofstream verwendet habe, als ich die sachen rausgenommen habe, war aufmal kein \r mehr da...
    jedenfals läuft jetzt alles,

    DANKE


Log in to reply