procedure TRobMainForm.TrayIconDblClick(Sender: TObject);
begin
case WindowState of
wsMinimized:
begin
Self.WindowState := wsNormal;
Self.Visible := True;
end;
wsNormal:
begin
Self.Visible := False;
Self.WindowState := wsMinimized;
end;
end;
end;
功能:双击窗体的托盘图标,如果窗体是正常的则窗体最小化并从任务栏隐藏,反之窗体还原并显示。
但是如果改成下面
wsMinimized:
begin
Self.Visible := True;
Self.WindowState := wsNormal;
end;
把Self.Visible := True放到前面,结果窗体可以正常最小化并隐藏,但从最小化还原时却出现cannot change visible in onshow or onhide错误。
7 个解决方案
#1
最小化了就行, 还设置Visible干啥
#2
你設置窗體visible你設置窗體visible為true觸發onshow事件,visible為false觸發onhide事件
#3
你们都没有讲到点子上
#4
换一组API试试呢:
显示:
showwindow(h,sw_show);//隐藏
showwindow(h,sw_restore);//恢复
隐藏:
closewindow(h);//最小化
showwindow(w, sw_hide);//隐藏
显示:
showwindow(h,sw_show);//隐藏
showwindow(h,sw_restore);//恢复
隐藏:
closewindow(h);//最小化
showwindow(w, sw_hide);//隐藏
#5
Visable为TRUE会触发OnShow;FALSE则触发OnHide。
所以你的设置值,需要在事件触发之前设置好。
试试以下代码:
wsMinimized:
begin
Self.Visible := True;
Self.WindowState := wsNormal;
end;
修改为:
wsMinimized:
begin
Self.WindowState := wsNormal;
Self.Visible := True;
end;
所以你的设置值,需要在事件触发之前设置好。
试试以下代码:
wsMinimized:
begin
Self.Visible := True;
Self.WindowState := wsNormal;
end;
修改为:
wsMinimized:
begin
Self.WindowState := wsNormal;
Self.Visible := True;
end;
#6
我试验后确实如此,我只是不知道为何如此。
#7
建议使用delphi的托盘控件TrayBarIcon;
它实用性很强,使用方便。
它实用性很强,使用方便。
#1
最小化了就行, 还设置Visible干啥
#2
你設置窗體visible你設置窗體visible為true觸發onshow事件,visible為false觸發onhide事件
#3
你们都没有讲到点子上
#4
换一组API试试呢:
显示:
showwindow(h,sw_show);//隐藏
showwindow(h,sw_restore);//恢复
隐藏:
closewindow(h);//最小化
showwindow(w, sw_hide);//隐藏
显示:
showwindow(h,sw_show);//隐藏
showwindow(h,sw_restore);//恢复
隐藏:
closewindow(h);//最小化
showwindow(w, sw_hide);//隐藏
#5
Visable为TRUE会触发OnShow;FALSE则触发OnHide。
所以你的设置值,需要在事件触发之前设置好。
试试以下代码:
wsMinimized:
begin
Self.Visible := True;
Self.WindowState := wsNormal;
end;
修改为:
wsMinimized:
begin
Self.WindowState := wsNormal;
Self.Visible := True;
end;
所以你的设置值,需要在事件触发之前设置好。
试试以下代码:
wsMinimized:
begin
Self.Visible := True;
Self.WindowState := wsNormal;
end;
修改为:
wsMinimized:
begin
Self.WindowState := wsNormal;
Self.Visible := True;
end;
#6
我试验后确实如此,我只是不知道为何如此。
#7
建议使用delphi的托盘控件TrayBarIcon;
它实用性很强,使用方便。
它实用性很强,使用方便。