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;
但是缩小后变成了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;
估计Cooltrayicon是在FormCreate 的时候向托盘添加图标的。