0

私の Delphi XE2 プロジェクトではForm1Label1とがありCheckBox1ます。

私の要件は、を設定することCheckBox1.Font.Color := clGreen;です。

書いたと思ったら

procedure TForm1.FormCreate(Sender: TObject);
begin
  CheckBox1.Font.Color := clGreen;
end;

まだFont ColorデフォルトですBlack。したがって、次のように別の方法で定義しました。

  1. から を削除しCaptionCheckBox1を に変更しWidthました17
  2. 次に、 likeLabel1の隣に配置しました。CheckBox1CleckBox1 Caption
  3. その後、私は書いています:

procedure TForm1.Label1Click(Sender: TObject);
begin
  CheckBox1.Click;
end;

Toggle状態にCheckBox1

しかし、私は得て[DCC Error] Unit1.pas(37): E2362 Cannot access protected symbol TCustomCheckBox.Clickいます。

もう 1 つの質問は、次の画像のようにトリガーできるかどうかです OnMouseDown EventCheckBox1フォーム1

4

2 に答える 2

1

次のように使用できます。

procedure TForm1.Label1Click(Sender: TObject);
begin
//either
CheckBox1.Checked := not CheckBox1.Checked;  // this trigger onClick event!!
// or 
// if you absolutely need it.. 
CheckBox1Click(Sender); // NOTE this will not check or uncheck CheckBox1
end;

ただし、ここでは TLabel オブジェクト (Sender) を使用していることに注意してください。Sender使用しない場合は、さらに注意することなく使用できます。

ただし、他のコントロールを有効および無効にするためのコードをイベントの外に配置することをお勧めします。たとえば doenable() の場合は 1 行のみです。

procedure TForm1.doEnable(enable: Boolean);
begin
  Edit1.Enabled := enable; 
  Edit2.Enabled := enable;
  Edit3.Enabled :=  NOT enable;
  if enable then Label1.Font.Color := clGreen else Label1.Font.Color := clWindowText;
  ...
end;


procedure TForm1.Label1Click(Sender: TObject);
begin
  // NOTE This trigger also CheckBox1 Click event. 
  CheckBox1.Checked := not CheckBox1.Checked; 
  // NOT needed.
  //if CheckBox1.Checked then doEnable(true) else doEnable(false);
end;

procedure TForm1.CheckBox1Click(Sender: TObject);
begin
  if CheckBox1.Checked then doEnable(true) else doEnable(false);
end;
于 2013-08-22T14:59:11.567 に答える