组件编辑器不会立即提示保存新的属性值

时间:2015-02-28 04:14:47

标签: delphi ide custom-controls delphi-xe7

我有一个自定义控件,它有一个组件编辑器(通过两个不同的上下文菜单项可以使用两个不同的屏幕)。在这两种情况下,当我更改正在编辑的组件的属性时,IDE不会确认已进行任何更改,因此Delphi IDE中的“全部保存”按钮保持不活动状态(假设在更改之前它处于非活动状态)

尽管属性更改已明确应用于设计时控件,但如果我立即运行项目,则组件编辑器中所做的更改尚未在运行时应用。我不得不在表单设计器/对象检查器中进行微调,以触发“全部保存”按钮以启用,因此我实际上可以保存更改。

以下是我执行上下文菜单选择的方法:

TMyControlEditor来自TDefaultEditor

procedure TMyControlEditor.ExecuteVerb(Index: Integer);
begin
  case Index of
    0: begin
      ExecEditor;
    end;
    1: ...
  end;
end;

procedure TMyControlEditor.ExecEditor;
var
  F: TfrmMyControlEditor;
begin
  F:= TfrmMyControlEditor.Create(TMyControl(Component));
  try
    case F.ShowModal of
      mrOK: begin
        F.SaveTo(TMyControl(Component));
      end;
    end;
  finally
    F.Free;
  end;
end;

procedure TfrmMyControlEditor.SaveTo(ADst: TMyControl);
begin
  ADst.ThisProperty:= chkThisProperty.Checked;
  ADst.ThatProperty:= txtThatProperty.Text;
  ADst.Width:= seWidth.Value;
  ADst.Height:= seHeight.Value;
  ADst.Visible:= chkVisible.Checked;
  ... set other properties ...
end;

这甚至发生在我甚至不重新引入的属性中,例如VisibleWidth。如果我从此属性编辑器更改任何属性,它会立即显示对象检查器中的更改。但是,IDE的其余部分不会确认任何内容已更改,因此不会让我选择保存更改。

如何在对我的控件的属性进行更改时使IDE确认?

1 个答案:

答案 0 :(得分:6)

DesignIntf​​.pas IComponentEditor界面的评论有一些建议:

  

每当组件修改组件时,必须调用Designer.Modified以通知设计者表单已被修改。

有一些拼写错误,但要点很清楚:组件编辑器需要调用Designer.Modified