ERLEDIGT
NEIN
NEIN
ANTWORTEN
15
15
ZUGRIFFE
1018
1018
EMPFEHLEN
-
Hallo zusammen !
Mir brennen folgende Fragen auf der Seele:
1. Darf ich überhaupt einer member-Variablen einer CEdit-Box den Typ 'CRichEditCtrl' geben ?
Wenn ja:
2. Ich krieg's nicht hin, einen Bereich in der Box zu selektieren und dann die 'SetSelectionCharFormat ' durchzuführen ! Ich kriege als Rückgabewert immer wieder 0....d.h. die Funktion war nicht erfolgreich ! Ich konnte aber keine Fehler entdecken !
Hier mal ein kleiner Auszug aus meinem Programm:
struct _charformat cf;
int start = 15;
int ende = 150;
....
m_cText.SetSel ( start, ende );
cf.crTextColor = 0x000000FF;
m_cText.SetSelectionCharFormat( cf );
Kann mir jemand weiter helfen und mir sagen, warum das nicht funktioniert ?
Darüber wäre ich sehr dankbar
Viele Grüße,
Kai
-
10.02.04 09:17 #2
- Registriert seit
- Jul 2003
- Ort
- Duisburg (NRW)
- Beiträge
- 1.788
Zu 1.:
Ich denke schon.
Zu 2.:
Aus der MSDN:
Aus dem zweiten Satz geht hervor, dass du anscheinend noch ein Maskenbit setzen musst, damit die Funktion weiss, welches Attribut die SetSelectionCharFormat() ändern soll - in deinem Fall das Bit für die Farbe.Call this function to set the character formatting attributes for the text in the current selection in this CRichEditCtrl object. Only the attributes specified by the dwMask member of cf are changed by this function.
Probier mal das:
Code :1 2 3
cf.crTextColor = 0x000000FF; cf.dwMask = CFM_COLOR; // Maskenbit für Farbe setzen m_cText.SetSelectionCharFormat( cf );
Ich hoffe, es hilft dir weiter.Geändert von Kachelator (11.02.04 um 10:48 Uhr)
Chor: "Wir sind der Chor, und wir stimmen zu. Wir stimmen zu, wir stimmen zu, wir stimmen zu."
-
Hallo !
Das hat leider so nicht geklappt !
Selbst wenn ich das dwMask-Flag auf CFM_COLOR setze funktioniert es nicht !
Ich kann mir das einfach nicht erklären !
Es kann ja auch nicht sein, daß durch ein "UpdateData" die Selektierung wieder auf schwarz gesetzt wird, da ja von vornherein die Funktion 'm_cText.SetSelectionCharFormat(cf)' eine NULL zurückliefert ! ("Nonzero if successful; otherwise, 0.")
Ich bin am Verzweifeln
Kann mir jemand helfen ?
Viele Grüße,
Kai
-
11.02.04 10:53 #4
- Registriert seit
- Jul 2003
- Ort
- Duisburg (NRW)
- Beiträge
- 1.788
Das ist aus der MSDN (CHARFORMAT). Ist mir eben noch aufgefallen. Hast du das eingetragen vor dem Aufruf von SetSelectionCharFormat()?cbSize
Size in bytes of this structure. Must be set before passing the structure to the rich edit control.
Sollte theoretisch so klappen:
Code :1 2 3 4
cf.crTextColor = 0x000000FF; cf.cbSize = sizeof( CHARFORMAT ); // struct-Größe setzen cf.dwMask = CFM_COLOR; // Maskenbit für Farbe setzen m_cText.SetSelectionCharFormat( cf );
Es kann sein, dass die Funktion es als Erfolg auffasst, wenn man ihr scheinbar nichts zu tun gibt und sie genau das erledigt."Nonzero if successful; otherwise, 0."Chor: "Wir sind der Chor, und wir stimmen zu. Wir stimmen zu, wir stimmen zu, wir stimmen zu."
-
Also..... ich muß leider weiterhin nerven
Indem ich die normale Edit-Box durch eine RichEditBox ersetzt habe und in der InitInstance-Funktion 'AfxInitRichEdit' aufrufe, habe ich es jetzt wenigstens erreicht, daß die Funktion SetSelectionCharFormat(cf) eine EINS zurück liefert
D.h. sie tut immerhin schon was
ABER: Mit meinem folgenden Code...
Code :1 2 3 4 5 6 7 8
m_cText.SetSel(anfangSD-1, anfangSD-1 + (sequenz.GetLength())); // anfangSD ist hier 149 // sequenz ist ein von mir erzeugter CString cf.crTextColor = 0x000000FF; cf.cbSize = sizeof( CHARFORMAT ); cf.dwMask = CFM_COLOR | CFM_BOLD; cf.dwEffects = CFE_BOLD; m_cText.SetSelectionCharFormat(cf);
...tut sich in meiner Box trotzdem gar nichts ! Weder eine Selektion, noch ändert sich die Farbe, noch wird die Schrift dick !
Ich weiß jetzt echt nicht mehr weiter !
Trotzdem viele Grüße und vielleicht fällt Euch noch was dazu ein
Kai
-
11.02.04 12:28 #6
- Registriert seit
- Jul 2003
- Ort
- Duisburg (NRW)
- Beiträge
- 1.788
Klappt das denn mit der Selektion? *dumm frag*
Chor: "Wir sind der Chor, und wir stimmen zu. Wir stimmen zu, wir stimmen zu, wir stimmen zu."
-
Also, wenn ich in meinem Code von oben
m_cText.SetSel(0, -1);
eingebe, dann funktioniert's wunderbar D.h. er markiert den kompletten Inhalt der RichEditBox, macht ihn fett und rot
Da ich aber KEIN Ergebnis kriege, wenn ich mit meinen Variablen arbeite, muß es logischerweise irgendwie an denen liegen !
Aber um das herauszufinden, bin ich wohl auf mich allein gestellt !
Auf jeden Fall möchte ich mich gaaanz herzlich für Dein Interesse und Dein Engagement bedanken
....Aber noch eine Frage zum Schluß: Ich habe folgenden Code
Code :1 2 3 4 5 6
01 LPTSTR lpStr = sequenz.GetBuffer(sequenz.GetLength()); 02 shine.lpstrText = lpStr; 03 sequenz = ""; 04 m_cText.FindText(0, &shine); 05 m_cText.SetSel(shine.chrgText);
"shine" ist in dem Fall ein FINDTEXTEX, um den String "sequenz" in meiner RichEditBox zu finden.
Jetzt die Frage: Wie kann ich es verhindern, daß in Zeile 03 'shine.lpstrText' ebenfalls geleert wird ? Weil in dem Fall kann er ja nichts finden und nichts selektieren, wenn er keinen Suchstring mehr hat !
Viele Grüße und nochmals DANKE,
Kai
-
11.02.04 13:25 #8
- Registriert seit
- Jul 2003
- Ort
- Duisburg (NRW)
- Beiträge
- 1.788
Kopier dir den String in einen (temporären) CString.
Vielleicht kannst du auch direkt mit dem CString weiterarbeiten anstelle von lpStr. Schau dir einfach mal die Member von CString an.Code :1 2 3
CString strTemp = sequenz.GetBuffer(sequenz.GetLength()); LPTSTR lpStr = LPCTSTR( strTemp ); // weiter wie gehabt
Chor: "Wir sind der Chor, und wir stimmen zu. Wir stimmen zu, wir stimmen zu, wir stimmen zu."
-
Das geht irgendwie nicht !
Bei "LPTSTR lpStr = LPCTSTR (strTemp);" sagt er:
'const char *' kann nicht in 'char *' konvertiert werden
Und bei ""LPTSTR lpStr = LPTSTR (strTemp); sagt er:
'class CString' kann nicht in 'char *' konvertiert werden
Gibt's noch irgendwie eine andere Möglichkeit ? So langsam macht mich dieses Problem echt fertig !
Gruß, Kai
-
11.02.04 13:45 #10
- Registriert seit
- Jul 2003
- Ort
- Duisburg (NRW)
- Beiträge
- 1.788
Ach richtig! Du brauchst einen konstanten Pointer - das sollte doch in Ordnung sein, da du nur darin suchen willst, oder?
Code :1
LPCTSTR lpStr = LPCTSTR( strTemp ); // lpStr ist jetzt ein konstanter Pointer
Chor: "Wir sind der Chor, und wir stimmen zu. Wir stimmen zu, wir stimmen zu, wir stimmen zu."
-
LEIDER verlangt diese FINDTEXTEX-stucture einen "LPSTR" und deshalb kommt bei dem Code
auch wieder die Fehlermeldung "'const char *' kann nicht in 'char *' konvertiert werden"Code :1 2 3 4
CString strTemp = sequenz.GetBuffer(sequenz.GetLength()); LPCTSTR lpStr = LPCTSTR (strTemp); shine.lpstrText = lpStr;
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 ?!
-
11.02.04 15:26 #12
- Registriert seit
- Jul 2003
- Ort
- Duisburg (NRW)
- Beiträge
- 1.788
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!
Chor: "Wir sind der Chor, und wir stimmen zu. Wir stimmen zu, wir stimmen zu, wir stimmen zu."
-
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 !
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 !
-
11.02.04 17:25 #14
- Registriert seit
- Jul 2003
- Ort
- Duisburg (NRW)
- Beiträge
- 1.788
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.Code :1 2
CString strTemp = sequenz.GetBuffer(sequenz.GetLength()); LPTSTR lpStr = const_cast<LPTSTR>( LPCTSTR (strTemp) );
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.Chor: "Wir sind der Chor, und wir stimmen zu. Wir stimmen zu, wir stimmen zu, wir stimmen zu."
-
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
Ähnliche Themen
-
Flackern im CRichEditCtrl
Von jokey2 im Forum VisualStudio & MFCAntworten: 9Letzter Beitrag: 14.05.07, 15:00 -
CRichEditCtrl per Hand eingefügt.
Von NinjaOne im Forum VisualStudio & MFCAntworten: 4Letzter Beitrag: 18.08.05, 20:11 -
CRichEditCtrl und scrolling
Von NinjaOne im Forum VisualStudio & MFCAntworten: 6Letzter Beitrag: 18.08.05, 20:09 -
Font und Fontfarbe im CRichEditCtrl ändern
Von NinjaOne im Forum VisualStudio & MFCAntworten: 5Letzter Beitrag: 29.07.05, 23:37 -
MFC CRichEditCtrl
Von Christian Fein im Forum C/C++Antworten: 8Letzter Beitrag: 12.11.01, 12:41





Zitieren
Login






