Delphi 如何设置TRichedit默认段落背景色

Delphi 如何设置TRichedit默认段落背景色,delphi,winapi,delphi-7,Delphi,Winapi,Delphi 7,我尝试使用以下代码设置TRichEdit控制默认段落背景颜色: //****************************************************************************** class procedure TRichEditUtility.setBGColor( aRE_ : TTNTRichEdit; bgColor_ : cardinal; default_ : boolean = FALSE ); //******************

我尝试使用以下代码设置
TRichEdit
控制默认段落背景颜色:

//******************************************************************************
class procedure TRichEditUtility.setBGColor( aRE_ : TTNTRichEdit; bgColor_ : cardinal; default_ : boolean = FALSE );
//******************************************************************************
var
  cf: TCharFormat2;
begin
  if ( aRE_ <> NIL ) then
  begin
    fillchar(cf, sizeof(cf), 0);
    cf.cbSize := sizeof( cf );
    cf.dwMask := CFM_BACKCOLOR;
    cf.crBackColor := bgColor_;
    if ( default_ ) then
      aRE_.Perform( EM_SETCHARFORMAT, SPF_SETDEFAULT, lparam(@cf) )
    else
      aRE_.Perform( EM_SETCHARFORMAT, SCF_SELECTION, lparam(@cf) );
  end else
    raise EInvalidInputParameter.create_string( 'TRichEditUtility', 'setBGColor', 'aRE_', CONST_chars_NIL );
end;
//******************************************************************************
类过程tricheditivity.setBGColor(aRE:TTNTRichEdit;bgColor:基数;默认值:boolean=FALSE);
//******************************************************************************
变量
cf:TCharFormat2;
开始
如果(为零),则
开始
fillchar(cf,sizeof(cf),0);
cf.cbSize:=sizeof(cf);
cf.dwMask:=CFM_背景色;
cf.crBackColor:=bgColor_382;;
如果(默认值),则
正在执行(EM_SETCHARFORMAT、SPF_SETDEFAULT、lparam(@cf))
其他的
执行(EM_SETCHARFORMAT,SCF_选择,lparam(@cf));
结束其他
提高EInvalidInputParameter。创建字符串('Tricheditivity','setBGColor','aRE',CONST_chars_NIL);
结束;
但是
SPF_SETDEFAULT
常量的值未知


有人能告诉我它的价值吗?(或定义其值的文件名)

以下是如何解决此问题以及任何此类问题

  • SPF\u SETDEFAULT
    执行Web搜索
  • 这将带您访问的文档
  • 该文档将
    Richedit.h
    列为所需的标题
  • 在Windows SDK副本中找到
    Richedit.h
    ,然后搜索
    SPF_SETDEFAULT
  • 该搜索将产生以下结果:
    #定义SPF\u设置默认值0x0004
  • 因此,在Delphi中,您可以这样定义常量:
    const SPF_SETDEFAULT=$0004

我当然找到了这一页。但不幸的是,我还没有看到关于richedit.h的评论。尽管如此,我还是在uses中找到了richedit.pas,并在这里搜索了该常量。但它没有包含这个。但现在我知道它的价值,我很高兴。谢谢你的回答!;)那很好。我只是想让你完成所有的步骤,让你知道如何在未来自己做这件事。我认为这比只告诉您值是
0x0004
要好。这正是您所指的或定义其值的文件名。仅供参考,
SCF_ALL
——另一个与
EM_SETCHARFORMAT
(在Delphi的
RichEdit.pas
单元中定义)一起使用的标志也被定义为0x0004。因此,相同消息的两个标志具有相同的值似乎存在冲突。FWIW,
SPF_SETDEFAULT
在XE8附带的Windows SDK中没有声明(我还没有检查西雅图)。@Remy它是在MS提供的SDK中定义的。不知道Emba是从哪里得到C++Builder附带的SDK的。@DavidHeffernan:他们是从微软那里得到的。他们通常在发布新IDE时获得当前可用的内容,但他们必须自定义一些SDK头以解决编译器问题。我们知道是哪个SDK引入了
SPF_SETDEFAULT
define吗?顺便说一句,我见过使用
SPF_SETDEFAULT
EM_SETPARAFORMAT
而不是
EM_SETCHARFORMAT
的代码,尽管没有这样的文档记录
SPF_SETDEFAULT
EM_SETPARAFORMAT
中更有意义(并且与
SPF_
前缀一致)。