Zum Inhalt springen

MFC: falsche formatierte Ausgabe??


Kitty82

Empfohlene Beiträge

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 :rolleyes:

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

Link zu diesem Kommentar
Auf anderen Seiten teilen

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.

Link zu diesem Kommentar
Auf anderen Seiten teilen

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 :rolleyes: )

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

Link zu diesem Kommentar
Auf anderen Seiten teilen

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

Link zu diesem Kommentar
Auf anderen Seiten teilen

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.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...