TImage - 按组件名称动态加载资源

Bia*_*nca -3 delphi components timage

我将把这个程序分配到OnMouseEnter.我有一些TImage会改变它的图片OnMouseEnter.在事件处理程序上更容易制作它的每个过程.但我不想重复相同的代码.

var
  i: Integer;
  CoName: TComponent;
  png: TPngImage;
  s: string;
begin
  s := '';
  for i := 1 to 16 do
  begin
    CoName := Form1.Components[i];
    if CoName is TImage then
    begin
      s := CoName.Name;
      Break;
    end;
  end;
  if Trim(s) <> '' then
  begin
    png := TPngImage.Create;
    try
      png.LoadFromResourceName(hInstance, 'ResImgA');
      // s.picture.Assign(png);  > i can not do this
    finally
      FreeAndNil(png);
    end;
  end;
end;
Run Code Online (Sandbox Code Playgroud)

我怎么能s进入TImage.Name

Tom*_*erg 7

OnMouseEnter所有TImage对象的事件设置为指向同一事件处理程序,并使用其Sender参数来标识TImage调用处理程序的对象:

procedure TForm38.ImageMouseEnter(Sender: TObject);
var
  ResName: string;
  im: TImage;
  png: TPngImage;
begin
  im := Sender as TImage;

  // if your image resources are named as 'Res' + name of TImage (eg. 'ImgA')
  // you can combine these as
  ResName := 'Res' + im.Name;

  png := TPngImage.Create;
  try
    png.LoadFromResourceName(hInstance, ResName);
    im.picture.Assign(png);
  finally
    png.Free;
  end;
end;
Run Code Online (Sandbox Code Playgroud)