Как вставить TComboBox в панель TStatusBar

Вопросы программирования и использования среды Lazarus.

Модератор: Модераторы

Как вставить TComboBox в панель TStatusBar

Сообщение gvido » 24.07.2013 07:06:27

Что-то не выходит вставить комбобокс в конкретную панель статус бара. Комбобокс вставляться то вставляется в сам статусбар, но сместить его науровень третьей панели никак не выходит. Комбобокс всегда остаеттся в крайнем левом положении. Вставляю так:
Код: Выделить всё
procedure TForm1.FormCreate(Sender: TObject);
var
   FontSize,FontName,ColChar: TComboBox;
begin
    FontSize:=TComboBox.Create(StatusBar1);
    StatusBar1.InsertControl(FontSize,2) ;
    FontSize.SetBounds(150,2,40,StatusBar1.Height-1);
утвж

Есть идеи как заставить сместиться компонент вправо?
Пробовал задавать значения FontSize.Left, FontSize.Top, FontSize.Heigth, FontSize.Width.
Срабатывает только изменение только в свойстве FontSize.Width. То есть ширину комбобокс можно задать.
gvido
постоялец
 
Сообщения: 188
Зарегистрирован: 28.03.2012 11:35:31

Re: Как вставить TComboBox в панель TStatusBar

Сообщение hinst » 24.07.2013 16:13:20

Вообще-то свойство Align отвечает за прифигачивание контрола к одной из сторон. Aligh := alRight можно попробовать, но не факт что в статус-баре сработает
Аватара пользователя
hinst
энтузиаст
 
Сообщения: 781
Зарегистрирован: 12.04.2008 18:32:38

Re: Как вставить TComboBox в панель TStatusBar

Сообщение gvido » 24.07.2013 16:50:30

hinst писал(а):Вообще-то свойство Align отвечает за прифигачивание контрола к одной из сторон. Aligh := alRight можно попробовать, но не факт что в статус-баре сработает


Не, это не то. Мне нужно вставить компонентв n-панель, а не прифигачить компонент к правой, левой или по центру. :(
gvido
постоялец
 
Сообщения: 188
Зарегистрирован: 28.03.2012 11:35:31

Re: Как вставить TComboBox в панель TStatusBar

Сообщение hinst » 24.07.2013 17:30:18

ну раз очень хочется,
то вот короче рабочий код:
Код: Выделить всё
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 или что, и на ней уже располагать контролы как хочется
Аватара пользователя
hinst
энтузиаст
 
Сообщения: 781
Зарегистрирован: 12.04.2008 18:32:38

Re: Как вставить TComboBox в панель TStatusBar

Сообщение gvido » 25.07.2013 02:36:37

Спасибо за краткий, но емкий ответ с примером. Буду разбирать и экспериментировать. :)
А может модифицировать- создать потомка TStatusBar с возможностью размещения вставки объектов в панельки?
gvido
постоялец
 
Сообщения: 188
Зарегистрирован: 28.03.2012 11:35:31

Re: Как вставить TComboBox в панель TStatusBar

Сообщение amateur » 25.07.2013 23:33:40

Интересно: а зачем Вам статус бар? Неужели из-за красивого треугольника справа :)
Аватара пользователя
amateur
энтузиаст
 
Сообщения: 552
Зарегистрирован: 03.08.2007 10:15:32

Re: Как вставить TComboBox в панель TStatusBar

Сообщение gvido » 25.07.2013 23:49:52

Я и сам думаю - Зачем? ;) Но с другой стороны - Почему бы и нет!?!? Понимаю, что изврат, но уж очень хочется попробовать.
gvido
постоялец
 
Сообщения: 188
Зарегистрирован: 28.03.2012 11:35:31

Re: Как вставить TComboBox в панель TStatusBar

Сообщение amateur » 26.07.2013 00:53:32

В статус бар можно добавить все что угодно и как угодно (не рисуя поверху). Я добавлял и формы. НО - намного проще и более эффективно использовать панели.

А изврат у Вас будет заманчивый :). Костыль на костыле и костылем ганяет (шутка). Ну если охота маяться то майтесь. Хотя: треугольник не стоит этого :wink:
Аватара пользователя
amateur
энтузиаст
 
Сообщения: 552
Зарегистрирован: 03.08.2007 10:15:32

Re: Как вставить TComboBox в панель TStatusBar

Сообщение gvido » 29.07.2013 09:13:14

ШьЁрт, побьерИ!!!! С добавлением одного чекбокса понятно, попробовал, немного переделал предложенный код. Работает. :)
Но... Вставить то нужно n количество контролов. То есть количество равное StatusBar1.Panels.Count.
Похоже придется таки воять наследника статусбара, или есть варианты попроще?
gvido
постоялец
 
Сообщения: 188
Зарегистрирован: 28.03.2012 11:35:31

Re: Как вставить TComboBox в панель TStatusBar

Сообщение amateur » 29.07.2013 18:27:57

дык наследник - самый нормальный и адекватный вариант...
Аватара пользователя
amateur
энтузиаст
 
Сообщения: 552
Зарегистрирован: 03.08.2007 10:15:32


Вернуться в Lazarus

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 240

Рейтинг@Mail.ru
cron