Вопросик такой создаю в событии формы onShow компонент TRadioGroup, с помощью метода Create, активирую нужные мне свойства положение верхнего левого угла, перечень радио батонов,и выставляю свойство AutoSize в True, по идее размер должен группы должен изменится, и в в этом же событии формы у меня расчитывается размер формы чтобы визуально было красиво, но при появлении наблюдаю следующую картину
размер окна расчитан так как будто размер радиогруппы был не скомпонован Автосайзом, так вот когда удобнее расчитывать размер формы может есть событие после OnShow, когда AutoSize контрола уже отработает? или может кто подскажет навскидку как эту красоту можно реализовать более лудшим образом..
AutoSize
Модератор: Модераторы
Если я правильно понял, то вы во время исполнения программы выполняете расстановку компонент. Видимо Вы используете GTK или GTK-2. Если так, то придется расстановку компонент производить на "первый" paint.
Например:
Не знаю, правильно ли я понял вашу проблему, но в этом случае пока другого решения нет. Дело в том, что в GTK размер компонент вычисляется на Paint. Ошибка ли это Lazarus или особенность GTK, - пока не могу сказать.
Иногда правильно выставленные компоненты на TGroupBox разезжаются ( изменяется значение Left) если изменить размер TGroupBox. Приходится в этом случае дважды делать расстановку. Проблема пока не устранена.
Например:
Код: Выделить всё
//первоначально 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
- Откуда: г.Ставрополь
- Контактная информация:
Используем редактор привязок и забываем ручную расстановку компонентов как страшный сон.
Как использовать читаем здесь http://freepascal.ru/news//20090217213943/
Как использовать читаем здесь http://freepascal.ru/news//20090217213943/
alexs писал(а):Используем редактор привязок и забываем ручную расстановку компонентов как страшный сон.
Как использовать читаем здесь http://freepascal.ru/news//20090217213943/
Спасибо но сам виноват не дал весь расклад сразу, дело в том что у меня изначально компонентов на форме нету(я просто не знаю какие на момент вызова формы будут на ней компоненты и сколько все зависит от подтипа в котором вызывается форма),форма просто работает как конструктор и досозддает по входным параметрам перечень необходимых контролов, и раставляет их в том порядке как закажет вызывающий тип, т.е почти самодостаточна ))
попробую кое из чего что предлагает Logo, возможно подойдет
Да воспользовался советом Лого , алгоритм заработал как прежде, только наблюдается легкий анимационый спецэфект
особенно на медленых машинках, видно весь процес перерисовки окна с изменением размера, но это буквально не больше полсекунды, пока так оставлю надоест буду дальше тумкать
