If( CHARFORMAT1 == CHARFORMAT2 )
-
dass das nicht so simpel ist, habe ich mir gedacht.
Nun entstand:bool isEqualCharFormat( CHARFORMAT form1, CHARFORMAT form2 ) { if( form1.cbSize == form2.cbSize && form1.dwMask == form2.dwMask && form1.dwEffects == form2.dwEffects && form1.yHeight == form2.yHeight && form1.yOffset == form2.yOffset && form1.crTextColor == form2.crTextColor && form1.bCharSet == form2.bCharSet && form1.bPitchAndFamily == form2.bPitchAndFamily) { printf( "%d == %d\n", form1.crTextColor, form2.crTextColor ); return true; } return false; }und wie ihr erkennen könnt, prüfe ich schon die TextColor, weil die nicht hin haut, die ist immer 0 an;
auch mit %x zeigt er nichts an.Was ich machen will: ich will alle buchstaben anzeigen die gleich formmatiert sind also:
asdfasdfassdfasd1adsfasdfasdf == "asdfasdfassdfasd1"
so halt.
Könnt ihr mir da Helfen?

-
@pushing, while searching help
i = aktPos = 0; while( i < 1024 && !isEnd ) { myRange.cpMin = aktPos; myRange.cpMax = aktPos+1; SendMessage( myPaper, EM_EXSETSEL, 0, (LPARAM)&myRange ); SendMessage( myPaper, EM_GETSELTEXT, 0, (LPARAM)&buff+i ); SendMessage( myPaper, EM_GETCHARFORMAT, SCF_SELECTION, (LPARAM)&actuallyFormat ); aktPos++; myRange.cpMin = aktPos; myRange.cpMax = aktPos+1; SendMessage( myPaper, EM_EXSETSEL, 0, (LPARAM)&myRange ); SendMessage( myPaper, EM_GETSELTEXT, 0, (LPARAM)&buff+i+1 ); SendMessage( myPaper, EM_GETCHARFORMAT, SCF_SELECTION, (LPARAM)&nextFormat ); if( buff[i+1] != 0 && memcmp( &actuallyFormat, &nextFormat, sizeof(CHARFORMAT) ) ) i++; else { buff[i+1] = 0; isEnd = true; } } printf( "%s\n", buff );myPaper = RichEdit.
Ich will buchstabe mit buchstabe+1 vergleichen, wenn die charformat e gleich sind buchstabe = buchstbe+1 und neu starten, wenn nicht dann ende.allerdings gibt memcmp nicht das was ich haben will, da sich aus
"aaaaa" einfach nur "a" ergibt, also er beid em ersten vergleich schon abbricht.Irgend eine Idee?
[edit]ich will quasi in ein TXT file schrieben, und es laden können, aber mit formatierung... also quasi in form von HTML, aber dann gleich umwandeln un anzeigen.

