delphi界面设计问题

时间:2022-04-16 05:38:44
做一个企业管理软件
原来采用了showModal形式,但是用户说不能最小化,不方便
现在欲改为mdi窗体,但是闪动得很厉害

请问还有没有其它解决办法了呃?

24 个解决方案

#1


改为置顶窗体
或者做过多页签的,用pagecontrol,把窗体贴在tabsheet上,不闪

#2


我是用PageControl来代替MDI功能的
MDI能不用尽量别用

#3


用PageControl

#4


处理得好的话,PageControl是比较好用的。而且用起来也很方便。

#5


软件界面比较多,用pageControl的话貌似也不太合适~

#6


那就用show的方式~~

#7


1.MDI的优势:可以同时查看和对比多比数据.也可以使用多开应用的方法来替代。
2.使用PageControl的TabSheet方式,这种方式表现也不错,可以方便的切换。
3.showmodual,独立性强。关键看你的应用了。
MDI,不会很闪啊!你的是怎么个闪情况?

#8


我很奇怪,也很郁闷
当执行下面这句的时候,
Application.CreateForm(Tfrmquality_material_check_KeHu, frmquality_material_check_KeHu);
frmquality_material_check_KeHu就显示出来了
按理说应该show一下才能显示啊~~

#9


引用 8 楼 zwk_9 的回复:
我很奇怪,也很郁闷 
当执行下面这句的时候, 
Application.CreateForm(Tfrmquality_material_check_KeHu, frmquality_material_check_KeHu); 
frmquality_material_check_KeHu就显示出来了 
按理说应该show一下才能显示啊~~



相同相反的道理。。 你HIDE下MDI的窗體看是什麼情況就知道為什麼不用SHOW了

#10


不明白MDI什么地方会闪了,我用了没见闪,下面有源代码

http://www.ahjoe.com/source/CardsMDI.asp

#11


引用 10 楼 ahjoe 的回复:
不明白MDI什么地方会闪了,我用了没见闪,下面有源代码 

http://www.ahjoe.com/source/CardsMDI.asp


把子窗体最大化一下就会闪了

#12


用pagecontrol试试、

#13


打开MDI子窗体,并且最大化时是闪的很厉害。

关注ing......

#14


我就纳闷了,为什么非得要做个覆盖整个桌面的主窗口呢?类似于QQ的模式不可以吗

#15


引用 14 楼 minizhuxianchun 的回复:
我就纳闷了,为什么非得要做个覆盖整个桌面的主窗口呢?类似于QQ的模式不可以吗


有点意思。。。说具体点?

#16


做过不少打破常规的应用界面,可以把主窗口做成小的功能面板(当然界面是要下一番工夫美化的),必要时加个托盘功能,可以显示\隐藏主功能面板,每打开一个功能窗口时调用SetWindowLong(Form.Handle,GWL_EXSTYLE,WS_EX_APPWINDOW);使得这个窗口在工具栏出现图标. 其实有很多客户并不想老是看你的占整个桌面的程序主窗口,因为他有时候也要做些其它的事情,给客户一个*吧(适当的分析一下客户的使用心理).
反正等等了.
打破规则,充分发挥自己的想象吧.

#17


MDI模式下不用设置子窗体的WindowState为wsMaximized,只要第一个子窗体是最大化的,其他所有新创建子窗体就自然会最大化,而且这样就不会闪了。

也就是说,只需要把第一个主界面子窗体设置成wsMaximized,其他的就不用处理了。

#18


如果模块比较多的话,用TabControl好了,动态加载Form到TabControl上

#19


当然,我是用PageControl,一开始并不生成所有的页面,而是点哪个模块名就生成哪个Page,手动关闭,如果点了已经存在的模块名,就自动切换到相应页面。

#20


估计不是窗体在闪,而是窗体中的控件在闪吧。
比如DBGrid之类的和数据集连接的控件,你刷新数据的时候,如果对里面的标题什么的进行设置,肯能会闪的很厉害的。

#21


delphi 2007 的DockTabSet非常好用!

#22


试试FOXMAIL的界面如何


public
     procedure CreateParams(var Params: TCreateParams); override;
    { Public declarations }
  end;
 .....
procedure TSupplierAndFittingManageForm.CreateParams(var Params: TCreateParams);
begin
  inherited;
  Params.ExStyle := Params.ExStyle or WS_EX_APPWINDOW;
end;

#23


引用 22 楼 shangxuan 的回复:
试试FOXMAIL的界面如何 
! 

Delphi(Pascal) code
public
     procedure CreateParams(var Params: TCreateParams); override;
    { Public declarations }
  end;
 .....
procedure TSupplierAndFittingManageForm.CreateParams(var Params: TCreateParams);
begin
  inherited;
  Params.ExStyle := Params.ExStyle or WS_EX_APPWINDOW;
end;


这个我不太懂,解释一下?有什么好处呐?

