procedure TForm1.SpeedButton1Click(Sender: TObject);
var
  FormKcsp2:TForm1;
begin
  FormKcsp2:=TForm1.Create(nil);
  FormKcsp2.Top:=Form1.Top+20;
  FormKcsp2.Left:=Form1.Left+20;
  FormKcsp2.ShowModal;
  FormKcsp2.Free;
end;这样写只有A和B窗口互相错位,然后B里打开的窗口和B就会重叠,一直打开的窗口都重叠了,怎么办?

解决方案 »

  1.   


    FormKcsp2.Top:=Form1.Top+20;
      FormKcsp2.Left:=Form1.Left+20;这样设置只对第一个和第二个有效果,后面打开的就没效果了,重叠了
      

  2.   

    肯定后面的都重合了,
      FormKcsp2.Top:=Form1.Top+20;
      FormKcsp2.Left:=Form1.Left+20;
    除了第一个可以偏移20以外,后面的都是这个位置,因为都是和form1的位置做对比,能不重合吗
      

  3.   

    建议设两个全局变量 ScreenX ScreenY ,记录上一个窗口的位置。在此基础上,为每个窗口的FormX.Top和FormX.Lef。 
      

  4.   

    设定个全局变量来记录TOP和LEFT
      

  5.   

    procedure TForm1.SpeedButton1Click(Sender: TObject);
    var
      FormKcsp2:TForm1;
    begin
      FormKcsp2:=TForm1.Create(nil);
      FormKcsp2.Top:=self.Top+20;
      FormKcsp2.Left:=self.Left+20;
      FormKcsp2.ShowModal;
      //FormKcsp2.Free;
    end;
    这样每次赋值取的都是当前窗体的属性 而不死form1的属性了
    当前窗体的坐标属性每个都在变 而form1的坐标是固定的