Вверх ↑
Ответов: 5446
Рейтинг: 323
#1: 2011-12-12 16:05:44 ЛС | профиль | цитата
Моё понимание происходящего при работе моего кода

RE_FmtFontColor - cвойство, описано как
 property RE_FmtFontColor: Integer index (20 shl 16) or CFM_COLOR read REGetFontAttr write RESetFontAttr1;
Т.е. при установке этого свойства идёт вызов RESetFontAttr1((20 shl 16) or CFM_COLOR, Value), где Value - это правая часть выражения присваивания.
RESetFontAttr1 делает вот что:
  RESetFontAttr( Index, Color2RGB( Value ) );
А RESetFontAttr - вот что (подчищенный код):
 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 ) );
Perform - это синхроная (SendMessage) посылка сообщения окну. Т.е. при установке свойств применение происходит автоматически.
А область действия - это второй аргумент (RichAreas[ fRECharArea ]), который мы меняем вот этим
 Control.RE_CharFmtArea := raSelection;
карма: 1

0