Моё понимание происходящего при работе моего кода
RE_FmtFontColor - cвойство, описано как
property RE_FmtFontColor: Integer index (20 shl 16) or CFM_COLOR read REGetFontAttr write RESetFontAttr1;
RESetFontAttr1 делает вот что:
RESetFontAttr( Index, Color2RGB( Value ) );
procedure TControl.RESetFontAttr(const Index, Value: Integer);var CF: PDWORD;
Mask: DWORD;
begin
REGetFont;
CF := Pointer( Integer( @fRECharFormatRec ) + (HiWord(Index) and $7E) );
Mask := 0;
if LongBool( HiWord(Index) and $1 ) then
Mask := $FFFFFF00;
CF^ := CF^ and Mask or DWORD(Value);
fRECharFormatRec.dwMask := Index and $FF81FFFF;
if LongBool( fRECharFormatRec.dwMask and (CFM_COLOR or CFM_BACKCOLOR) ) then
fRECharFormatRec.dwEffects := fRECharFormatRec.dwEffects and
not (CFE_AUTOCOLOR or CFE_AUTOBACKCOLOR);
Perform( EM_SETCHARFORMAT, RichAreas[ fRECharArea ], Integer( @fRECharFormatRec ) );
end;
Perform( EM_SETCHARFORMAT, RichAreas[ fRECharArea ], Integer( @fRECharFormatRec ) );
А область действия - это второй аргумент (RichAreas[ fRECharArea ]), который мы меняем вот этим
Control.RE_CharFmtArea := raSelection;