Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2008.11.16;
Скачать: CL | DM;

Вниз

Последовательность 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;
Скачать: CL | DM;

Наверх




Память: 0.47 MB
Время: 0.016 c
2-1223020665
Int23
2008-10-03 11:57
2008.11.16
Сколько тиков в часе в Вин64


15-1221641107
pushkin42
2008-09-17 12:45
2008.11.16
Вопрос по развертыванию


2-1223533622
Anel
2008-10-09 10:27
2008.11.16
Перемещение папки


2-1223273482
GlobalVariable
2008-10-06 10:11
2008.11.16
Где хранить настройки программы?


2-1223361774
feel
2008-10-07 10:42
2008.11.16
Написание БД на Delphi6 с нуля.