AutoSize

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

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

AutoSize

Сообщение grigoreo » 31.03.2009 22:53:15

Вопросик такой создаю в событии формы onShow компонент TRadioGroup, с помощью метода Create, активирую нужные мне свойства положение верхнего левого угла, перечень радио батонов,и выставляю свойство AutoSize в True, по идее размер должен группы должен изменится, и в в этом же событии формы у меня расчитывается размер формы чтобы визуально было красиво, но при появлении наблюдаю следующую картину
размер окна расчитан так как будто размер радиогруппы был не скомпонован Автосайзом, так вот когда удобнее расчитывать размер формы может есть событие после OnShow, когда AutoSize контрола уже отработает? или может кто подскажет навскидку как эту красоту можно реализовать более лудшим образом..
Аватара пользователя
grigoreo
постоялец
 
Сообщения: 195
Зарегистрирован: 10.03.2009 15:43:43
Откуда: С нашей Раши

Re: AutoSize

Сообщение Logo » 01.04.2009 00:24:15

Если я правильно понял, то вы во время исполнения программы выполняете расстановку компонент. Видимо Вы используете GTK или GTK-2. Если так, то придется расстановку компонент производить на "первый" paint.
Например:
Код: Выделить всё
//первоначально fFirstPaint присвоено False
//Но после первого раза вызова FormPaint значение fFirstPaint меняем на True,
//чтобы больше не занимать ресурсы на расстановку и загрузку данных
procedure TfrmStaticAddress.FormPaint(Sender: TObject);
begin
  if not fFirstPaint then begin
    fFirstPaint := True; //Чтобы больше не выполнять этот код
    LoadAddrData; //Загружаем данные в визуальные компоненты
    ComponentsLayout; //Расставляем компоненты, чтобы было красиво
  end;

end;

Не знаю, правильно ли я понял вашу проблему, но в этом случае пока другого решения нет. Дело в том, что в GTK размер компонент вычисляется на Paint. Ошибка ли это Lazarus или особенность GTK, - пока не могу сказать.

Иногда правильно выставленные компоненты на TGroupBox разезжаются ( изменяется значение Left) если изменить размер TGroupBox. Приходится в этом случае дважды делать расстановку. Проблема пока не устранена.
Logo
постоялец
 
Сообщения: 464
Зарегистрирован: 20.08.2008 01:00:47

Re: AutoSize

Сообщение alexs » 01.04.2009 07:17:10

Используем редактор привязок и забываем ручную расстановку компонентов как страшный сон.
Как использовать читаем здесь http://freepascal.ru/news//20090217213943/
Аватара пользователя
alexs
долгожитель
 
Сообщения: 4060
Зарегистрирован: 15.05.2005 23:17:07
Откуда: г.Ставрополь

Re: AutoSize

Сообщение grigoreo » 01.04.2009 08:22:54

alexs писал(а):Используем редактор привязок и забываем ручную расстановку компонентов как страшный сон.
Как использовать читаем здесь http://freepascal.ru/news//20090217213943/


Спасибо но сам виноват не дал весь расклад сразу, дело в том что у меня изначально компонентов на форме нету(я просто не знаю какие на момент вызова формы будут на ней компоненты и сколько все зависит от подтипа в котором вызывается форма),форма просто работает как конструктор и досозддает по входным параметрам перечень необходимых контролов, и раставляет их в том порядке как закажет вызывающий тип, т.е почти самодостаточна ))

попробую кое из чего что предлагает Logo, возможно подойдет

Да воспользовался советом Лого , алгоритм заработал как прежде, только наблюдается легкий анимационый спецэфект :D :D :D
особенно на медленых машинках, видно весь процес перерисовки окна с изменением размера, но это буквально не больше полсекунды, пока так оставлю надоест буду дальше тумкать
Аватара пользователя
grigoreo
постоялец
 
Сообщения: 195
Зарегистрирован: 10.03.2009 15:43:43
Откуда: С нашей Раши


Вернуться в Lazarus

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

Сейчас этот форум просматривают: Yandex [Bot] и гости: 28

Рейтинг@Mail.ru