Kitty82 Geschrieben 3. November 2004 Geschrieben 3. November 2004 Hi Leute, eigentlich ist mein "Problem" ganz einfach zu lösen, aber ich stehe schon seit über einer dreiviertel Stunde auf 'n Schlauch und finde meinen Fehler einfach nicht Ich habe ein Program welches Dezimalzahlen vergleicht und sobald etwas nicht übereinstimmt, er die Zahlen sowie deren Binärcode ausgeben soll. Soweit gibt es ja keine Probleme, alles funktioniert wie es soll, nur klappt es nicht so recht mit der formatierten Ausgabe meines Binärcodes im RichEditFeld. Ich möchte gern die Bitstellen, die falsch sind, farblich darstellen. Damit habe ich auch keine Probleme - eigentlich. Ich weiß nicht was ich falsch mache, aber er markiert mir ständig(!) die falschen Bitstellen. Gut, natürlich dachte ich zuerst, dass mein Anfangposition falsch ist. Aber ich hab sie mehrmals auf verschiedenen weisen untersucht, die stimmt! Hier erstmal mein Codeausschnitt, inder ich eigentlich meinen Binarcode formatiere: m_ctrlAusgabeT.SetSel(pos_ch2, pos_ch2+1); ZeroMemory(&Cfm, sizeof(Cfm)); Cfm.cbSize = sizeof(CHARFORMAT); Cfm.dwMask = CFM_COLOR; Cfm.crTextColor = RGB(217,19,19); //Farbe: Rot m_ctrlAusgabeT.SetSelectionCharFormat(Cfm); //m_ctrlAusgabeT = ctrlVariable von meinem Richeditfeld //pos_ch2 = Position, an der er beginnen soll zu markieren raus kommt follgendes: [COLOR=Red]13[/COLOR] 0000 0000 0000 11[COLOR=Red]0[/COLOR]1 | richtig wäre: [COLOR=Red]13[/COLOR] 0000 0000 0000 110[COLOR=Red]1[/COLOR] | naja, ich dachte dann, wenn ich SetSel(pos_ch2+1, pos_ch2+2) übergebe, dass es dann stimmen muss. Verstanden hätte ich es nicht, aber optisch müsste es ja in Ordnung sein. Ist wohl nicht so... das kommt raus: [COLOR=Red]13[/COLOR] 0000 0000 0000 110[COLOR=Red]1 |[/COLOR] dadurch war bei mir follgendes zu sehen --> :confused: :eek: Wie funktioniert das jetzt?! Und das dumme ist, ich hab SetSel in meinem Programm öfters benutzt und ausser dieser Fall funktioniert alles so wie es soll!? Hab ich hier vergessen irgendwas zu bedenken? Aber nochmal kurz, pos_ch2 ist zu 100% korrekt, hab's selber nachgezählt :mod: Hoffe, ihr könnt mir helfen und sagen wo mein Fehler ist... bin schon mal zutiefst dankbar :e@sy Gruß Kitty Zitieren
Glen Coe Geschrieben 3. November 2004 Geschrieben 3. November 2004 void CRichEditCtrl::SetSel( long nStartChar, long nEndChar ); nStartChar = Zero-based index of the first character for the selection. nEndChar = Zero-based index of the last character for the selection. Würde das nicht bedeuten, dass man für die Markierung eines einzelnen Zeichens zweimal denselben Index angibt? Gruss, Glen Coe. Zitieren
MAJOR_TOM Geschrieben 4. November 2004 Geschrieben 4. November 2004 Gibst du das Zeichen "|" aus, NACHDEM du die Bitstellen ausgegeben hast? Wenn ja, dann vergisst du die Textfarbe wieder zurückzustellen. Zitieren
Kitty82 Geschrieben 4. November 2004 Autor Geschrieben 4. November 2004 Hallole, also... Würde das nicht bedeuten, dass man für die Markierung eines einzelnen Zeichens zweimal denselben Index angibt? hab ich auch schon probiert --> ohne Erfolg. Gibst du das Zeichen "|" aus, NACHDEM du die Bitstellen ausgegeben hast? Wenn ja, dann vergisst du die Textfarbe wieder zurückzustellen. das kann eigentlich nicht sein ... oder? Es ist so, dass schon bereits alles in meinem RichEditFeld drin steht und ich es nachträglich farblich veränder. Die "13" färbe ich davor ebenfalls rot und da funktioniert es. Dieses "|" kommt eigentlich auch zwischen der 13 und der Binärzahl vor (hab's hier aber vergessen ) Auf jeden Fall, färbt sich dort das "|" nicht mit rot. Ich weiß es klingt dumm, aber kann es daran liegen, dass nach der Binärstellen ein Tab (\t) kommt? Aber warum färbt er dann dieses "|" mit?? Ich hab gestern abend nochmal überprüft ob mein pos_ch2 stimmt -> Jep, stimmt! Ach, und danke für eure schnelle Antwort + Hilfe Gruß Kitty Zitieren
MAJOR_TOM Geschrieben 4. November 2004 Geschrieben 4. November 2004 Magst du vielleicht ein bisserl mehr Code posten? Habs bei mir nämlich genau so ausprobiert => funktioniert bestens! Zitieren
Kitty82 Geschrieben 4. November 2004 Autor Geschrieben 4. November 2004 das ist es ja, überall anders funktioniert es bei mir ja auch :confused: :confused: gut, vielleicht hilft es, wenn ich ein wenig mehr Code reinsetze. Weiss nicht genau ab wo, aber ich glaub, ab hier ist es nützlich. Mein Richeditfeld sieht zuerst so aus (unformatiert): Zahl | Binärcode | mögliche(r) Fehler ========================================================= 12 | 0000 0000 0000 1100 | 13 | 0000 0000 0000 1101 | Die "=" gehen normalerweise komplet durch, weiss nicht warum er es mir hier so dastellt? mit follgenden Code formatiere ich es: //Formatierung Zahlen pos_ch = worktext.ReverseFind('='); pos_ch2 = worktext.Find('|', pos_ch); //12 wird "gefärbt" m_ctrlAusgabeT.SetSel(pos_ch+1,pos_ch2); ZeroMemory(&Cfm, sizeof(Cfm)); Cfm.cbSize = sizeof(CHARFORMAT); Cfm.dwMask = CFM_COLOR; Cfm.crTextColor = RGB(35,201,47); //Farbe = grün m_ctrlAusgabeT.SetSelectionCharFormat(Cfm); //13 wird "gefärbt" pos_ch = worktext.Find('\n', pos_ch2); pos_ch2 = worktext.Find('|', pos_ch); m_ctrlAusgabeT.SetSel(pos_ch+1,pos_ch2); Cfm.cbSize = sizeof(CHARFORMAT); Cfm.dwMask = CFM_COLOR; Cfm.crTextColor = RGB(217,19,19); //Frabe = rot m_ctrlAusgabeT.SetSelectionCharFormat(Cfm); // "färben" der falschen Bitstellen pos_ch2 += 3; //Startposition von Binarcode pos_ch = pos_ch2; VecC.codeIter = VecC.VecCode.begin(); string wrCopy = (*VecC.codeIter).o_wrCopy.to_string(); //dadurch bekommt wrCopy = "0000000000000001" // 1 = bedeutet, falsche Bitstelle an dieser Position //suche in wrCopy nach "1"er for(int i=0; i<16; i++) { pos_ch2 = pos_ch; if( wrCopy[i] =='1') { if(i <= 4) pos_ch2 += i+1; if(i >4 && i <=8) pos_ch2 += i+2; //ein Lehrzeichen if(i >8 && i <=12) pos_ch2 += i+3; //zwei Lehrzeichen if(i >12 && i <=15) pos_ch2 += i+4; //drei Lehrzeichen m_ctrlAusgabeT.SetSel(pos_ch2+1, pos_ch2+2); ZeroMemory(&Cfm, sizeof(Cfm)); Cfm.cbSize = sizeof(CHARFORMAT); Cfm.dwMask = CFM_COLOR; Cfm.crTextColor = RGB(217,19,19); m_ctrlAusgabeT.SetSelectionCharFormat(Cfm); } } okay und danach sieht es dann wie folgt aus: Zahl | Binärcode | mögliche(r) Fehler ========================================================== [COLOR=Lime]12[/COLOR] | 0000 0000 0000 1100 | [COLOR=Red]13[/COLOR] | 0000 0000 0000 110[COLOR=Red]1 |[/COLOR] Hoffe, das hilft jemanden weiter und er kann mir sagen, wo mein Fehler liegt... Danke + Gruß Kitty Zitieren
Kitty82 Geschrieben 4. November 2004 Autor Geschrieben 4. November 2004 okay ... hat sich erledigt. Hab's rausgefunden Ich verstehe zwar nicht warum , aber hauptsache es funktioniert: SetSel(pos_ch2, pos_ch2-1) trotzdem nochmals vielen Dank für eure hilfe Gruß Kitty Zitieren
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.