-1

Delphi v7

さらに別の改善策があります。

を使用してTColorBox、4つのRichEditコントロールのそれぞれでフォントの色を変更したいと思います。OnClickカラーボックスのイベントを使用しています。

この手順は、1つのリッチエディットコントロールで正常に機能します。

    procedure TForm1.cmbFColorClick(Sender: TObject);
    begin

     reProc.SelAttributes.Color := cmbFColor.Selected;

    end;

各richeditコントロールに同じコードを書き込もうとすると、すべてのricheditコントロールのフォントの色が同時に変更されます。

例: 1つのリッチエディットコントロールのテキストの色を選択して変更してから、別のコントロールのテキストの色を変更すると、両方のリッチエディットコントロールのテキストの色が同時に変更されます。

 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;

他のコントロールに影響を与えることなく、すべてのリッチエディットコントロールのテキストの色を変更する方法はありますか?

4

3 に答える 3

0

問題が解決しました。PageControl OnChange イベントで、リッチ エディット コントロールごとに RichEdit SelLength を「0」に設定しました。

ご協力ありがとうございました。それは私にアイデアを与えました。

于 2013-01-14T21:06:38.600 に答える
0

アクティブなコントロールはリッチエディットボックスではなく TColorBox だと思います。アクティブなコントロールにできるのは 1 つのコントロールだけだからです。私の記憶が正しければ、このコントロールにはフォーカスがあります。

したがって、このような手順を実装する必要があります。そして、最後にアクティブだったリッチエディットをコードで覚えています。

手順 changeColor(edit : Trichedit) ; 始める

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

敬具

于 2013-01-14T18:24:23.057 に答える
0

この質問、あなたの最後の質問、それらの質問に対するコメント、それらの質問に対するあなたの回答をつなぎ合わせています。

あなたがやろうとしているのはSelAttributes.Color、単一のリッチ エディット コントロールを変更することです。問題は、どのリッチ エディット コントロールを操作するかです。

次の機能が利用可能であるとします。

function ActiveRichEdit: TRichEdit;

次に、次のように簡単に記述できます。

ActiveRichEdit.SelAttributes.Color := NewColor;

または、アクティブなリッチ エディット コントロールがない可能性がある場合:

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

では、どのように実装しActiveRichEditますか? 各ページに個別のリッチ エディットが含まれている複数のページを持つコントロールがあるようです。それは私にはページ コントロールのように聞こえます。

PageControlページ コントロールの名前は、タブ シートの名前TabSheet1TabSheet2など、リッチ エディット コントロールの名前RichEdit1はなどであると仮定しますRichEdit2。ただし、名前が異なる場合は、このコードを調整する必要があります。

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。そして、実際にはさらに多くの可能な解決策があります。

ただし、重要なのは、ページ コントロールのActivePageまたはActivePageIndexプロパティを使用して、どのリッチ エディット コントロールを操作するかを決定することです。

于 2013-01-14T23:16:46.580 に答える