Wstawianie znaku w Visual C++


(Bartek 525) #1

Używam MS Visual C++ 2005 Express Edition. Jak to zrobić, żeby po kliknięciu na przycisk do pola tekstowego (RichTextBox) był wstawiany znak :?:

this->RichTextBox->Text = this->RichTextBox->Text + L"X"

Powyższy kod powoduje jedynie "doklejenie" znaku X na końcu tekstu i przeskoczenie kursora na początek pola. Mi chodzi o to, aby znak był wstawiany w miejscu, w którym miga kursor.


(Ryan) #2
richTextBox1->Text =

    richTextBox1->Text->Substring

    (

        0,

        richTextBox1->SelectionStart

    ) +

    L"X" + 

    richTextBox1->Text->Substring

    (

        richTextBox1->SelectionStart +

        richTextBox1->SelectionLength

    );

(Bartek 525) #3

A jak zrobić, żeby po wstawieniu znaku kursor migał po wstawionym znaku, a nie na początku pola?


(Ryan) #4

Nie możesz poeksperymentować? Programowanie to nie sztuka zadawania pytań na forum.

int iStart = richTextBox1->SelectionStart;

  int iLength = richTextBox1->SelectionLength;


  richTextBox1->Text =

    richTextBox1->Text->Substring( 0, iStart) +

    L"X" + // wstawiany tekst

    richTextBox1->Text->Substring( iStart + iLength );

  richTextBox1->SelectionStart = iStart + 1; // 1 = dlugosc wstawianego tekstu

Tak swoją drogą to nie rozumiem dlaczego używasz zarządzanego C++. Jest IMO tylko jeden uzasadniony przypadek, kiedy powinno się pisać w zarządzanym C++ a Ty najprawdopodobniej nie piszesz żadnego wrappera COM.


(Bartek 525) #5

Dzięki, wszystko działa.

Wiem, z reguły eksperymentuję, ale (co pewnie widać, po zadawanych pytaniach) jestem początkującym programistą amatorem i nie zawsze ekperymenty przynoszą oczekiwany rezultat, tak było w tym przypadku.


(Ryan) #6

Nie szkodzi. VS i znajomość angielskiego są Twoimi przyjaciółmi. SelectionStart jak sama nazwa wskazuje jest miejscem początku zaznaczenia w kontrolce, SelectionLength długością zaznaczenia. Jeśli nic nie jest zaznaczone to długość wynosi 0 a start to miejsce, gdzie miga kursor. Wystarczy sprawdzić, czy SelectionStart jest tylko do odczytu, czy do odczytu i zapisu (VS takie rzeczy podpowiada). Jeśli można zmienić wartość to znaczy, że można przenieść kursor. Tak można będąc nawet bardzo początkującym dojść do wielu ciekawych właściwości kontrolki RTE. :slight_smile: