Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (WinAPI, Konsole) » RichEdit textformatierung (fett,kursiv,usw)

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 <
000
22.12.2007, 18:25 Uhr
~Over
Gast


hi zusammen.
ich code grade an nen kleinen texteditor....
dieser hat natürlich auch ToolButtons zum fett/kursiv/unterstrichen machen...
nach längeren googlen weiß ich nu schonma wie ich denn markierten text so formatieren


C++:
void __fastcall TForm1::ToolButton_FettClick(TObject *Sender)
{
Richedit::CHARFORMAT2 cfm;

SendMessage( RichEdit1->Handle, EM_GETCHARFORMAT,
( WPARAM)SCF_SELECTION, (LPARAM)&cfm );

cfm.cbSize = sizeof(cfm);
cfm.dwMask = CFM_PROTECTED | CFM_BOLD;
cfm.dwEffects = CFE_BOLD;

SendMessage( RichEdit1->Handle, EM_SETCHARFORMAT,
( WPARAM)SCF_SELECTION, (LPARAM)&cfm );



soa, gut und schön....nur wie bekomm ich ihn nu soweit dass der text, wenn er schon fett ist, wieder normal dargestellt wird?
hab mit vielen if else abfragen rumprobiert..aber nich wirklich zum ergebnis gekommen.

ok, es gäbe auchnoch ne andere möglichkeit den fett zu machen...


C++:
RichEdit1->SelAttributes->Style = TFontStyles() << fsBold;


bzw. um fett wieder weg zu machen


C++:
RichEdit1->SelAttributes->Style = TFontStyles() >> fsBold;



nur auch hier verzweifel ich an der if else abfrage -_-

danke schonmal im voraus
Over
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
22.12.2007, 21:25 Uhr
RedEagle



Ich vermute mal, dass du einfach das CFE_BOLD - flag löschen musst


C++:
cfm.dwMask = cfm.dwMask & ~CFM_BOLD;
cfm.dwEffects = cfm.dwEffects  & ~CFM_BOLD;

--
MFG RedEagle
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
22.12.2007, 23:59 Uhr
~Over
Gast


ehm jain.
das ding is, durch

C++:
cfm.dwEffects = cfm.dwEffects  & ~CFM_BOLD;

bekomm ich die fett formatierung zwar wieder weg...aber ich brauch ja ne if else anweisung welche den text fett macht wen er nicht fett ist bzw. die fett formatierung aufhebt wenn er fett ist.
sowas wie

C++:
  if(cfm.dwEffects == CFE_BOLD)
            cfm.dwEffects = cfm.dwEffects  & ~CFM_BOLD;
        else
            cfm.dwEffects = CFE_BOLD;

funzt nicht...irgendwie auch logisch dass es nicht funzt..aber wie funzt es denn dann? ^^
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
23.12.2007, 10:39 Uhr
FloSoft
Medialer Over-Flow
(Administrator)


hi, war schon fast richtig:



C++:
if( (cfm.dwEffects & CFE_BOLD) == CFE_BOLD)
   cfm.dwEffects = cfm.dwEffects  & ~CFM_BOLD;
else
   cfm.dwEffects = cfm.dwEffects  & CFM_BOLD;


--
class God : public ChuckNorris { };
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
004
23.12.2007, 11:17 Uhr
~Over
Gast


hmmm...
also entweder ich stell mich nu echt dämlich an...oder ka. (ich denk ma dass ich mich einfach nur dämlich anstell. ^^)
mein fettClick code sieht nu so aus:

C++:

void __fastcall TForm1::ToolButton_FettClick(TObject *Sender)
{
Richedit::CHARFORMAT2 cfm;

SendMessage( RichEdit1->Handle, EM_GETCHARFORMAT,
( WPARAM)SCF_SELECTION, (LPARAM)&cfm );

cfm.cbSize = sizeof(cfm);
cfm.dwMask = CFM_PROTECTED | CFM_BOLD;
if( (cfm.dwEffects & CFE_BOLD) == CFE_BOLD)
   cfm.dwEffects = cfm.dwEffects  & ~CFM_BOLD;
else
   cfm.dwEffects = cfm.dwEffects  & CFM_BOLD;

SendMessage( RichEdit1->Handle, EM_SETCHARFORMAT,
( WPARAM)SCF_SELECTION, (LPARAM)&cfm );
}

nur nu macht er beim fett klick garnixmehr mit dem text, heißt also wohl, dasss er IMMER in die
if( (cfm.dwEffects & CFE_BOLD) == CFE_BOLD) anweisung springt...
is sicher irgendwas total dämliches was mich noch vom erfolg abhällt, oder?
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
005
23.12.2007, 11:35 Uhr
Over



hab mir überlegt dass es dran
cfm.dwMask = CFM_PROTECTED | CFM_BOLD;
liegen könnte...aber.. ka, richtig hinbekommen hab ichs trotzdem noch nich....
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
006
23.12.2007, 15:46 Uhr
Over



also hab nun mal sowas aus testzweck gemacht:

C++:
void __fastcall TForm1::RichEdit1SelectionChange(TObject *Sender)
{
       Richedit::CHARFORMAT2 cfm;

        SendMessage( RichEdit1->Handle, EM_GETCHARFORMAT,
        ( WPARAM)SCF_SELECTION, (LPARAM)&cfm );
        cfm.cbSize = sizeof(cfm);
        cfm.dwMask = CFM_PROTECTED | CFM_BOLD;
        if( (cfm.dwEffects & CFE_BOLD) == CFE_BOLD)
          ToolButton_Fett->Down=true;
        else
          ToolButton_Fett->Down=false;
}

und...beim 1. mal strg+a von normalen text geht der Toolbutton trotzdem down, heb ich die auswahl dann auf..dann spielt der total verrückt..manchmal geht er down, manchmal nicht, total seltsam das alles Oo
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
007
23.12.2007, 16:41 Uhr
RedEagle




C++:
void __fastcall TForm1::ToolButton_FettClick(TObject *Sender)
{
Richedit::CHARFORMAT2 cfm;

SendMessage( RichEdit1->Handle, EM_GETCHARFORMAT, ( WPARAM)SCF_SELECTION, (LPARAM)&cfm );

cfm.cbSize = sizeof(cfm); //Das ist eigentlich unnötig, da es bereits in der Struktur steht

cfm.dwMask = CFM_PROTECTED | CFM_BOLD; //Staht das hier richtig?? oder muss das auch in die if-abfrage?

if( (cfm.dwEffects & CFE_BOLD) == CFE_BOLD)
   cfm.dwEffects = cfm.dwEffects  & ~CFM_BOLD;
else
   cfm.dwEffects = cfm.dwEffects  | CFM_BOLD; //OR statt AND

SendMessage( RichEdit1->Handle, EM_SETCHARFORMAT,
( WPARAM)SCF_SELECTION, (LPARAM)&cfm );
}


So sollte es laufen... Kann es aber nicht testen.
--
MFG RedEagle
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
008
23.12.2007, 18:17 Uhr
Over




C++:
void __fastcall TForm1::ToolButton_FettClick(TObject *Sender)
{

Richedit::CHARFORMAT2 cfm;

SendMessage( RichEdit1->Handle, EM_GETCHARFORMAT, ( WPARAM)SCF_SELECTION, (LPARAM)&cfm );
cfm.dwMask = CFM_PROTECTED | CFM_BOLD;
if( (cfm.dwEffects & CFE_BOLD) == CFE_BOLD)
   {
   ShowMessage("test");
   cfm.dwEffects = cfm.dwEffects  & ~CFM_BOLD; }
else
   cfm.dwEffects = cfm.dwEffects  | CFM_BOLD;
SendMessage( RichEdit1->Handle, EM_SETCHARFORMAT,
( WPARAM)SCF_SELECTION, (LPARAM)&cfm );
}

mal so aus testzwck ne ShowMessage gemacht...und if ist immer wahr...


C++:

cfm.dwMask = CFM_PROTECTED | CFM_BOLD; //Staht das hier richtig?? oder muss das auch in die if-abfrage?

also ich weiß nu nicht genau wie du das meinst..deswegen hab ichs einma inne if abfrage selbst geschrieben, dann im if block UND ich habs sogar ma ganz weg gelassen...trotzdem...if ist immer wahr... -_-

Dieser Post wurde am 23.12.2007 um 18:18 Uhr von Over editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
009
23.12.2007, 19:36 Uhr
Over



haha !


C++:
void __fastcall TForm1::ToolButton_FettClick(TObject *Sender)
{

        Richedit::CHARFORMAT2 cfm;
        cfm.cbSize = sizeof(cfm);
        cfm.dwMask |= CFM_BOLD;
        SendMessage( RichEdit1->Handle, EM_GETCHARFORMAT,
        ( WPARAM)SCF_SELECTION, (LPARAM)&cfm );
        cfm.dwEffects ^= CFE_BOLD;
        SendMessage( RichEdit1->Handle, EM_SETCHARFORMAT,
        (WPARAM)SCF_SELECTION, (LPARAM)&cfm );
}

so gehts!!!!!
da is nurnoch n WINZIG kleines problemchen...
wenn ich n text auswähl der an manchen stellen fett is un an manchen nich..dann lässt er den beim button klick so... sollte aber alles fett machen... wieiß einer wie ich das noch hinbekomm? ^^'
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 <     [ C / C++ (WinAPI, Konsole) ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: