Oto procedura generic że bierze pasek i dodaje przycisk do niej, z określonym podpisie left
:
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;
A oto przykład wykorzystania tej procedury:
procedure Button1Click(Sender: TObject);
begin
ToolBar1.ShowCaptions := True; //by default, this is False
AddButtonToToolbar(ToolBar1,IntToStr(ToolBar1.ButtonCount));
end;
Twoje pytanie również pyta, jak dodać przycisk do dowolnego miejsca na pasku TToolbar. Ten kod jest podobny do wcześniejszego, ale pozwala także określić, który indeks ma zostać wyświetlony jako nowy po.
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;
A oto przykład użycia tej poprawionej wersji:
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;
Powodzenia!
Aargh ... robimy to samo, poza tym, że przypisuję Parent przed wartością Left. I zepsuł układ. Twoja jest odwrotna, a teraz jestem szczęśliwy. Dzięki ! – Rick
@Roderick: cieszę się, że pomogło! Poprawiłem odpowiedź, dodając możliwość dodania do dowolnego punktu na pasku TToolbar. – JosephStyons
@JosephStyons: Dzięki za to. Próbowałem dodać TToolButtons w czasie wykonywania, a moja pierwsza próba nie działała poprawnie. Zamiast marnować czas, postanowiłem szybko wyszukać tutaj i znaleźć Twój wpis. Zaoszczędził mi trochę czasu. :) +1 –