Форум: "Начинающим";
Текущий архив: 2008.11.16;
Скачать: [xml.tar.bz2];
ВнизПоследовательность GroupBox с Align = alTop Найти похожие ветки
← →
Alex_C (2008-10-07 11:09) [0]У меня на форме есть несколько GroupBox с Align = alTop. Во в время работы пользователь может скрывать неиспользуемый GroupBox. Однако, если в последствии он захочет его снова показать, то GroupBox"ы меняются местами (при чем не всегда - закономерность так и не понял). Как жестко привязять последовательность нескольких компонентов с alTop?
← →
{RASkov} © (2008-10-07 11:42) [1]> [0] Alex_C (07.10.08 11:09)
Реализацию выравнивания сделать самому...
Если самому лень, то можно играть со свойством Тор....
← →
{RASkov} © (2008-10-07 11:49) [2]> Реализацию выравнивания сделать самому...
Т.е. на OnResize Parent"а вызывать свой метод, например RealignCtrl, где и делать главную деталь задуманного....
Так же этот метод вызывать после скрытия/показа выровненных контролов....
В методе просто перебирать список контролов выставляя им нужные свойства(видимость, положение, размер)..... ну что-то примерно так....
← →
{RASkov} © (2008-10-07 12:30) [3]Вот примерно так:
procedure TForm1.MyTopAlignCtrl(ASpaceBorder, ASpaceTop: Integer);
var N, NTop: Integer;
begin
NTop:=ASpaceTop;
for N:=0 to ControlCount-1 do
if Controls[N].Visible then begin
Controls[N].SetBounds(ASpaceBorder, NTop, ClientWidth-ASpaceBorder*2, Controls[N].Height);
NTop:=NTop+Controls[N].Height+ASpaceTop;
end;
end;
//Вызовы
procedure TForm1.FormResize(Sender: TObject);
begin
MyTopAlignCtrl(25, 15); //25 - отступ от краев и 15 - между контролами по высоте... Дополнительный плюс в данном способе :)
end;
//Пример скрытия/показа...
procedure TForm1.CheckBox1Click(Sender: TObject);
begin
Controls[1].Visible:=not Controls[1].Visible; // Спятать/показать некий(1) контрол на форме....
FormResize(nil); //вызов ресайза формы, но лучше 25 и 15 из ресайза сделать свойствами или хотябы константами....
end;
Есть наверное и минусы в данной задумке.... например уже не учитывается стандартное выравнивание, более того оно должно быть выключено(alNone)
Если опять будут прыгать, то можно попробывать свой список контролов завести(вместо Controls)....
И да, в моем примере выравнивание выполняется контролам, родителем которых форма. но это не обязательно... Кстати метод можно подправить на:procedure TForm1.MyTopAlignCtrl(AParent: TWinControl; ASpaceBorder, ASpaceTop: Integer);
ну и чуть изменить реализацию....
Я помню, была уже такая тема давненько, но не помню как решили этот вопрос в прошлый раз.) Наверное всеж со свойством Top играли...
Страницы: 1 вся ветка
Форум: "Начинающим";
Текущий архив: 2008.11.16;
Скачать: [xml.tar.bz2];
Память: 0.45 MB
Время: 0.008 c