#24


我之前是用一个树形图,
要显示的都加到那树形图里,
点哪个显示哪个,
闪的问题应该还好

#1


改为置顶窗体
或者做过多页签的,用pagecontrol,把窗体贴在tabsheet上,不闪

#2


我是用PageControl来代替MDI功能的
MDI能不用尽量别用

#3


用PageControl

#4


处理得好的话,PageControl是比较好用的。而且用起来也很方便。

#5


软件界面比较多,用pageControl的话貌似也不太合适~

#6


那就用show的方式~~

#7


1.MDI的优势:可以同时查看和对比多比数据.也可以使用多开应用的方法来替代。
2.使用PageControl的TabSheet方式,这种方式表现也不错,可以方便的切换。
3.showmodual,独立性强。关键看你的应用了。
MDI,不会很闪啊!你的是怎么个闪情况?

#8


我很奇怪,也很郁闷
当执行下面这句的时候,
Application.CreateForm(Tfrmquality_material_check_KeHu, frmquality_material_check_KeHu);
frmquality_material_check_KeHu就显示出来了
按理说应该show一下才能显示啊~~

#9


引用 8 楼 zwk_9 的回复:
我很奇怪,也很郁闷 
当执行下面这句的时候, 
Application.CreateForm(Tfrmquality_material_check_KeHu, frmquality_material_check_KeHu); 
frmquality_material_check_KeHu就显示出来了 
按理说应该show一下才能显示啊~~



相同相反的道理。。 你HIDE下MDI的窗體看是什麼情況就知道為什麼不用SHOW了

#10


不明白MDI什么地方会闪了,我用了没见闪,下面有源代码

http://www.ahjoe.com/source/CardsMDI.asp

#11


引用 10 楼 ahjoe 的回复:
不明白MDI什么地方会闪了,我用了没见闪,下面有源代码 

http://www.ahjoe.com/source/CardsMDI.asp


把子窗体最大化一下就会闪了

#12


用pagecontrol试试、

#13


打开MDI子窗体,并且最大化时是闪的很厉害。

关注ing......

#14


我就纳闷了,为什么非得要做个覆盖整个桌面的主窗口呢?类似于QQ的模式不可以吗

#15


引用 14 楼 minizhuxianchun 的回复:
我就纳闷了,为什么非得要做个覆盖整个桌面的主窗口呢?类似于QQ的模式不可以吗


有点意思。。。说具体点?

#16


做过不少打破常规的应用界面,可以把主窗口做成小的功能面板(当然界面是要下一番工夫美化的),必要时加个托盘功能,可以显示\隐藏主功能面板,每打开一个功能窗口时调用SetWindowLong(Form.Handle,GWL_EXSTYLE,WS_EX_APPWINDOW);使得这个窗口在工具栏出现图标. 其实有很多客户并不想老是看你的占整个桌面的程序主窗口,因为他有时候也要做些其它的事情,给客户一个*吧(适当的分析一下客户的使用心理).
反正等等了.
打破规则,充分发挥自己的想象吧.

#17


MDI模式下不用设置子窗体的WindowState为wsMaximized,只要第一个子窗体是最大化的,其他所有新创建子窗体就自然会最大化,而且这样就不会闪了。

也就是说,只需要把第一个主界面子窗体设置成wsMaximized,其他的就不用处理了。

#18


如果模块比较多的话,用TabControl好了,动态加载Form到TabControl上

#19


当然,我是用PageControl,一开始并不生成所有的页面,而是点哪个模块名就生成哪个Page,手动关闭,如果点了已经存在的模块名,就自动切换到相应页面。

#20


估计不是窗体在闪,而是窗体中的控件在闪吧。
比如DBGrid之类的和数据集连接的控件,你刷新数据的时候,如果对里面的标题什么的进行设置,肯能会闪的很厉害的。

#21


delphi 2007 的DockTabSet非常好用!

#22


试试FOXMAIL的界面如何


public
     procedure CreateParams(var Params: TCreateParams); override;
    { Public declarations }
  end;
 .....
procedure TSupplierAndFittingManageForm.CreateParams(var Params: TCreateParams);
begin
  inherited;
  Params.ExStyle := Params.ExStyle or WS_EX_APPWINDOW;
end;

#23


引用 22 楼 shangxuan 的回复:
试试FOXMAIL的界面如何 
! 

Delphi(Pascal) code
public
     procedure CreateParams(var Params: TCreateParams); override;
    { Public declarations }
  end;
 .....
procedure TSupplierAndFittingManageForm.CreateParams(var Params: TCreateParams);
begin
  inherited;
  Params.ExStyle := Params.ExStyle or WS_EX_APPWINDOW;
end;


这个我不太懂,解释一下?有什么好处呐?

#24


我之前是用一个树形图,
要显示的都加到那树形图里,
点哪个显示哪个,
闪的问题应该还好