RichEdit Caret position



  • Hallo an alle...

    Ich habe gerade ein wenig vor, und arbeite mit einem RichEdit...
    Ich möchte nun von meinem gesubclassten RichEdit die aktuelle caretposition...

    Also habe ich mit Winspector geschaut was mein RichEdit für Messages bekommt wenn etwas gedrückt wird.. gar nichts!
    Naja gar nichts ist nicht richtig:

    case WM_CHAR:
    	printf( "LW%d, HW%d, LL%d, HL%d\n", LOWORD(wParam), HIWORD(wParam), LOWORD(lParam), HIWORD(lParam) );
    break;
    

    ergibt:

    LW115, HW0, LL1, HL31
    LW100, HW0, LL1, HL32
    LW115, HW0, LL1, HL31
    LW115, HW0, LL1, HL31
    LW100, HW0, LL1, HL32
    LW102, HW0, LL1, HL33
    LW115, HW0, LL1, HL31
    LW100, HW0, LL1, HL32
    LW100, HW0, LL1, HL32
    

    sieht so aus als würde der LOWORD(WPARAM) immer den Dezimalwert vom Buchstaben in der ASCII tabelle haben...
    HIWORD(LPARAM) beinhaltet wohl eine RichEdit-interne Tastaturverwaltung oder ist das der ANSI code?

    Naja wie auch immer... Ich müsste halt an die Position kommen 🤡

    Weiß da jemand was, währe supe.

    Danke im voraus



  • Sowas kann doch nicht unmöglich sein oder?
    Müsste ich dazu erst mein eigenes Objekt entwickeln?

    Geht das nur über Textvergleich vor und nach dem WM_CHAR?
    Den Resttext quasi abgleichen...

    Stimmt.. Das ist mal eine Idee... GetWindowText oder so ist das ne?

    Ich meld mich xD Danke für euer schweigen (jetz wirklich... Wenn das jetzt geht, habe ich viel gelernt!)



  • Hallo,

    die Caret-Position bekommt man doch durch Senden der EM_EXGETSEL-Nachricht?

    MfG,

    Probe-Nutzer



  • Joa weiß ich nich genau, werds mal anschauen, habs jetz per GETTEXT und SETTEXT gemacht.
    Allerdings ist der Carret dann immer an Position 0...

    Daher kann ich dann eventuell per EXGETSEL lösen...



  • Das ist nicht des Rätsels lösung...

    Wie kann ich also die Position wissen( muss den Carret wieder zurücksetzen... )



  • Ist zwar schon ne weile her, aber ich wollte euch den Lösungsansatz (den ihr sicher schon kennt) nicht vorenthalten:
    Man merke sich den rich edit text,
    beim nächsten KeyAuf einfach schauen an welcher position sich was verändert hat.

    int i, iOld;
    i = 0;
    iOld = 0;
    
    while( oldText[i] == newText[i] && i < sizeof(oldText))
    {
     i++;
    }
    
    if( i != sizeof(oldText)-1 )
      //gefunden
    

    könnte noch ein wenig falsch sein, habe den codegerade nicht da 😉


  • Mod

    Warum hast Du nicht mit EM_GETSEL die aktuelle Markierung geholt und mit EM_POSFROMCHAR dann die Position auf dem Screen?



  • Weil ich hier gefragt habe wies geht und niemand geantwortet hat. Dann habe ich selber überlegt und kam (wieder mal) auf eine zu komplizierte Lösung 😃

    Werde mir deine 2 Sachen nochmal ansehen. Danke


  • Mod

    Manchmal ist es gar nicht schwer in die MSDN zu sehen und sich die Nachrichten anzusehen, die alle zur Verfügung stehen. In diesem Falle hätte ein druchsuchen der Nachrichtem die mit EM_GET... anfangen sehr schnell zum Erfolg geführt (maximal 20 Messages die relevant sind). Selbst alle EM_ Nachrichten sind höchstens 40...


Anmelden zum Antworten