在project里面用下面这句话隐藏窗体
Application.ShowMainForm:=False;但是show的时候不能正常我用的是
ShowWindow(WinHandle, SW_RESTORE);
SetForeGroundWindow(WinHandle);可以显示窗体,但是窗体上的什么也没有,Label控件可以正常显示,但是botton,edit,panel等都显示不出来不知道是什么原因,请大虾指教,有用分大派送!其实我用hide还是可以正常工作的,这里我主要想清楚Application.ShowMainForm:=False;不能正常地原因!
Application.ShowMainForm:=False;但是show的时候不能正常我用的是
ShowWindow(WinHandle, SW_RESTORE);
SetForeGroundWindow(WinHandle);可以显示窗体,但是窗体上的什么也没有,Label控件可以正常显示,但是botton,edit,panel等都显示不出来不知道是什么原因,请大虾指教,有用分大派送!其实我用hide还是可以正常工作的,这里我主要想清楚Application.ShowMainForm:=False;不能正常地原因!
解决方案 »
- 一个储存过程的小问题.
- 关于 for to do 响应问题
- OnKeyPress的参数?
- 简单的问题,哪位解答一下,加100分!!!!如何用一个过程释放不同的类!
- 其他数据库如何转换成sql-server???
- 问个超级弱弱问题,你们就当是捡分吧!
- 结婚照冲洗出来了.效果还算不错.继续散分.唉.只是不知道什么时候结婚....
- 谁有winzip、flashGet 的注册码?在线等待!
- 初学delphi,请教两个小问题?
- 无奈啊。。。DELPHI简直不能提高了。。。CSDN的朋友真的这么忙吗???
- 怎么将图片存储到数据库
- Delphi中如何引用SQL Server中的表,数据库该如何连接才能直接使用
>>SetForeGroundWindow(WinHandle);不知道你这两句代码是写在哪里,下面是我写的测试
program Project1;uses
Forms,
Windows,
Unit1 in 'Unit1.pas' {Form1};{$R *.res}var
bo:Boolean;
begin
Application.Initialize;
Application.CreateForm(TForm1, Form1); bo := application.MainForm.Visible;
if (bo) then
Application.MessageBox('visible is true','test'); application.ShowMainForm := false; bo := application.MainForm.Visible;
if (bo) then
Application.MessageBox('visible is true','test') ; //加上下面这两句,确实情况如LZ所讲,Label控件可以正常显示,
//但是botton,edit,panel等都显示不出来
ShowWindow(Application.MainForm.Handle, SW_RESTORE);
SetForeGroundWindow(Application.MainForm.Handle); //加上下面这一句,即可正常显示
//Form1.Show; bo := application.MainForm.Visible;
if (bo) then
Application.MessageBox('visible is true','test') ; Application.Run;end.
翻翻VCL: $(DELPHI)\source\vcl\Forms.pas,即可看出大概原因
1.创建一个TForm时,在TForm的构造函数,设置Visible := false
参见:constructor TCustomForm.CreateNew(AOwner: TComponent; Dummy: Integer);
2.这句代码Application.ShowMainForm := false;//
影响到TApplication.Run函数Forms.pas的 TApplication.Run函数中有...
if FShowMainForm then //因ShowMainForm := false;
if FMainForm.FWindowState = wsMinimized then
Minimize
else
FMainForm.Visible := True;//所以,FMainForm.Visible 不能设置为true
...3.到了这里,原因就很明显,就是当主窗口Form的visible为false的原因,当其为false时,会影响就其函数函数的消息处理,及窗口状态更新等,如$(DELPHI)\souce\vcl\controls.pas中的
procedure TWinControl.UpdateShowing;这个函数var
ShowControl: Boolean;
I: Integer;
begin
ShowControl := (FVisible or (csDesigning in ComponentState) and
not (csNoDesignVisible in ControlStyle)) and
not (csReadingState in ControlState);
if ShowControl then// 不再更新Form上的那些子控件,如Btn,edit
begin
if FHandle = 0 then CreateHandle;
if FWinControls <> nil then
for I := 0 to FWinControls.Count - 1 do
TWinControl(FWinControls[I]).UpdateShowing;
end;因TButton,TEdit都是从TWinControl这个VCL类继承的,所以有影响,
而TLabel是从TGraphicControl这个VCL类继承的,因而没有影响
procedure TWinControl.UpdateShowing;这个函数