Eingabefeld String durchlaufen lassen



  • Hallo,

    mich würde interessieren ob man in einem deaktivierten Eingabefeld Text durchlaufen lassen kann, der zu lang dafür ist.
    Also konkret ist das so, ich generiere eine zufällige Bitfolge bei der ich jeden einzelnen integer Wert in einen CString konvertiere, dann hänge ich alle aneinander und mache daraus einen "langen" String. Diesen wiederrum möchte ich an ein Eingabefeld übergeben um ihn dort anzuzeigen, aber er ist zu lang. Ich hätte eben gern das hinten immer ein Bit angehängt wird dass dann das vorderste aus dem Feld schiebt. Versteht ihr was ich meine? Hier mal ein bisschen Code:

    int i[100];
    CString stri[100];
    CString strTest;
    
    for (int j = 0; j < 100; j++)
    {
    	i[j] = rand() %2;
    	stri[j].Format("%d", i[j]);
    	strTest += stri[j];
    	SetDlgItemText(IDC_E_RANDOM, strTest);
    	Sleep(10);
    }
    

    Ist aber nicht sehr gut programmiert, vor allem wird momentan auch einfach nur einmal am Ende gleich der komplette String in das Feld geschrieben, das will ich ja eigentlich auch nicht. Komm aber heute nicht mehr auf die Lösung wie das jetzt hier richtig zu machen ist, der Tag ist schon zu lang. Also wenn da auch noch einer einen Tip hat freue ich mich. 🙂


  • Mod

    EM_REPLACESEL um Text anzuhängen ist wohl die bessere Lösung, weil es auch das Caret verschiebt.
    Aber dennoch wird die Schleife so schnell laufen, dass der User nicht "sieht" das etwas angehängt wird.

    Warum ist dieser Effekt erwünscht, wenn der Benutzer doch in Millisekunden alles sieht.

    Ansonsten läuft da auch ohne Messageloop nichts, denn nur bei laufender MessageLoop werden Fenster aktualisiert oder zu erzwingst das neu zeichnen mit UpdateWindow.



  • Da musst du wohl mit SetSel oder SetCurSel (musste mal nachsehen, was du genau beim Edit Control nehmen musst) den Cursor an das rechte Ende verschieben. So ist ja dann der Überschuss nach links rausgeschoben.



  • Danke schonmal für eure Antworten. Ich habe versucht das jetzt so zu machen wie ihr gesagt habt, eigentlich klappt es auch ganz gut, aber der Text wird eben einfach nicht nach Links verschoben. Ich habe versucht die Parameter von SetSel(); zu variieren, aber es hat nie geklappt. Habt ihr noch einen Tip?
    Hier nochmal mein neuer Code:

    int i[25];
    	CString stri[25];
    	CString strTest;
    
    	for (int j = 0; j < 25; j++)
    	{
    		i[j] = rand() %2;
    		stri[j].Format("%d", i[j]);
    		strTest += stri[j];
    		m_strRandomData.SetFocus();
    		m_strRandomData.SetSel(strTest.GetLength());
    		SetDlgItemText(IDC_E_RANDOM, strTest);
    		UpdateWindow();
    		Sleep(500);
    	}
    

  • Mod

    Liest Du eigentlich was man Dir schreibt?
    verwende ReplaceSel oder EM_REPLACESEL!



  • Entschuldige bitte, ich wusste eben zuerst nicht wie ich das anwenden soll, deswegen hab ich es erst anders versucht. Habs damit jetzt hinbekommen, Danke!


Anmelden zum Antworten