AutoSize

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

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

Ответить
Аватара пользователя
grigoreo
постоялец
Сообщения: 195
Зарегистрирован: 10.03.2009 14:43:43
Откуда: С нашей Раши

AutoSize

Сообщение grigoreo »

Вопросик такой создаю в событии формы onShow компонент TRadioGroup, с помощью метода Create, активирую нужные мне свойства положение верхнего левого угла, перечень радио батонов,и выставляю свойство AutoSize в True, по идее размер должен группы должен изменится, и в в этом же событии формы у меня расчитывается размер формы чтобы визуально было красиво, но при появлении наблюдаю следующую картину
размер окна расчитан так как будто размер радиогруппы был не скомпонован Автосайзом, так вот когда удобнее расчитывать размер формы может есть событие после OnShow, когда AutoSize контрола уже отработает? или может кто подскажет навскидку как эту красоту можно реализовать более лудшим образом..
Logo
постоялец
Сообщения: 464
Зарегистрирован: 20.08.2008 01:00:47

Сообщение Logo »

Если я правильно понял, то вы во время исполнения программы выполняете расстановку компонент. Видимо Вы используете 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. Приходится в этом случае дважды делать расстановку. Проблема пока не устранена.
Аватара пользователя
alexs
долгожитель
Сообщения: 4069
Зарегистрирован: 15.05.2005 23:17:07
Откуда: г.Ставрополь
Контактная информация:

Сообщение alexs »

Используем редактор привязок и забываем ручную расстановку компонентов как страшный сон.
Как использовать читаем здесь http://freepascal.ru/news//20090217213943/
Аватара пользователя
grigoreo
постоялец
Сообщения: 195
Зарегистрирован: 10.03.2009 14:43:43
Откуда: С нашей Раши

Сообщение grigoreo »

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


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

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

Да воспользовался советом Лого , алгоритм заработал как прежде, только наблюдается легкий анимационый спецэфект :D :D :D
особенно на медленых машинках, видно весь процес перерисовки окна с изменением размера, но это буквально не больше полсекунды, пока так оставлю надоест буду дальше тумкать
Ответить