Позиционирование объектов под win32 и под GTK2

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

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

Позиционирование объектов под win32 и под GTK2

Сообщение Troublemaker » 13.05.2008 13:03:07

Простенькая форма со статусбаром. Статусбар разбит на 4 секции. В три первых выводится кое-какой текст, четвертая свободна. Я решил в нее (поверх нее) рисовать прогрессбар.
Во время разработки прогресс болтается где-то на форме, и при form.create он ставится на нужное место:
Код: Выделить всё
  with CountDownBar do begin
    Top:=StatusBar1.Top+1;
    Height:=StatusBar1.Height-1;
    z:=0;
    //поскольку у последней секции размер неизвестен, то считаем сумму размеров
    //остальных секций и вычитаем ее из длины статусбара
    for i:=0 to StatusBar1.Panels.Count-2 do inc(z,StatusBar1.Panels[i].Width);
    Left:=z+1;
    Width:=StatusBar1.Width-z-1;
  end
Под виндой (и под wine) всё происходит так, как должно - прогресс занимает строго отведенное место и становится указанных размеров. Однако, после сборки проекта под ubuntu с gtk2, прогресс получается правильных размеров, но оказывается ниже нижнего края формы. Что может быть не так?
Аватара пользователя
Troublemaker
постоялец
 
Сообщения: 292
Зарегистрирован: 16.04.2008 13:00:44
Откуда: Биробиджан, Дальний Восток

Re: Позиционирование объектов под win32 и под GTK2

Сообщение B4rr4cuda » 13.05.2008 15:46:34

Troublemaker писал(а):Что может быть не так?

CountDownBar.Parent ? :wink:
Аватара пользователя
B4rr4cuda
энтузиаст
 
Сообщения: 693
Зарегистрирован: 28.12.2007 07:48:35

Re: Позиционирование объектов под win32 и под GTK2

Сообщение Troublemaker » 13.05.2008 15:58:35

B4rr4cuda писал(а):Parent ?

Пардон? Родитель - сама форма, а что?
И какая может быть связь, если проект один и тот же?
Аватара пользователя
Troublemaker
постоялец
 
Сообщения: 292
Зарегистрирован: 16.04.2008 13:00:44
Откуда: Биробиджан, Дальний Восток

Re: Позиционирование объектов под win32 и под GTK2

Сообщение B4rr4cuda » 13.05.2008 16:28:15

Имеется ввиду установка statusbar-a в качестве родителя (parent) для прогрессбара. :)
Код: Выделить всё
  progressbar1.Parent:=StatusBar1;

А там уж и позиционируй спокойно...
Аватара пользователя
B4rr4cuda
энтузиаст
 
Сообщения: 693
Зарегистрирован: 28.12.2007 07:48:35

Re: Позиционирование объектов под win32 и под GTK2

Сообщение Troublemaker » 13.05.2008 17:02:38

B4rr4cuda писал(а):Имеется ввиду установка statusbar-a в качестве родителя для прогрессбара.
обязательно попробую, но почему под виндой всё нормально? Получается, что в gtk2 статусбар не дает помещать другие объекты поверх себя? Прогресс оказывается не ПОД статусбаром, а географически южнее него. Сейчас воткну вывод координат и гляну.

Добавлено спустя 57 минут 50 секунд:
Не помогло: под виндой прогресс прижался к левому краю формы и к верхнему краю statusbar-a, несмотря на явное задание нужных .left и .top, под линуксом вообще куда-то потерялся:

SB1 - тот же статусбар, что и выше, просто сократил название.

Код: Выделить всё
  with CountDownBar do begin
    Parent:=SB1;
    Top:=2; //это же по отношению к родителю, да? а ни фига, и left и топ равны нулю под обеими ОС, что показывает содержимое STCoord (statictext) ниже
    Height:=SB1.Height-2; //сделал даже поуже маленько
//    Top:=SB1.Top+1;   изначальный вариант. вот для чего удобно дублирование строк одним хоткеем
//    Height:=SB1.Height-1;
    z:=0;
    for i:=0 to SB1.Panels.Count-2 do inc(z,SB1.Panels[i].Width);
    Left:=z+1;
    Width:=SB1.Width-z-1; //ширина считается и выставляется правильно
    STCoord.Caption:='L:'+IntToStr(left)+' T:'+IntToStr(top)+' H:'+IntToStr(Height)+' W:'+IntToStr(Width)+
      ' PL:'+IntToStr(z)+' ST:'+IntToStr(SB1.Top)+' SH:'+IntToStr(SB1.Height);
  end

Или я что-то неправильно сделал с .parent?
Аватара пользователя
Troublemaker
постоялец
 
Сообщения: 292
Зарегистрирован: 16.04.2008 13:00:44
Откуда: Биробиджан, Дальний Восток

Re: Позиционирование объектов под win32 и под GTK2

Сообщение Padre_Mortius » 13.05.2008 21:28:37

Parent := SB1.Panels[i]
где i - номер вашей секции.

Вроде бы так
Padre_Mortius
энтузиаст
 
Сообщения: 1265
Зарегистрирован: 29.05.2007 17:38:07
Откуда: Спб

Re: Позиционирование объектов под win32 и под GTK2

Сообщение Troublemaker » 15.05.2008 10:24:38

Padre_Mortius писал(а):Parent := SB1.Panels[i]
Не катит:

TProgressBar.Parent:=SB1.Panels[SB1.Panels.Count-1]

Выдает ошику при компиляции:

Error: Incompatible type for arg no. 1: Got "TStatusPanel", expected "TWinControl"

А при принудительном приведении типа напоминает:

Warning: Class types "TStatusPanel" and "TWinControl" are not related

И, хотя собирается, но при запуске вылетает с экспешном, что вполне логично
Аватара пользователя
Troublemaker
постоялец
 
Сообщения: 292
Зарегистрирован: 16.04.2008 13:00:44
Откуда: Биробиджан, Дальний Восток

Re: Позиционирование объектов под win32 и под GTK2

Сообщение v-t-l » 16.05.2008 11:23:17

v-t-l
энтузиаст
 
Сообщения: 734
Зарегистрирован: 13.05.2007 16:27:22
Откуда: Belarus

Re: Позиционирование объектов под win32 и под GTK2

Сообщение Troublemaker » 16.05.2008 16:15:25

v-t-l писал(а):Может пригодится?

Спасибо, очень познавательно. Вот только там делается то же самое, что проделал я, один в один, кроме создания нового компонента. Под виндой всё срастается, а вот под gtk2...
Аватара пользователя
Troublemaker
постоялец
 
Сообщения: 292
Зарегистрирован: 16.04.2008 13:00:44
Откуда: Биробиджан, Дальний Восток


Вернуться в Lazarus

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

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

Рейтинг@Mail.ru