| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Delphi: Общие вопросы > Проблема с размерами панелей |
| Автор: Zero 13.3.2005, 20:49 |
| Привет! Я сегодня столкнулся с одной странной вещью... Почему то когда бросишь на форму компонент TScrollBox со свойством align=alclient, ну и панельку чтобы был класс TPanel и начинаешь создаватьдинамически на нём панели (TPanel),то которые в свою очередь динамически приобретают сво-во align=albottom, то снизу становится не та которую поже создаёшь, а та которая имеет больший размер. Ну и вообще почему так происходит эта сортировка по размеру? Причём, если толко панели создаются на компоненте TScrollBox. Вот я тут воткнул пример, чтобы вам было понятнее и не мучится с созданием всего перечисленного. Тут на событие создания формы написано создание 2-ух панелей. Поэксперементируйте со свойством height, т.е. в верхней панели в начале стоит 30, а в нижней 40 ─ попробуйте в верхней поставить например 41, и она будет появлятся ниже чем нижняя. |
| Автор: ДЫМ 14.3.2005, 03:31 |
| Почему это происходит я не знаю. Наверное какой-то глюк при создании объектов в TForm.Create Но так ли это важно? Ведь если перенести твой код в обработчик события OnShow формы, то все заработает как надо. Только учти, что внизу будет та панель, которую ты создаешь первой (что очевидно). |
| Автор: mvdr 14.3.2005, 05:03 |
| это глюк возникающий при создании объекта. Мы в свое времчяс преподом боролись, так и не нашли решение из-за дефиита времени |
| Автор: RA 14.3.2005, 08:48 | ||
Cейчас некогда, разбираться в чём там дело ибо спешу в институт, а посему предлагаю простое решение:
PS: на будущее Zero и все остальные, - не нужно прилагать вместе с исходниками файлы типа *.cfg *.dof *.dcu *.ddp |
| Автор: Zero 14.3.2005, 12:44 | ||
Спасибо RAdmin, пусть пока будет хотябы так, но неплохо бы получить ответ (если кто знает) как это сделать правильно, и почему так происходит?
Я знаю, что *.dfm и *.pas впринципе достаточно, но мне влом было всё это удалять, ведь размер всё равно маленикий остаётся. |
| Автор: RA 14.3.2005, 19:06 | ||
Еще *.dpr не помешает Вообще можно выделить нужные файлы зажав CTRL и по клику правой кнопки мышки отправить их в архив. что касается данной проблемы, то я сейчас не в состоянии её решить ибо валюсь с ног, но спать незя Но нутром чую, что решение проблемы с созданием динамических контролов использующих Align, решается именно так как я продемонстриров ибо ибо.... долго описывать мои мысли. (если ошибаюсь то пусть меня поправят) |
| Автор: p0s0l 15.3.2005, 00:27 | ||||
Как другой вариант решения - в начало OnCreate поставить вызов Show...
(C1.Top + C1.Height) >= (C2.Top + C2.Height) В случае, если писать создание панелей в OnCreate, Top у всех панелек = 0, поэтому сортируются чисто по высоте (причем все скопом сортируются, при показе формы, а не при каждом создании панели)... Если же вначале показать форму, то при вставке каждой панели происходит перепозиционирование, но Top у уже вставленных панелек <> 0... |
| Автор: Zero 15.3.2005, 01:36 |
| p0s0l моё реальное приложени сразу начало глюкать, точнее при его запуске 7-ая форма запускается вместе с 1-ой, наверно лучше оставлю пока как есть, покрайней мере вроде работает... тьфу, тьфу... Что вообще означает процедура Show и Hide? А то в справке написано на английском, и как то трудно до меня доходит их смысл слов, а то я не все слова знаю точно... |
| Автор: RA 15.3.2005, 05:37 | ||
Во-во и я так думал. Собсно тогда Zero почемубы тебе не поставить свою процедуру создания динамических контролов в событие OnShow вместо OnCreate ? |
| Автор: p0s0l 15.3.2005, 10:31 | ||||
Если это не основная форма, то оставляй как есть... Или в OnShow засунь код... Иначе при запуске проги будет появляться на долю секунды форма...
|
| Автор: Zero 15.3.2005, 19:30 | ||||||||||
Теперь сделал, всё какбы работает, но
|