当前位置:主页>仓库管理软件> 列表

这一问题有点难度,可能会挑战一等一高手来解决这问题,现请各

财务软件版1楼: 我这里有两个表单:一个A表单的formstyle设置为fsNormal,另一个B表单的formstyle设置为fsStayOnTop,我在A表单的EDIT编辑框输入数据时,在编辑框正下面弹出B表单(B表单.show)作为提示信息,结果发现B表单遮挡了输入法的提示框,如何才能让输入法的提示框显示在B表单上面显示而一B表单被遮挡????

2楼: 設置B表單為透明 如进销存管理软件

3楼: 不能将設置B表單為透明(如果设置为透明则B表单就失去了它的意义)

4楼: 其实你不需要将B Form 设置为 fsStayOnTop, 这样是会遮住输入法的,你可以将B Form 的parent 设置为 A Form就可以啦

5楼: 这是Delphi固有的毛病,设置Parent我也这么用,实在没别的办法了,但这个方法有后遗症

6楼: 别吓人,有什么后遗症? 用windows.setparent 或者 AForm.parent:=BForm, 两者有不同的效果

财务软件版7楼: 另外一个方法,没有限制Form2的大小, Form2为手动建立
unit Unit1;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;

type
TForm1 = class(TForm)


Button1: TButton;
Edit1: TEdit;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;

var
Form1: TForm1;

implementation

uses Unit2;

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
begin
if form2=nil then
begin
Form2:=Tform2.create(self);
showwindow(form2.Handle, sw_show);
end;
end;

end.

//***************************************
unit Unit2;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs;

type
TForm2 = class(TForm)
private
{ Private declarations }
public
{ Public declarations }
procedure CreateParams(var Params: TCreateParams); override;
end;

var
Form2: TForm2;

implementation

uses Unit1;

{$R *.dfm}

{ TForm2 }

procedure TForm2.CreateParams(var Params: TCreateParams);
begin
inherited CreateParams(Params);
params.WndParent:=Form1.handle;
end;

end.

8楼: xuxiaohan:
我按你的方法去试一下先。在此先多谢你!

9楼: 建议不用新窗体做提示框,而在本窗体上提示就够了

10楼: 后遗症就是,释放的时候如果解决不好会非法操作,而且在AForm上的显示位置不是很好设置,其它的就不说了

11楼: 如果只是为了提示为什么要用两个表单呢?不明白.

12楼: xuxiaohan:
当Form1为子窗体时,按你的方法做为什么会出错的?又如何改正? 如商品进销存

13楼: caiaj、xuxiaohan:
我现在也遇到了释放的时候出现非法操作问题,你们是如何解决的??

财务软件版14楼: 你把代码贴出来

15楼: 还有其他更好的办法吗?

16楼: 有,参照一些poppup控件的解法,不用form, 继承于TWincontrol,也不比Form麻烦, 不知道为什么用 form 作为下拉提示窗口。

17楼: 用Frame把,写法和Form一样,用的时候就和一个Panel一样的用

18楼: 接受答案了.