在从属交换机上打印

时间:2014-12-08 08:26:15

标签: delphi logic delphi-xe7

假设我有三个开关,即SW_A,SW_B和SW_ALL。

单击SW_A(从关闭到打开)时,TMemo打印' SW_A打开',同样适用于SW_B。

然而,当单击SW_ALL(从关闭到打开)时,TMemo打印' SW_ALL打开,并且SW_A和SW_B都应该打开,无论它们当前的状态是什么,而不打印&#39 ; SW_A在'和' SW_B已开启。'

我的问题是,每当点击SW_All时,其他开关也会打印出状态。有谁知道如何解决这个问题?谢谢!

procedure TForm1.SW_ALLSwitch(Sender: TObject);
begin
  if SW_All.IsChecked then
  begin
    Memo1.Lines.Add('SW_All is on');

    SW_Alarm_A.IsChecked := True;
    SW_Alarm_B.IsChecked := True;

  end
  else
  begin
    Memo1.Lines.Add('SW_All is off');

    SW_Alarm_A.IsChecked := False;
    SW_Alarm_B.IsChecked := False;

  end;

end;


procedure TForm1.SW_ASwitch(Sender: TObject);
begin
  if SW_A.IsChecked = False then
    Memo1.Lines.Add('SW_A is off')
  else
    Memo1.Lines.Add('SW_A is on');
end;

1 个答案:

答案 0 :(得分:2)

仅在“单击SW_ALL(从关闭到打开)”或“单击SW_ALL时出现问题”时是否存在问题尚不清楚。 以下是“每当单击SW_ALL时”的解决方案。

开关组件可能具有OnSwitch事件。当您切换SW_ALL并以编程方式更改其他开关的状态时,SW_A和SW_B的OnSwitch事件就会像单击时一样触发。

要暂时阻止SW_A和SW_B对切换事件作出反应,您可以将nil分配给OnSwitch事件,更改开关状态并重新分配OnSwitch事件。例如

procedure TForm1.SW_ALLSwitch(Sender: TObject);
var
  TempOnSwA, TempOnSwB: TNotifyEvent;
begin
  TempOnSwA := SW_Alarm_A.OnSwitch;
  SW_Alarm_A.OnSwitch := nil;
  TempOnSwB := SW_Alarm_B.OnSwitch;
  SW_Alarm_B.OnSwitch := nil;

  if SW_All.IsChecked then
  begin
    Memo1.Lines.Add('SW_All is on');

    SW_Alarm_A.IsChecked := True;
    SW_Alarm_B.IsChecked := True;

  end
  else
  begin
    Memo1.Lines.Add('SW_All is off');

    SW_Alarm_A.IsChecked := False;
    SW_Alarm_B.IsChecked := False;

  end;

  SW_Alarm_A.OnSwitch := TempOnSwA;
  SW_Alarm_B.OnSwitch := TempOnSwB;
end;