我写了一个托盘图标的控件。其中有个控制图标的属性,问题属性声明如下:
private 
  FIcon: TIcon;
protected
  procedure SetIcon(Value: TIcon);
published
  property Icon: TIcon read FIcon write SetIcon;
public
  constructor Create(AOwner: TComponent); override;
 procedure UpDateTray(dwMessage: TOpType);constructor TTray.Create(AOwner: TComponent);
begin
  inherited;
  FIcon := TIcon.Create;
  FIcon.Assign(Application.Icon);
  。
end;procedure TTray.SetIcon(Value: TIcon);
begin
  if not Value.Empty then  //若赋值了就使用新图标
  begin
    FIcon.Assign(Value);
  end
  else
  begin
    FIcon.Assign(Application.Icon); //否则使用程序的图标
  end;
  if Enabled then
  begin
    UpDateTray(NIM_MODIFY);
  end;
end;procedure TTray.UpDateTray(dwMessage: TOpType);
begin
  if not (csDesigning in ComponentState) then
  begin
    if FEnabled then
    begin
      FTrayIconData.cbSize := SizeOf(TNotifyIconData);
      FTrayIconData.Wnd := FWnd;
      FTrayIconData.uID := 1;
      FTrayIconData.uFlags := NIF_ICON or NIF_MESSAGE or NIF_TIP;
      FTrayIconData.uCallbackMessage := WM_TRAYMSG;
      FTrayIconData.hIcon := FIcon.Handle;
      StrLCopy(FTrayIconData.szTip, PChar(FHint), 63);
      Shell_NotifyIcon(dwMessage, @FTrayIconData);
    end;
  end;
end;运行结果是能正常显示程序的图标。但是用编辑器选择另一个图标后,程序运行时还是原来的图标。搞了半天没有搞通,现在请教一下大家是怎么回事