delphi 无法在运行时更改子窗体的图标

66bbxpm5  于 2022-11-23  发布在  其他
关注(0)|答案(1)|浏览(262)

我的应用程序中有一个“搜索和替换”对话框,我想根据窗体的模式(即搜索或替换)更改窗体的图标。
这是我用来配置表单的例程:

procedure TfmFindReplace.SetFormMode(Mode: tConfigMode);
begin
  // Set up form for Search or Replace.
  if Mode = fcmCurrent then exit;
  fFormMode := Mode;
  pnlReplaceHldr.Visible := FormMode=fcmReplace;
  chkPromptOnReplace.Visible := FormMode=fcmReplace;
  rbCurrentProject.Visible := (fmProjManagerVT.IsOpen) and Not (Mode=fcmReplace);
  if mode=fcmFind then begin
    Caption := 'Find Text';
    Icon.LoadFromResourceName(HInstance, 'SEARCH');
    image1.Picture.Icon.LoadFromResourceName(HInstance, 'SEARCH')
  end
  else begin
    Caption := 'Replace Text';
    Icon.LoadFromResourceName(HInstance, 'REPLACE');
    image1.Picture.Icon.LoadFromResourceName(HInstance, 'REPLACE')
  end;
end;

我无法更改标题栏上的图标。为了检查是否从资源文件中选取了图标,我向窗体添加了一个图像,以检查是否正在重新加载它。
我使用的是 Delphi 11.1。

wwwo4jvm

wwwo4jvm1#

看起来我使用的主题覆盖了设置。(我使用的是Windows11的黑暗和光明主题)我的工作使表单类型之间的转换相当笨拙,这是:

StyleElements := [seFont,seClient];
  if mode=fcmFind then begin
    Caption := 'Find Text';
    Icon.LoadFromResourceName(HInstance, 'SEARCH');
  end
  else begin
    Caption := 'Replace Text';
    Icon.LoadFromResourceName(HInstance, 'REPLACE');
  end;
  StyleElements := [seFont,seClient,seBorder];

在设置样式元素时,窗体似乎被清除,然后重新绘制。有更干净的解决方案吗?

相关问题