FORM,FORM我爱你!!!

Rayphrank 2002-05-12 08:30:49
有两个form A和B,

1、其中B只在A的范围里面显示,且可移动,
2、B被选中时,A的标题栏还是蓝色的,
3、B移动时,A始终不出现滚动条

满足这样三条的两个FORM怎样实现??

ps:
MDI可实现大部分功能,
但 B移动时,A会出现滚动条,而且MDIFORM里设置了AUTOSCROLL=FALSE也没用,即3不能完成,

不用MDI,设B的PARENT=A,滚动条可以没有,但B始终不能获得焦点,即2不能完成

如果不用MDI怎样实现?
用MDI了??
...全文
38 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
naughtyboy 2002-05-14
  • 打赏
  • 举报
回复
var
form2:tform;
begin
form2:=tform.create(application);
form2.parent:=form1;
form2.visible:=true;
end;
短歌如风 2002-05-14
  • 打赏
  • 举报
回复
对不起,前面写错了:
procedure TB.CreateParams(var Params: TCreateParams);
begin
inherited;
Params.WindowClass.lpfnWndProc:= @ MyMDIChildProc;
end;

ihihonline 2002-05-13
  • 打赏
  • 举报
回复
delphi下有一个例子的,为什么不看一下?
tazhch 2002-05-13
  • 打赏
  • 举报
回复
用MDI,拦堆了窗口的wm_changewindowpost消息
短歌如风 2002-05-13
  • 打赏
  • 举报
回复
A.FormStyle:=fsMDIForm
B.FormStyle:=fsMDIChild
在B的单元写一个函数(注意,不是B的成员函数):
function MyMDIChildProc(hwndMe:HWND;uMsg,wParam,lParam:DWORD):Integer;sdtcall;
begin
if (uMsg = WM_SIZE) or (uMsg = WM_MOVE) then
Result := DefWindowProc(hwndMe,uMsg,wParam,lParam)
else
Result := DefMDIChildProc(hwndMe,uMsg,wParam,lParam);
end;

覆盖B的CreateParams:
procedure TB.CreateParams(var Params: TCreateParams);
begin
inherited;
Params.WindowClass.lpWindowProc := @ MyMDIChildProc;
end;
这样就可以了。
由于我是在网吧上网,上面的代码可能有写错的地方,敬请原谅。
Rayphrank 2002-05-12
  • 打赏
  • 举报
回复
to:all

不能用PANEL阿,只能用form的,呵呵,而且最好不要用MDI,因为MDI主窗口的客户区很难控制
Rayphrank 2002-05-12
  • 打赏
  • 举报
回复
to:: jishiping(JSP 季世平)

我一开始也是这样写的,后来发现一个FORM的子form是不能获得焦点的,标题栏始终是灰的!!!
Rayphrank 2002-05-12
  • 打赏
  • 举报
回复
to:smhpnuaa

setparent(form2.handle,form1.handle);怎么用阿??哪个单元的阿,VCL里面好像也有这样一个函数阿,但两个函数的参数不同,编译通不过的阿
smhpnuaa 2002-05-12
  • 打赏
  • 举报
回复
photoshop的窗体结构就是这样!

你可以用Panel代替Form!

或者:Form1.autoscroll:=false;
setparent(form2.handle,form1.handle);
jishiping 2002-05-12
  • 打赏
  • 举报
回复
我使用BCB,Pascal的语法不熟。
TForm1.Create(TComponent* Owner);
begin
HorzScrollBar.Visible := false;
VertScrollBar.Visible := false;
Form2 := TForm2.Create(this);
Form2.Parent := this;
Form2.Visible := true;
end;
kmask 2002-05-12
  • 打赏
  • 举报
回复
b用panel来代替不行嘛???

看不出有什么理由一定要用FORM

5,388

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 开发及应用
社区管理员
  • VCL组件开发及应用社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