QQ那面板怎么做的啊?
是不是有专门的控件啊!
我想做个那样的东东
问题点数:50、回复次数:6Top
1 楼yoic(我是一棵菠菜,菜,菜,菜,菜,菜,菜)回复于 2003-06-03 15:45:19 得分 0
我做了类似的东西,功能还不完善,我有源代码,你要不要?Top
2 楼Response_chen(俺村俺最丑)回复于 2003-06-03 15:51:40 得分 0
要啊! 谢
发给俺吧!
response_chen@msn.comTop
3 楼yoic(我是一棵菠菜,菜,菜,菜,菜,菜,菜)回复于 2003-06-03 15:51:44 得分 0
主要函数在这里
ABtnInfo = Record
Button: TButton;
end;
BtnInfoArr = Array of ABtnInfo;
function TForm1.BtnUnderTv(Button: TButton; TreeView: TTreeView): boolean;
begin
Result := (Button.Top > TreeView.Top);//top越大,越在下面
end;{判断button是否在TreeView在下面}
function TForm1.GetBtnInfo(Button: TButton; TreeView: TTreeView;
Parent_Panel: TPanel): BtnInfoArr;
{ Get Informations of the buttons that between Button and TreeView }
var
i, j: integer;
MinTop, MaxTop: integer;
pABtnInfo : ^ABtnInfo;
begin
if Button.Top < TreeView.Top then begin
MinTop := Button.Top;
MaxTop := TreeView.Top;
end
else begin
MinTop := TreeView.Top;
MaxTop := Button.Top;
end;
j := 0;
for i := 0 to self.ComponentCount - 1 do
if (self.Components[i] is TButton)and
(TButton(self.Components[i]).Parent = Parent_Panel) then
if (TButton(self.Components[i]).Top < MaxTop)
and(TButton(self.Components[i]).Top > MinTop) then
Inc(j);
SetLength(Result, j);
j := 0;
for i := 0 to self.ComponentCount - 1 do
if (self.Components[i] is TButton)and
(TButton(self.Components[i]).Parent = Parent_Panel) then
if (TButton(self.Components[i]).Top < MaxTop)
and(TButton(self.Components[i]).Top > MinTop) then
begin
new(pABtnInfo);
pABtnInfo^.Button := TButton(self.Components[i]);
Result[j] := pABtnInfo^;
Dispose(pABtnInfo);
Inc(j);
end;
end;
procedure TForm1.TreeViewMoveTo(TreeView: TTreeView; Button: TButton;
Parent_Panel: TPanel);
var
i, Len: integer;
myArr : BtnInfoArr;
begin
myArr := GetBtnInfo(Button, TreeView, Panel1);
Len := Length(MyArr);
if Len <> 0 then
if BtnUnderTv(Button, TreeView) then begin
TreeView.Top := TreeView.Top + ((Len + 1)* Button.Height);
for i := 0 to Len - 1 do
myArr[i].Button.Top := myArr[i].Button.Top
- TreeView.Height;
Button.Top := Button.Top - TreeView.Height;
end
else begin
TreeView.Top := TreeView.Top - (Len * Button.Height);
for i := 0 to Len - 1 do
myArr[i].Button.Top := myArr[i].Button.Top + TreeView.Height;
end
else begin//中间没有间隔
//Button刚刚在TreeView的下面
if (TreeView.Top + TreeView.Height = Button.Top) then begin
TreeView.Top := TreeView.Top + Button.Height;
Button.Top := Button.Top - TreeView.Height;
end;
end;
//Button刚刚在TreeView的上面
if (Button.Top + Button.Height = TreeView.Top) then begin
for i := 0 to self.ComponentCount - 1 do
if (self.Components[i] is TTreeView)
and(TTreeView(self.Components[i]).Parent = Parent_Panel) then
begin
TTreeView(self.Components[i]).Visible := false;
TTreeView(self.Components[i]).Top := TreeView.Top;
end;
TreeView.Visible := true;
end;
end;
procedure TForm1.btn1Click(Sender: TObject);
begin
TreeViewMoveTo(tv1, btn1, Panel1);
end;Top
4 楼yoic(我是一棵菠菜,菜,菜,菜,菜,菜,菜)回复于 2003-06-03 15:53:37 得分 50
我的程序很乱,不好意思发给你,主要实现的代码在上面,希望对你有用,Top
5 楼hameizi(梅子)回复于 2003-06-03 16:32:11 得分 0
markTop
6 楼qxj(己所不欲,勿施于人;送人玫瑰,手有余香!)回复于 2003-06-03 16:40:45 得分 0
outlookbarTop



