这一问题有点难度,可能会挑战一等一高手来解决这问题,现请各
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楼: 接受答案了.