怎样在一个FORM中拖动另一个FORM ( 积分: 100 )

  • 主题发起人 主题发起人 mystudy
  • 开始时间 开始时间
M

mystudy

Unregistered / Unconfirmed
GUEST, unregistred user!
怎么让一个窗体只能在父窗体内拖动(不能拖出父窗体),MID的话好象放个控件子窗体就显示不出来了,郁闷
另外:怎么开发个模拟WIN桌面的东东,提供方法思路的另开帖300分
 
怎么让一个窗体只能在父窗体内拖动(不能拖出父窗体),MID的话好象放个控件子窗体就显示不出来了,郁闷
另外:怎么开发个模拟WIN桌面的东东,提供方法思路的另开帖300分
 
MDI 就可以了,Delphi中new->Projects->MDI Application
 
不成的,你在窗体上放个PANEL看下,CHILDMDI就被挡在后面了,提前不了
 
在移动前对鼠标的移动范围进行限定即可.

桌面的实现的思路:
自己编制一个控件
在控件中自己处理绘图与鼠标交互
对于每一个显示在桌面上的图标内容你可以构造一个基本的类
在类中规定好相应的结构域与行为
 
to abookdog
能不能详细点的,模拟桌面就要处理上面窗体拖动的问题
 
看这个合不合你用吧
unit Unit3;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls,
Forms, Dialogs;
type
TForm3 = class(TForm)
private
{ Private declarations }
protected
procedure CreateWindowHandle(const Params: TCreateParams);
override;
procedure DestroyWindowHandle;
override;
public
{ Public declarations }
end;

var
Form3: TForm3;
implementation
uses Unit2, Consts;
{$R *.DFM}
procedure TForm3.CreateWindowHandle(const Params: TCreateParams);
var
CreateStruct: TMDICreateStruct;
begin
if (FormStyle = fsMDIChild) and not (csDesigning in
ComponentState) then
begin
if (Form2 = nil) or (Form2.ClientHandle = 0)
then
raise EInvalidOperation.CreateRes(SNoMDIForm);
with CreateStructdo
begin
szClass := Params.WinClassName;
szTitle := Params.Caption;
hOwner := HInstance;
X := Params.X;
Y := Params.Y;
cX := Params.Width;
cY := Params.Height;
style := Params.Style;
lParam := Longint(Params.Param);
end;
WindowHandle := SendMessage(Form2.ClientHandle,
WM_MDICREATE, 0, Longint(@CreateStruct));
//Include(FFormState, fsCreatedMDIChild);
end else
inherited CreateWindowHandle(Params);
end;

procedure TForm3.DestroyWindowHandle;
begin
SendMessage(Form2.ClientHandle, WM_MDIDESTROY, Handle, 0);
inherited DestroyWindowHandle;
end;

end.

 
to app2001
大侠,你给我的是什么样的效果,没有测试出来[:(]
能不能发个例子给偶feitian78@163.com
 
让一个窗体只能在父窗体内拖动,这样行不?
try
Form2:=TForm2.Create(self);
Form2.Parent:=Form1;
Form2.Show;
except
Form2.Free;
end;
form1和form2的formstyle都是fsNormal
 
to qiuqiu133
这个方法还不错,简单实用[:D]
 
后退
顶部