在运行时创建TToolbuttons以及它在TToolbar中的显示方式有问题.
基本上我有一个工具栏里面有一些按钮.我可以在运行时创建按钮
并将父项设置为工具栏.但它们始终显示为工具栏中的第一个按钮.
我如何让它们出现在我的工具栏的末尾?或任何我想要他们的职位.
解决方法
这是一个通用过程,它使用工具栏,并添加一个按钮,并附带指定的标题:
procedure AddButtonToToolbar(var bar: TToolBar; caption: string); var newbtn: TToolButton; lastbtnidx: integer; begin newbtn := TToolButton.Create(bar); newbtn.Caption := caption; lastbtnidx := bar.ButtonCount - 1; if lastbtnidx > -1 then newbtn.Left := bar.Buttons[lastbtnidx].Left + bar.Buttons[lastbtnidx].Width else newbtn.Left := 0; newbtn.Parent := bar; end;
这里是该过程的示例用法:
procedure Button1Click(Sender: TObject); begin ToolBar1.ShowCaptions := True; //by default,this is False AddButtonToToolbar(ToolBar1,IntToStr(ToolBar1.ButtonCount)); end;
您的问题还会询问如何在TToolbar上的任意位置添加按钮.此代码与之前类似,但它也允许您指定要在其后显示新按钮的索引.
procedure AddButtonToToolbar(var bar: TToolBar; caption: string; addafteridx: integer = -1); var newbtn: TToolButton; prevBtnIdx: integer; begin newbtn := TToolButton.Create(bar); newbtn.Caption := caption; //if they asked us to add it after a specific location,then do so //otherwise,just add it to the end (after the last existing button) if addafteridx = -1 then begin prevBtnIdx := bar.ButtonCount - 1; end else begin if bar.ButtonCount <= addafteridx then begin //if the index they want to be *after* does not exist,//just add to the end prevBtnIdx := bar.ButtonCount - 1; end else begin prevBtnIdx := addafteridx; end; end; if prevBtnIdx > -1 then newbtn.Left := bar.Buttons[prevBtnIdx].Left + bar.Buttons[prevBtnIdx].Width else newbtn.Left := 0; newbtn.Parent := bar; end;
procedure Button1Click(Sender: TObject); begin //by default,"ShowCaptions" is false ToolBar1.ShowCaptions := True; //in this example,always add our new button immediately after the 0th button AddButtonToToolbar(ToolBar1,IntToStr(ToolBar1.ButtonCount),0); end;
祝你好运!