给你参考一段代码,我就是这样做的,产生后的是系统默认位置,在界面上还可
以由用户拖动
CREATE proc DPosDefalt
as
--控件默认位置计算
--用户每增加一个字段,都要调用此方法来确定此控件的位置,并要增加一个相应的标签
--取得最后一个控件的位置,并看是否处在最后一个位置上,
--如是:标签:高=高+24,左=8,宽=20--文本框--高=高+24,左=28,宽=150
--不是:标签:高=高,左=左+2,宽=20--文本框--高=高,左=左+2,宽=150
--取得最后一行
declare @top int
declare @left int
declare @width int
declare @lst bit
declare @lst1 bit
declare @id int
declare @name varchar(20)
declare @oldname varchar(20)
--增加一个标签
select @top=0,@left=0,@width=0,@lst=0
select top 1
@top=isnull(高,0),
@left=isnull(左,0),
@width=isnull(宽,0),
@lst=isnull(lst,0),
@name=isnull(名称,'')
from ditempos order by id desc
if @name is null
begin
select top 1 @name=名称 from ditemdefine order by id
end
if @top=0 set @top=24
if @left=0 set @left=8
set @oldname=@name
if @lst=1--最后一个标签已处在最后一个位置
begin
set @name=@name+'Lb'
if @left+8>=488
set @lst1=1
else
set @lst1=0
select @top=@top+24,
@left=8,
@width=20
insert ditempos(名称,高,左,宽,lst,类型)
values(@name,@top,@left,@width,0,'Label')
end
else begin--最后一个标签已不在最后一个位置
set @name=@name+'Lb'
if @left+@width+2>=488
set @lst1=1
else
set @lst1=0
select @top=@top,
@left=@left+@width+2,
@width=20
insert ditempos(名称,高,左,宽,lst,类型)
values(@name,@top,@left,@width,@lst1,'Label')
end
select @top=0,@left=0,@width=0,@lst=0
--增加一个文本框
select top 1
@top=isnull(高,0),
@left=isnull(左,0),
@width=isnull(宽,0),
@lst=lst
from ditempos order by id desc
if @top=0 set @top=24
if @left=0 set @left=8
if @lst=1--已处在最后一个位置
begin
if @left+8>=488
set @lst1=1
else
set @lst1=0
select @top=@top+24,
@left=8,
@width=150
insert ditempos(名称,高,左,宽,lst,类型)
values(@oldname,@top,@left,@width,0,'DBEdit')
end
else begin--不在最后一个位置
if @left+8>=488
set @lst1=1
else
set @lst1=0
select @top=@top,
@left=@left+2+@width,
@width=150
insert ditempos(名称,高,左,宽,lst,类型)
values(@Oldname,@top,@left,@width,@lst1,'DBEdit')
end
GO