-
1. memcmp gibt bei gleichheit 0
2. ändere Deine beiden Zeilen mit EM_GETSELTEXT
zuSendMessage( myPaper, EM_GETSELTEXT, 0, (LPARAM)(buff+i) );und
SendMessage( myPaper, EM_GETSELTEXT, 0, (LPARAM)(buff+i+1) );
-
eingabe: addf
ausgabe: asdf
sollte er nicht nur "as" ausgeben?Auch mit deinen verbessserten Zeilen funktioniert es nicht:
i = aktPos = 0; while( i < 1024 && !isEnd ) { myRange.cpMin = aktPos; myRange.cpMax = aktPos+1; SendMessage( myPaper, EM_EXSETSEL, 0, (LPARAM)&myRange ); SendMessage( myPaper, EM_GETSELTEXT, 0, (LPARAM)(buff+i) ); SendMessage( myPaper, EM_GETCHARFORMAT, SCF_SELECTION, (LPARAM)&actuallyFormat ); aktPos++; myRange.cpMin = aktPos; myRange.cpMax = aktPos+1; SendMessage( myPaper, EM_EXSETSEL, 0, (LPARAM)&myRange ); SendMessage( myPaper, EM_GETSELTEXT, 0, (LPARAM)(buff+i+1) ); SendMessage( myPaper, EM_GETCHARFORMAT, SCF_SELECTION, (LPARAM)&nextFormat ); if( buff[i+1] != 0 && memcmp( &actuallyFormat, &nextFormat, sizeof(CHARFORMAT) ) == 0 ) i++; else { buff[i+1] = 0; isEnd = true; } } printf( "|-%s-|\n", buff );myPaper = (HWND)[RichEdit]
actuallyFormat, nextFormat = CHARFORMAT
isEnd = BOOL
i, aktPos = intAuch hier gibt er alles aus.
Das ist doch eigntlich unmöglich oder!?Soll ich die einzelnen member der struktur durch memcmp vergleichen?
[edit]
bool isEqualCharFormat( CHARFORMAT *form1, CHARFORMAT *form2 ) { bool sameBold = false, sameUnderline = false, sameItalic = false; if( form1->dwEffects & CFM_UNDERLINE && form2->dwEffects & CFM_UNDERLINE ) { sameUnderline = true; printf( "underline\n" ); } else if( !( form1->dwEffects & CFM_UNDERLINE ) && !( form2->dwEffects & CFM_UNDERLINE ) ) { sameUnderline = true; printf( "!underline\n" ); } if( form1->dwEffects & CFM_ITALIC && form2->dwEffects & CFM_ITALIC ) sameItalic = true; else if( !( form1->dwEffects & CFM_ITALIC ) && !( form2->dwEffects & CFM_ITALIC ) ) sameItalic = true; if( form1->dwEffects & CFM_BOLD && form2->dwEffects & CFM_BOLD ) sameBold = true; else if( !( form1->dwEffects & CFM_BOLD ) && !( form2->dwEffects & CFM_BOLD ) ) sameBold = true; /*if( form1->dwMask == form2->dwMask && form1->dwEffects == form2->dwEffects && form1->yHeight == form2->yHeight && form1->yOffset == form2->yOffset && form1->crTextColor == form2->crTextColor && form1->bCharSet == form2->bCharSet && form1->bPitchAndFamily == form2->bPitchAndFamily )*/ if( sameBold && sameItalic && sameUnderline ) { printf( "." ); return true; } return false; }damit vergleiche ich...
eingabe: asdf
ausgabea <-> s !underline .s <-> d !underline .d <-> f !underlinewarum..?
d und f sind unterstrichen
-
Es muss doch möglich sein ein Format eines Buchstaben zu enziffern.
Ich muss doch die chance haben, irgendwie zu analysieren ob die Markierte stelle unterstrichen ist... komischerweise:
myFormat.cbSize = sizeof(CHARFORMAT); actuallyFormat.cbSize = sizeof(CHARFORMAT); SendMessage( myPaper, EM_GETCHARFORMAT, SCF_SELECTION, (LPARAM)&actuallyFormat ); myFormat.dwMask = CFM_ITALIC; if( !( actuallyFormat.dwMask & CFM_ITALIC ) || !( actuallyFormat.dwEffects & CFE_ITALIC ) ) myFormat.dwEffects = CFE_ITALIC; else myFormat.dwEffects = 0; SendMessage( myPaper, EM_SETCHARFORMAT, SCF_SELECTION, (LPARAM)&myFormat );Hier kann ich Quasi umschalten, zwischen Italic und nicht Italic...
Wieso geht das erweitert nicht:
if( form1->dwEffects & CFM_ITALIC && form2->dwEffects & CFM_ITALIC ) sameItalic = true; else if( !( form1->dwEffects & CFM_ITALIC ) && !( form2->dwEffects & CFM_ITALIC ) ) sameItalic = true;???
-
sameItalic = (form1->dwEffects & CFM_ITALIC) == (form2->dwEffects & CFM_ITALIC);
-
Danke für diene Antwort, allerdings würde ich gerne nicht nur fertigen Code, sondern eine Erklärung...
sameItalic = (form1->dwEffects & CFM_ITALIC) == (form2->dwEffects & CFM_ITALIC);entspricht
if( (form1->dwEffects & CFM_ITALIC) == (form2->dwEffects & CFM_ITALIC) ) sameItalic = true; else sameItalic = false???
-
lippoliv schrieb:
sameItalic = (form1->dwEffects & CFM_ITALIC) == (form2->dwEffects & CFM_ITALIC);entspricht
if( (form1->dwEffects & CFM_ITALIC) == (form2->dwEffects & CFM_ITALIC) ) sameItalic = true; else sameItalic = false???
Ja.
Generell kannst du
if( bedingung ) something = true; else something = false;einfach so schreiben:
something = bedingung;
-
Sehr geil danke...
Allerdings darf ich mitteilen... Es funktioniert nicht...
Es sind ca. 800 Zeilen quellcode, ka ob ich die bei Nopaste ma posten soll und du dich da durchwurschteln willst, aber ich erkläre dir auf jeden ersma wie ich das mache(n will):
Ich Selektiere den ersten buchstaben(SetSel) und hole mir sein CHARFORMAT, selektiere den darauffolgenden und hole mir auch dort ein CHARFORMAT.
Dann sollen diese beiden verglichen werden (zwischendrinn schreib ich die übrigens in ein array[die buchstaben]) wenn sie gleich sind wird i++ gemacht; sinn ist:
//pseudo buff[j] = erster buchstabe; buff[j+1] = zweiter bruchstabe;und in der nächsten runde das selbe, da selektiere ich den i-ten buchstaben und den i+1ten buchstaben, und vergleiche... sieht so aus(die kursiven werden verglichen)
i=0;
hallo
->buff[j(0)] = h;
->buff[j+1(1)] = a;
j++;(j=1)
hallo
->buff[j(1)] = a;
->buff[j+1(2)] = l;
j++;(j=2)
ha*ll*o
->buff[j(2)] = l;
->buff[j+1(3)] = '\0';<< sind verschieden...dann soll von dem letzten buchstaben die formatierung gespeichert werden.. dann würde aus hallo der text:
hal'[:b'lo'b:]'werden.
Und so kann ich beim zurückschreiben halt ermitteln, was wie geschrieben wird.
natürlich kann auch mehr sein:hal'[:b'lo'b:] du '[:i;u'da'u;i:]'oder so... Allerdings muss ich erstmal das trennen der bereiche hinbekommen.
Könnt ihr euch darunter irgendwas vorstellen?
-
Lass dir doch einfach mal die Werte von dwMask und dwEffects ausgeben.
-
Wenn ich das nur könnte... Sry aber ich habe schon verzweifelt gesucht, ih habe es nie hinbekommen...
-
Einfach Breakpoint setzen. Vursor auf die Variable und Shift+F9 oder einfach hoovern und auf Tooltip warten...
-
lippoliv schrieb:
Wenn ich das nur könnte... Sry aber ich habe schon verzweifelt gesucht, ih habe es nie hinbekommen...
Hast Du keinen Debugger, der Dir bei Variablenwatch behilflich sein könnte?
Oder warum kannst Du das nicht?Martin
-
Nohcmals zu meinen primitiven mitteln:
Notepad++ (KEIN interner compiler/debugger)
MinGW(EXTERNER compiler)Ich weiß nich wer Notepad++ kennnt, aber der einzige unterschied zu Notepad ist syntaxhighlighting was manchmal zu wünschen übrig lässt...
printf( "%d/%s/%l/%f", form1->dwEffects, form1->dwEffects, form1->dwEffects, form1->dwEffects );funktioniert alles nicht (alles 0, bis auf %s"<null>" und %l""...)
-
Nun, was soll ich denn nun dazu sagen? *räusper*
Du weißt nicht was für ein mächtiges Werkzeug Dir mit einem fehlenden Debugger entgeht...
Mit einem Debugger kannst Du wirklich jede einzelne Codezeile Schritt für Schritt verfolgen und dabei gleichzeitig die Variablen- und Struktur-Inhalte (hinein)sehen!Ohne überheblich zu wirken, mein Rat: Besorg Dir ein vernünftiges integriertes Entwicklungssystem. Es gibt welche die kostenlos sind!
Z.B. BCB Borland C++ Builder oder auch die Express-Editionen von Microsoft Visual C++.Martin
-
lippoliv schrieb:
printf( "%d/%s/%l/%f", form1->dwEffects, form1->dwEffects, form1->dwEffects, form1->dwEffects );funktioniert alles nicht (alles 0, bis auf %s"<null>" und %l""...)
Was heißt "funktioniert alles nicht"?
Wenn bei %d 0 ausgegeben wird, dann steht da eben der Wert 0 drin. Was ist mit dwMask und den Werten der anderen Struktur?
P.S.: Benutz besser %08x, dann kann man die Flags besser ablesen.
-
Min jung, ik hab mit soeppes scho georbeided...
Ne wirklich, ich weiß was mir entgeht, sehr geil.. F7 eine Zeile weiter F8 in die aufgerufene funktion, und da mit F7 jede Zeile weiter, F9 bis zum nächsten haltepunkt..
Ich habe momentan keine Wahl, da ich in der Ausbildung bin, und wir "ein auge für kot... äh code"
bekommen sollen...Ich werde warten müssen bis mein Chef sein OK gibt.
Kann irgendwer von euch das mal debuggen? würde die Entsprechenden Dateien online stellen...
-
lippoliv schrieb:
Nohcmals zu meinen primitiven mitteln:
Notepad++ (KEIN interner compiler/debugger)
MinGW(EXTERNER compiler)<kopfschüttel /> Kein Kommentar!
Du springst auch in den Atlantik und schwimmst, wenn Dir einer sagt, dass Du nach Amerkia sollst?

-
http://nopaste.info/3ae76c15d7_nl.html
und
http://nopaste.info/a1398f8a1c_nl.htmlSoll ich meinem Chef sagen
"Mir ist egal was sie denken... ich mach was ich will!"?
Mein Chef war seit ca. 1 Monat nicht mehr bei uns Azubis, er hatte glaube ich auch nie vorgesehen, dass wir WinAPI machen, aber ich forsche gerne, weil ich so lerne...
Naja, währ halt cool wenn irgendwer mal den code durch nen Debugger jagen könnte / mir sagen könnte, wo ich einen C debugger finde *verzweifel*
-
Du musst den cbSize-Member deiner CHARFORMAT-Strukturen initialisieren.
Ansonsten sollte dir nur klar sein, dass bei deiner Vorgehensweise das erste Zeichen, bei dem der Vergleich fehlschlägt, bereits in buff drinsteht, weil du es schon vor der Formatprüfung dorthin einliest.