05. februar 2002 - 23:01
Der er
5 kommentarer og
1 løsning
Farvekodning i RichEdit
Nogen, der ved om/hvordan man kan ændre farven på noget tekst i en RichEdit-kontrol UDEN at ændre på undo-listen??
Typisk ville man jo markere teksten med EM_EXSETSEL og så ændre formatere det markerede med EM_SETCHARFORMAT.
Jeg kan se at der er en message, der hedder EM_FORMATRANGE, men den ser umildbart ikke ud til at være til sådanne formål!
Jeg bruger VC++ 6.0.
06. februar 2002 - 15:22
#2
Hejsa :)
Sådan som du har formuleret dit indlæg, vil jeg gå stærkt ud fra at du sagtens kan ændre textfarven som du vil... Men du vil ha' undo-bufferen til at "Overse" at du gør det... Right?
Hvis ja, så se her:
//Den her definerer ITextDocument og tomTrue/tomFalse
#include "tom.h"
//Spørg mig ikke, bare noget der stod man skulle bruge for at definere
//IID_ITextDocument
#define DEFINE_GUIDXXX(name, l, w1, w2, b1, b2, b3, b4, b5, b6, b7, b8) \
EXTERN_C const GUID CDECL name \
= { l, w1, w2, { b1, b2, b3, b4, b5, b6, b7, b8 } }
DEFINE_GUIDXXX(IID_ITextDocument,0x8CC497C0,0xA1DF,0x11CE,0x80,0x98,
0x00,0xAA,0x00,0x47,0xBE,0x5D);
//Resten har jeg trukket ud af WndProc
//Fra starten af funktionen
static IUnknown *pUnk;
static ITextDocument *pDoc;
//Fra WM_CREATE
pUnk = NULL;
pDoc = NULL;
SendMessage(hRichEditWnd, EM_GETOLEINTERFACE, 0, (LPARAM)&pUnk);
if(pUnk)
pUnk->QueryInterface(IID_ITextDocument, (void**)&pDoc);
//I dunno... Det hvor du vil arbejde uden undo-buffer
if(pDoc){
pDoc->Undo(tomFalse, NULL); //Slå undo fra
//Lav de ændringer du skal, uden om undo-bufferen
pDoc->Undo(tomTrue, NULL); //Slå undo til
}
PS!!! Jeg har ikke gennemtestet det, men det skulle gerne virke... Prøv det lige igennem, før du accepterer det ;) Hehe
Og husk så lige at ændre hRichEditWnd til det du kander din RichEdit
06. februar 2002 - 17:09
#4
Hmm... Det har du da helt ret i :(
Jeg læste bare at man med Undo(tomFalse, NULL) kunne "freeze" undo-bufferen, men jaja, man skal vel lære noget nyt hele tiden :)