2013-01-14 129 views
-1

Delphi v7使用TColorBox更改字体颜色

我还有另一个补救问题。

使用TColorBox我想改变每个RichEdit控件的字体颜色。我正在使用颜色框的OnClick事件。

此过程适用于一个富文本编辑控件。

procedure TForm1.cmbFColorClick(Sender: TObject); 
    begin 

    reProc.SelAttributes.Color := cmbFColor.Selected; 

    end; 

如果我尝试写相同的代码为每个RichEdit中的控制,将在同一时间更改字体颜色在所有RichEdit控件。

例如:我选择并更改一个RichEdit控件的文本颜色,然后更改不同控件上的文本颜色,同时更改两个RichEdit控件的文本颜色。

procedure TForm1.cmbFColorClick(Sender: TObject); 
    begin 

     reProc.SelAttributes.Color := cmbFColor.Selected; 
     reApp.SelAttributes.Color := cmbFColor.Selected; 
     reServ.SelAttributes.Color := cmbFColor.Selected; 

    end; 

此过程不会在所有

procedure TForm1.cmbFColorClick(Sender: TObject); 
begin 
    if ActiveControl is TDBRichEdit then 
    with ActiveControl as TDBRichEdit do 
    SelAttributes.Color := cmbFColor.Selected; 

    end; 

工作有没有办法,我可以更改所有的RichEdit控件的文本颜色,而不会影响任何的其他控件?

+0

我不知道你想要什么。你想修改哪些丰富的编辑控件? –

+0

为什么其他控件会受到RichEdit控件文本颜色变化的影响? –

+0

你只想改变最后一个激活的'TDBRichEdit'控件的颜色? –

回答

0

我认为主动控件是你的TColorBox而不是RichEditBox,因为只有一个控件可以是主动控件。如果我没记错的话,这个控件有重点。

所以你必须执行这样的过程。 并且你已经记住了代码,这是最后一个活跃的财富。

程序changeColor(编辑:Trichedit); 开始

procedure changeColor(edit:Trichedit); 
begin 
    edit.SelAttributes.Color := cmbFColor.Selected; 
end; 

亲切的问候

+0

我明白你的意思。我不知道如何编写最后一个活动的任何东西。我会为此努力。 – Robert

+0

问题是,当我在一个REcomtrol上选择文本时,然后移动到另一个REcontrol,第一个文本仍处于选中状态,因此两者中的选定文本都会更改。如何取消选择代码。 – Robert

0

问题解决了。在PageControl OnChange事件中,我为每个丰富的编辑控件将RichEdit SelLength设置为“0”。

谢谢你的帮助。它给了我这个想法。

+0

这听起来像是一种补救办法,而不是解决问题的办法。 – NGLN

+0

解决问题很容易,但这不是解决方案。 –

0

我从这个问题,最后一个问题,对这些问题的评论以及对这些问题的回答中共同合作。

您试图做的是修改SelAttributes.Color为一个丰富的编辑控件。问题在于计算出哪些丰富的编辑控件可以运行。

让我们假设你有提供以下功能:

function ActiveRichEdit: TRichEdit; 

然后,你可以简单地写:

ActiveRichEdit.SelAttributes.Color := NewColor; 

或者,如果有可能,有没有丰富的编辑控制活动:

if ActiveRichEdit<>nil then 
    ActiveRichEdit.SelAttributes.Color := NewColor; 

那么,我们如何实现ActiveRichEdit?好吧,看起来你有多个页面的控件,每个页面都包含一个明显的丰富的编辑。这听起来很像我的页面控制。

我会假设你的页面控制称为PageControl,以及标签薄片称为TabSheet1TabSheet2等,以及丰富的编辑控件被命名为RichEdit1RichEdit2等,但如果你的名字是不同的,那么你就需要修改这些代码。

function TForm1.ActiveRichEdit: TRichEdit; 
begin 
    if PageControl.ActivePage=TabSheet1 then 
    Result := RichEdit1 
    else if PageControl.ActivePage=TabSheet2 then 
    Result := RichEdit2 
    else if PageControl.ActivePage=TabSheet3 then 
    Result := RichEdit3 
    // etc. etc. 
    else 
    Result := nil; 
end; 

现在,还有其他方法可以做到这一点。您可以制作一组可用PageControl.ActivePageIndex索引的丰富编辑参考。而且还有更多可行的解决方案。

但关键是要使用页面控件的ActivePageActivePageIndex属性来计算出操作哪个丰富的编辑控件。