Ich schreibe einen Text mit Hilfe von "SetDlgItemText" in das Textfeld einer DIalogbox. Wie kann ich Attribute wie z.B. Fett, oder eine andere Farbe in dem Text realisieren, um bestimmte Schlüsselwörter aus dem Text hervorheben? Besispiel: Diese Wort ist fett! WinXP; VisualC6.0; WinAPI
Gar nicht. Die Textfelder, deren Text mit SetDlgItemText gesetzt werden können (statische und einfache Editfelder) unterstützen keine unterschiedlichen Textattribute für einzelne Textbestandteile. Sie können nur den gesamten Text einheitlich formatiert darstellen. Für Deine Hervorhebungen ist entweder ein RichText-Control zu verwenden (RichEdit), das Text im RTF-Format anzeigt, oder aber ein HTML-Control, das Du Dir aber irgendwoher besorgen musst. Alternativ kannst Du ein OwnerDraw -Control verwenden, also ein Textcontrol, bei dem Du den WM_PAINT-Handler mit eigenem Code überlagerst.
Oh je, dass hab ich befürchtet. Großen Aufwand wollte ich an der Stelle eigendlich nicht betreiben. Ich dachte so was wie "fett" oder "unterstreichen" ist vlt. mit Steuerzeichen (ähnlich wie -> \r\n) zu machen. Trotzdem danke. Wenn einer doch noch ne einfache Method kennt, dann immer her damit ;-)
mitleser schrieb: > Ich dachte so was wie "fett" oder > "unterstreichen" ist vlt. mit Steuerzeichen (ähnlich wie -> \r\n) zu > machen. Wenn Du das standardmäßig verfügbare RichEdit-Control benutzt, dann ist das so (auch wenn die Steuerzeichen etwas anders aussehen), nur ist das Control mit anderen Funktionen zu verwenden als die einfachen Text-Controls. Die MFC enthält mit CRichEditCtrl auch eine Klasse, die das Control kapselt, hier ein einfaches Tutorial dazu: http://www.functionx.com/visualc/controls/richedit.htm
mitleser schrieb: > Oh je, dass hab ich befürchtet. Großen Aufwand wollte ich an der Stelle > eigendlich nicht betreiben. Ich dachte so was wie "fett" oder > "unterstreichen" ist vlt. mit Steuerzeichen (ähnlich wie -> \r\n) zu > machen. > > Trotzdem danke. > Wenn einer doch noch ne einfache Method kennt, dann immer her damit ;-) Außer RichEdit bleibt auch die Möglichkeit (unter Umgehung von SetDlgItemText) den Text einfach per TextOut() an eine beliebige Stelle in den Dialog zu schreiben. Per SelectObject() den entsprechenden font in den Devicekontext wählen. "The TextOut function writes a character string at the specified location, using the currently selected font, background color, and text color." Vielleicht nicht der Königsweg, aber eine Möglichkeit.
Platinenschwenker .. schrieb: > Vielleicht nicht der Königsweg, aber eine Möglichkeit. offentlich schiebt dann keiner mal ein Fenster über den Text.
Platinenschwenker .. schrieb: > Vielleicht nicht der Königsweg, aber eine Möglichkeit. Das muss dann aber in den WM_PAINT-Handler des Dialogs eingebunden werden, damit es nicht zu Abbildungsfehlern kommt. Sonst genügt ein Verschieben des Dialogs, ein Überdecken des Dialogs durch ein anderes Fenster, und der Text ist weg/kaputt.
Peter II schrieb: > Platinenschwenker .. schrieb: >> Vielleicht nicht der Königsweg, aber eine Möglichkeit. > > offentlich schiebt dann keiner mal ein Fenster über den Text. Das macht gar nix, TextOut() wird in einer BeginPaint(hDlg, &ps); TextOut(hdc, 0, 0, chText, lstrlen(chText)); EndPaint(hDlg, &ps); ausgeführt. (innerhalb eines WM_PAINT: Ereignisses)
Ist trotzdem keine so gute Idee. Ich ärgere mich jedesmal grün und blau, wenn jemend so etwas macht und ich den Text (die Ausgabe des Programms) dann fein säuberlich abtippen muss, anstelle das ich ganz einfach in das Control hineinklicken und mir den Text mit Copy&Paste woanders hin kopieren kann. Programmausgaben gehören im Regelfall in ein Read-Only Control ausgegeben. Du weißt nie, was dein Benutzer mit der Programmausgabe weiter machen möchte, also mach es ihm leicht das zu tun, was er tun will.
Karl Heinz Buchegger schrieb: > anstelle das ich ganz einfach in das Control hineinklicken und mir > den Text mit Copy&Paste woanders hin kopieren kann Das ist bei einfachen static-Text-Controls leider nicht anders.
Rufus Τ. Firefly schrieb: > Karl Heinz Buchegger schrieb: >> anstelle das ich ganz einfach in das Control hineinklicken und mir >> den Text mit Copy&Paste woanders hin kopieren kann > > Das ist bei einfachen static-Text-Controls leider nicht anders. :-) erwischt. An die hatte ich nicht gedacht. Ich hatte Text-Controls im Read-Only Modus im Sinn, weil ich die grundsätzlich für Ausgaben von berechneten Werten oder sonstigen Angaben nutze. Hat dann auch den Vorteil, dass man einen langen Dateinamen in einem kleinen Dialog immer noch durchscrollen kann, anstatt dass der über die Dialoggrenzen hinweg (unsichtbar) ausgegeben wird.
Karl Heinz Buchegger schrieb: > erwischt. An die hatte ich nicht gedacht. Ich hatte Text-Controls im > Read-Only Modus im Sinn, weil ich die grundsätzlich für Ausgaben von > berechneten Werten oder sonstigen Angaben nutze. Hat dann auch den > Vorteil, dass man einen langen Dateinamen in einem kleinen Dialog immer > noch durchscrollen kann, anstatt dass der über die Dialoggrenzen hinweg > (unsichtbar) ausgegeben wird. Dann könnte dir jenes besser gefallen, was im Anhang zu sehen ist. Ein read-only RichEdit Textfeld nach dem Start beschickt mit einem String, eine Formatierung an das Feld gesendet (rot, blau) und trotz dessen dass das Feld zu kurz ist lässt sich der Inhalt scrollen, selektieren, kopieren (mit CTRL-C). Doch irgendwie flexibler wie Textout(). ;) Das Originalbeispiel lud einen "Wordpad" RTF Text in das Feld.
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.