Главная страница
    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.45 MB
Время: 0.005 c
2-1223287456
Dennis I. Komarov
2008-10-06 14:04
2008.11.16
MDI из DLL


15-1221658793
Terasbetoni
2008-09-17 17:39
2008.11.16
3Д-движок, работающий с кривыми поверхностями.


2-1223038816
fellow
2008-10-03 17:00
2008.11.16
onmouseup и dbgrid


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


15-1221830990
AlexDan
2008-09-19 17:29
2008.11.16
Книга..





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский