【问题标题】:Component editor doesn't immediately prompt for saving new property values组件编辑器不会立即提示保存新属性值
【发布时间】:2015-04-30 22:18:25
【问题描述】:

我有一个自定义控件,它有一个组件编辑器(通过两个不同的上下文菜单项提供两个不同的屏幕)。在这两种情况下,当我更改它正在编辑的组件的属性时,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。如果我从此属性编辑器更改任何属性,它会立即在 Object Inspector 中向我显示该更改。但是,IDE 的其余部分不承认有任何更改,因此不给我保存更改的选项。

当我的控件属性发生更改时,如何让 IDE 确认?

【问题讨论】:

    标签: delphi ide custom-controls delphi-xe7


    【解决方案1】:

    DesignIntf​​.pasIComponentEditor接口的cmets有一些建议:

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

    有一些错别字,但要点很清楚:您的组件编辑器需要调用Designer.Modified

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-01-18
      • 2019-02-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多