CoolTrayIcon1用的是最简单的缩小到图标方法为TRUE
但是缩小后变成了2个图标,而且两个都可以操作。。
狂晕。。主窗体是通过加载进度,也就是程序启动的方式是用以下代码加载的。。
是不是那个原因呢?因为我试了好我方法,在偶的程序里就不行?
高人帮分析一下。。谢了{-------------------------------以下为加载主窗体代码----------------------------------------------}function EnumWndProc(hwnd: THandle; Param: Cardinal): Bool; stdcall;
var
  ClassName, WinModuleName: string;
  WinInstance: THandle;
begin
  Result := True;
  SetLength(ClassName, 100);
  GetClassName (hwnd, PChar (ClassName), Length (ClassName));
  ClassName := PChar(ClassName);
  if ClassName = Tmainform.ClassName then
  begin
    {10 获取目标窗口的模块名 }
    SetLength(WinModuleName, 200);
    WinInstance := GetWindowLong(hwnd, GWL_HINSTANCE);
    GetModuleFileName (WinInstance, PChar (WinModuleName),
      Length(WinModuleName));
    WinModuleName := PChar(WinModuleName); // 调整长度    {20 比较模块名 }
    if WinModuleName = ModuleName then
    begin
      FoundWnd := Hwnd;
      Result := False; // 如果已找到,停止继续列举
    end;
  end;
end;begin
  {10 检测是否互斥已存在 }
  HMutex := CreateMutex(nil, False, 'OneCopyMutex');
  if WaitForSingleObject(hMutex, 0) <> WAIT_TIMEOUT then
  begin
    Application.Initialize;
    Application.Title := '欢迎使用小牛百宝箱';
    {10.1 启动Splash屏幕 }
    //frmSplash := TfrmSplash.Create(nil);
    LogoForm:=TlogoForm.Create(LogoForm);
    try
      with LogoForm do
      begin
        BeginLoad;
        {10.2 装载主窗体}
        UpdateLoadStatus('载入数据..', 5);
        Application.CreateForm(TDataM, DataM);
  Application.CreateForm(TMainForm, MainForm);
  UpdateLoadStatus('启动主画面...', 10);
        Application.CreateForm(TMainForm, MainForm);
        {// 结束 }
        {装载完毕 }
        EndLoad;
      end;
    finally
      logoForm.Free;
    end;
    Application.Run;
  end
  else
  begin
    {20 获取当前模块名 }
    SetLength(ModuleName, 200);
    GetModuleFileName (HInstance, PChar(ModuleName), Length (ModuleName));
    ModuleName := PChar(ModuleName); // 调整长度    {30 列表最初实例的窗口 }
    EnumWindows(@EnumWndProc, 0);
    if FoundWnd <> 0 then
    begin
      {40 最后显示最初实例的窗口 }
      if not IsWindowVisible(FoundWnd) then
        PostMessage(FoundWnd,wm_App, 0, 0);
      SetForegroundWindow(FoundWnd);
    end;
  end;

解决方案 »

  1.   

    你用HelpAPI建立互斥对象看看……
      

  2.   

    很明显,你把主窗口Create了两次: Application.CreateForm(TMainForm, MainForm);这句写了两行。删掉一行就是了。
    估计Cooltrayicon是在FormCreate 的时候向托盘添加图标的。
      

  3.   

    很明显,你把主窗口Create了两次
      

  4.   

    很明显,你把主窗口Create了两次
      

  5.   

    汗啊。。那句好像是后面加的。。因为主窗体的FORM不知为何在DELPHI显示不出,我恢复了原来的那几个文件。。