在设计时捕获TForm中的选定元素

yr9zkbsy  于 2022-09-21  发布在  其他
关注(0)|答案(2)|浏览(155)

我正在制作一个显示有关表单信息的生产力工具。它的组件之一是表示表单内部对象层次结构的TreeView。

现在,我可以在更改树中的选定节点时更改表单中的选定项

我只是在树视图选择更改时使用以下代码:

procedure SeleccionarComponente(const Nombre: string);
var
  FormEditor: IOTAFormEditor;
  Componente: IOTAComponent;
begin
  // Seleccionar el componente en el editor de formularios
  FormEditor := GetCurrentFormEditor;
  Componente := FormEditor.FindComponent(Nombre);
  if Componente <> nil then
    Componente.Select(False);
end;

有没有另一种方法呢?每当在表单上单击组件时,我都希望更改树视图选择。

dgsult0t

dgsult0t1#

您可以编写实现IDesignNotification接口的类,然后使用RegisterDesignNotification()函数在IDE中注册该类的示例。IDesignNotification.SelectionChanged()方法就是您要寻找的方法。
当窗体设计器上的选定组件更改时调用。

unguejic

unguejic2#

归根结底,这个解决方案相当微不足道。

我的表单继承自TDesignWindow

TVentanaVisorComponentes = class(TDesignWindow)

这样我就可以重写一些方法

procedure ItemDeleted(const ADesigner: IDesigner; AItem: TPersistent); override;
procedure ItemsModified(const ADesigner: IDesigner); override;
procedure ItemInserted(const ADesigner: IDesigner; Item: TPersistent); override;
procedure SelectionChanged(const ADesigner: IDesigner; const ASelection: IDesignerSelections); override;
procedure DesignerClosed(const ADesigner: IDesigner; AGoingDormant: Boolean); override;

方法SelectionChanged成功了

procedure TVentanaVisorComponentes.SelectionChanged(
  const ADesigner: IDesigner; const ASelection: IDesignerSelections);
var
  NuevaSeleccion: TNodoArbolComponentes;
begin
  inherited;
  if (ASelection.Count = 1) and (ASelection.Items[0] is TComponent) then
  begin
    NuevaSeleccion := BuscarNodoPorComponente(ASelection.Items[0] as TComponent);
    if NuevaSeleccion <> nil then
      TreeView1.Selected := NuevaSeleccion;
  end;
end;

相关问题