'Selektieren in CRichEditCtrl'

kscha

Mitglied
LEIDER verlangt diese FINDTEXTEX-stucture einen "LPSTR" und deshalb kommt bei dem Code
Code:
CString strTemp = sequenz.GetBuffer(sequenz.GetLength());
LPCTSTR lpStr = LPCTSTR (strTemp);

shine.lpstrText = lpStr;
auch wieder die Fehlermeldung "'const char *' kann nicht in 'char *' konvertiert werden" :mad:
Dieses lpStr ist das, nach dem ich suchen will !

Meinst Du ich kann das irgendwie mit einem char-Pointer lösen ? Aber dann ist dessen Inhalt auch weg, sobald ich "sequenz" leere, oder ?!
 

Kachelator

Peter Jerz
Ich weiss leider nicht genau, was du vorhast und wofür die FINDTEXTEX genau gut ist. Wird den der Text verändert? Wenn nicht, kannst du die Konstantheit ja auch (quick and dirty) wegcasten. Aber nur, wenn du sicher bist, kein Unheil anzurichten! :)
 

kscha

Mitglied
Ich versuche mal so kurz wie möglich zu erklären, was ich vor habe:

Ich lese eine Text-Datei zeichenweise aus (es handelt sich dabei um eine RNA-Sequenz... sowas wie "AGGCAGACCCG..."... aber das ist ja unwichtig). Und schreibe diese einzelnen Buchstaben in meine RichEditBox (über die CString-Membervariable m_sStruktur). In der Variablen "sequenz" speichere ich kurzzeitig eine ganz bestimmte Sequenz. Da das eben eine ganz bestimmte Sequenz ist, will ich sie in dem Wust von Buchstaben wieder raussuchen (mit FindText, oder von mir aus auch mit SetSel(start, ende), oder wie auch immer) und rot highlighten..... aber genau das kriege ich einfach um's Verrecken nicht hin ! :mad:

Vielleicht gehe ich die ganze Sache ja auch völlig falsch an, aber ich bin so langsam mit meinem Latein am Ende !
Vielleicht fällt Dir ja noch irgendwas ein, was ich noch probieren könnte ?! Wie meinst Du das mit dem "wegcasten" ? Und welches "Unheil" könnte da denn passieren ? Einen Versuch wäre es bestimmt wert !
 

Kachelator

Peter Jerz
Code:
CString strTemp = sequenz.GetBuffer(sequenz.GetLength());
LPTSTR lpStr = const_cast<LPTSTR>( LPCTSTR (strTemp) );
Das da oben erzwingt eine Umwandlung in einen nichtkonstanten Pointer. Das ist quasi ein fieser Hack und sollte nur in Fällen gemacht werden, wenn man sicher sein kann, dass man keine Dummheiten macht. Ich benutze es gelegntlich, wenn ich mich mit einer API mit miesem Interface rumärgern muss. Kann sein, dass es bei dir ein ähnlicher Fall ist.

Versuch es (auf eigene Gefahr) mal. Wenn es sich so kompilieren lässt, bist du schon mal einen Schritt weiter.


Was deine Herangehensweise an das Sequenzproblem anbelangt: Um deinen Ansatz zu beurteilen, müsste ich mich richtig reinknien. Aber dazu fehlt mir leider die Zeit.
 

kscha

Mitglied
Halli Hallo !

Also erst mal zwei Sachen vorweg:

1. Das mit dem "unkonstanten" Pointer hat nicht geklappt ! Lies sich zwar übersetzen, ist aber zur Laufzeit abgeschmiert !
2. Es war die ganze Zeit RICHTIG.... es hat eigentlich funktioniert, aber das ein oder andere "UpdateData" an der falschen Stelle (in unterschiedlichen Funktionen) hat die Formatierung wieder aufgehoben !

Was habe ich jetzt gemacht ?
--> Ich habe 'start' und 'ende' global definiert und rufe jetzt in jeder Funktion, die ein UpdateData benutzt, hinterher meine "m_cText.SetSelectionCharFormat"-Funktion auf !
Das ist zwar absolut HÄSSLICHER Stil, aber es funktioniert..... und das ist mir nach mehr als zwei Tagen Rumtüftelei und Frust das Wichtigste :)
Vielleicht habe ich irgendwann mal die Muse mich nochmal damit auseinander zu setzen und das noch schöner zu schreiben...... ;-)

Nochmal vielen vielen vielen Dank für Deine Unterstützung !

Viele Grüße,

Kai
 

Kachelator

Peter Jerz
1. Das mit dem "unkonstanten" Pointer hat nicht geklappt ! Lies sich zwar übersetzen, ist aber zur Laufzeit abgeschmiert !
Ja, genau so was meinte ich damit, als ich von Risiken sprach... :)

Das ist zwar absolut HÄSSLICHER Stil, aber es funktioniert..... und das ist mir nach mehr als zwei Tagen Rumtüftelei und Frust das Wichtigste
Ich muss gestehen, dass mich die Umstände ebenfalls gelegentlich zu uneleganten Lösungen getrieben haben. :) Aber vielleicht fällt dir ja beizeiten wirklich noch eine günstigere Lösung ein. Zum Beispiel frage ich mich, ob es nicht möglich ist, den Aufruf direkt in UpdateData reinzubekommen. Ist das eine virtuelle Funktion? Kannst du sie überschreiben? Sieh doch mal nach.


Nochmal vielen vielen vielen Dank für Deine Unterstützung !
Gern geschehen! :)