Я немного озадачен вашим решением, поэтому я привожу два моих взгляда на эту тему. В частности, я не понимаю, почему вы используете ManualFloat()
, и несколько строк спустя установите родительский элемент панели инструментов, что делает его не плавающим.
Вот решение для плавающей панели инструментов, использующее ManualFloat()
, Панель инструментов находится над формой в своем собственном временном TCustomDockForm
в указанном месте.
Запись, необходимая для ManualFloat()
, настроена для конечного местоположения, поэтому мерцание в неправильном месте отсутствует, и элемент управления сразу же правильно позиционируется.
procedure TForm1.Button3Click(Sender: TObject);
var
newToolbar : TToolbar;
newButton : TToolButton;
p: TPoint;
begin
newToolbar := TToolbar.Create(Self);
// calculate position in screen coordinates for the floating toolbar
p := ClientOrigin;
p.Offset(100, 100);
// and make it floating in final position
newToolbar.ManualFloat( Rect(p.X, p.Y, p.X+NewToolbar.Width, p.Y+newToolbar.Height) );
newToolbar.Visible := False; // really needed ?
// Then create the toolbar buttons
newToolbar.ShowCaptions := True;
newButton := TToolButton.Create(self);
newButton.Parent := newToolbar;
newButton.Caption := 'Test';
newToolbar.Visible := True;
end;
Однако, поскольку вам действительно требуется не плавающая панель инструментов, она просто расположена в любом месте формы (а не в верхней части формы по умолчанию) Лучшее решение - вообще пропустить ManualFloat()
и просто установить для свойства Align
панели инструментов значение alNone
. Это позволяет перемещать его в любое место в родительской форме.
procedure TForm1.Button4Click(Sender: TObject);
var
newToolbar : TToolbar;
newButton : TToolButton;
begin
newToolbar := TToolbar.Create(Self);
newToolbar.Align := alNone; // constructor sets it to alTop
newToolbar.Visible := False; // really needed ?
newToolbar.Parent := Self;
newToolbar.Left := 100;
newToolbar.Top := 200;
newToolbar.ShowCaptions := True;
newButton := TToolButton.Create(self);
newButton.Parent := newToolbar;
newButton.Caption := 'Test';
newToolbar.Visible := True; //
end;
Это дает вам тот же внешний вид, что и ваш собственный код, но пропускает ManualFloat()
.
Наконец, изображение для показать внешний вид:
Нижняя панель инструментов создана с Button4Click()