我有5个在运行时创建的元素,如这些
NewButton := TImageViewer.Create(Self);
with NewButton do
begin
Parent := Self;
Bitmap.LoadFromStream(InStream);
Height := 80;
Width := 80;
tag:=leftx;
Position.X := leftx;
Position.Y := 5;
OnClick := WaitingButtonsClick;
Enabled := True;
Visible := True;
Name := 'but' + IntToStr(leftx);
end;
leftx := leftx+85;
因此元素有自己的名称和标记
现在用户点击图像后我必须更改加载的图像
所以我点击了
后的元素名称procedure TForm1.WaitingButtonsClick(Sender: TObject);
begin
// ShowMessage( (Sender as TAction).ActionComponent.Name );
ShowMessage(TImageViewer(Sender).Name);
// id := TButton(Sender).tag;
// showmessage('slm'+id.ToString);
end;
ok.after获取元素名称后如何更改目标文件或样式!?
答案 0 :(得分:2)
您似乎正在将TImageViewer
类型的对象投射到TButton
。
更改您的点击处理程序:
procedure TForm1.WaitingButtonsClick(Sender: TObject);
var
viewer: TImageViewer;
begin
viewer := Sender as TImageViewer;
// Change file or style of viewer
//viewer.Bitmap.LoadFromFile(....);
...
end;
通常,始终使用as
运算符强制转换对象:
viewer := Sender as TImageViewer
- 右
VS
viewer := TImageViewer(Sender)
- 错误
好处是as
操作员会为您执行安全检查,并在您尝试强制转换为不兼容类型时发出警告。
第二个变体只能在变量是普通指针(不是对象)时使用,而且很少需要。
建议不要在表单上使用位置来使组件名称唯一。
最好提出另一种组件名称创建方案。
例如,您可以在表单中定义计数器,并将该计数器添加到组件的名称中。