Здравствуйте. Пишу компонент-контейнер TrxsList, который содержит компоненты-элементы TrxsItem. Задумал сделать для TrxsList дизайнер. Окно дизайнера наследую от TDesignWindow. В нем будет список скорее всего ListView с TrxsItems, которые включены в TrxsList с возможностью добавить или удалить элементы. По сути напоминает ActionList с Action-ами.
Вопрос заключается в том,
как оповестить мое окно дизайнера о том что пользователь в Object inspector поменял свойства выбранного TrxsItem?Это нужно для того чтобы отразить изменения по нему в ListView. Видел метод TDesignWindow.ItemsModified, но что-то не понял как им пользоваться...
Код формы дизайнера:
unit rxsListEditorForm;
interface
uses
Classes, Controls, Forms, Dialogs, DesignWindows, DesignIntf, rxsList,
StdCtrls, ComCtrls, ToolWin;
type
TListEditorForm = class(TDesignWindow)
lv_1: TListView;
tlb_1: TToolBar;
btn_Add: TToolButton;
procedure FormClose(Sender: TObject; var Action: TCloseAction);
procedure btn_AddClick(Sender: TObject);
private
FDesigner: IDesigner;
FList: TrxsList;
protected
procedure Notification(AComponent: TComponent; Operation: TOperation); override;
public
constructor Create(AOwner : TComponent; AList : TrxsList; ADesigner : IDesigner); reintroduce;
procedure ItemsModified(const Designer: IDesigner); override;
property List : TrxsList read FList;
end;
var
ListEditorForm: TListEditorForm;
implementation
constructor TListEditorForm.Create(AOwner: TComponent; AList: TrxsList;
ADesigner: IDesigner);
begin
inherited Create(AOwner);
FDesigner := ADesigner;
FList := AList;
end;
procedure TListEditorForm.FormClose(Sender: TObject; var Action: TCloseAction);
begin
Action := caFree;
end;
procedure TListEditorForm.ItemsModified(const Designer: IDesigner);
begin
end;
procedure TListEditorForm.Notification(AComponent: TComponent;
Operation: TOperation);
begin
inherited;
if (Operation = opRemove) and (AComponent = FList) then Free;
end;
procedure TListEditorForm.btn_AddClick(Sender: TObject);
var
LItem : TrxsItem;
begin
LItem := TrxsItem.Create(FList.Owner);
LItem.Name := FDesigner.UniqueName(LItem.ClassName);
FList.AddItem(LItem);
end;
end.
Код создания формы в редакторе компонента:
procedure TrxsListEditor.Edit;
var
i : Integer;
LEditForm : TListEditorForm;
LForm : TCustomForm;
begin
for i := 0 to Screen.FormCount - 1 do begin
LForm := Screen.Forms[i];
if LForm is TListEditorForm then
if TListEditorForm(LForm).List = Component then begin
LForm.Show;
if LForm.WindowState = wsMinimized then
LForm.WindowState := wsNormal;
Exit;
end;
end;
LEditForm := TListEditorForm.Create(Application, TrxsList(Component), GetDesigner);
Component.FreeNotification(LEditForm);
LEditForm.Show;
end;