2013-01-14 68 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屬性來計算出操作哪個豐富的編輯控件。