1

我需要通过单击来更改组件选项,但我需要为我动态创建的许多对象实现此功能。

我需要做这样的事情:

Object_I_clicked_on.brush.color:= clred; ...

这不好,因为会有很多组件并且所有组件都将具有相同的功能

坏的: shape1.brush.color:= clred;

有没有办法做到这一点?发件人(变量)等的东西。

4

1 回答 1

2

创建一个新的 VCL 项目。添加一个TShape。Ctrl+C 和 Ctrl+V 这样您就可以在表单上看到其中的许多。将它们全部选中,然后OnMouseDown在 Object Inspector 的 Events 选项卡上选择事件。键入ShapeMouseDown并按Enter。然后写

procedure TForm1.ShapeMouseDown(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
begin
  if Sender is TShape then
    TShape(Sender).Brush.Color := clHighlight;
end;

如果你有很多动态创建的控件,想法是一样的。例如,如果您有一个FShapes: array of TShapes包含动态创建的形状的数组,则需要为它们提供所有相同的事件处理程序:

for i := 0 to high(FShapes) do
  FShapes[i].OnMouseDown := ShapeMouseDown;
于 2013-05-11T16:49:03.743 回答