Редактор компонентов не сразу запрашивает сохранение новых значений свойств
У меня есть пользовательский элемент управления, который имеет редактор компонентов (два разных экрана, доступных через два разных пункта контекстного меню). В обоих этих случаях, когда я изменяю свойства редактируемого компонента, IDE не признает, что были внесены какие-либо изменения, и поэтому кнопка "Сохранить все" в IDE Delphi остается неактивной (предполагая, что она была неактивной до изменений).
Хотя изменения свойств явно были применены к управлению временем проектирования, если я сразу после запуска проекта изменения, внесенные в Редакторе компонентов, не были применены во время выполнения. Мне пришлось сделать незначительные изменения в конструкторе форм / инспекторе объектов, чтобы включить кнопку "Сохранить все", чтобы я действительно мог сохранить изменения.
Вот как я выполняю выбор контекстного меню:
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;
Это происходит даже со свойствами, которые я даже не повторно ввожу, такими как Visible
или Width
. Если я изменю какое-либо свойство от этот редактор свойств, он сразу же показывает мне, что изменение в Инспекторе объектов. Однако остальная часть IDE не признает, что что-то изменилось, и поэтому не дает мне возможности сохранить мои изменения.
Как заставить IDE подтвердить, когда были внесены изменения в свойства моего элемента управления?
1 ответ:
Комментарии для интерфейса
IComponentEditor
в DesignIntf.pas есть несколько советов:Всякий раз, когда компонент изменяет, компонент должен вызывать
Designer.Modified
, чтобы сообщить проектировщику, что форма была изменена.Есть некоторые опечатки, но суть ясна: ваш редактор компонентов должен вызвать
Designer.Modified
.