ну раз очень хочется,
то вот короче рабочий код:
- Код: Выделить всё
procedure TForm1.FormCreate(Sender: TObject);
var
ProgressBarStyle: integer;
begin
WriteLN('FC');
StatusBar1.Panels[1].Style := psOwnerDraw;
FontSize := TComboBox.Create(StatusBar1);
FontSize.Parent := self;
StatusBar1.OnDrawPanel := @StatusBar1DrawPanel;
end;
procedure TForm1.StatusBar1DrawPanel(StatusBar: TStatusBar;
Panel: TStatusPanel; const Rect: TRect);
begin
if Panel = StatusBar.Panels[1] then
with FontSize do begin
Top := StatusBar.Top + Rect.Top;
Left := StatusBar.Left + Rect.Left;
Width := Rect.Right - Rect.Left;
Height := Rect.Bottom - Rect.Top;
end;
end;
Суть в том, что если назначить одной из панелей стиль psOwnerDraw (той, в которой должно быть выпадающее поле), а потом назначить обработчик OnDrawPanel, то можно будет в этом обработчике точно получить её (подпанели в статус-баре) координаты, т.е верхний левый угол, ширину и высоту, и потом просто назначить те же самые координаты для выпадающего поля. При этом нужно "родителем" поля назначать окно, а не статус-бар, а иначе поле так и будет магнититься к левому краю
И да, это значит, что "нормального" решения этой проблемы нет (или я не нашёл), кроме как делать свою панель внизу, т.е просто положить TPanel или что, и на ней уже располагать контролы как хочется