Как использовать TControl.Align: = alCustom? - PullRequest
6 голосов
/ 27 ноября 2009

Простой вопрос. У меня есть панель с 3 компонентами. Все они имеют Align: = alRight. Но проблема в том, что во время выполнения их порядок не совпадает с временем разработки.

Могу ли я вместо этого использовать alCustom для форсирования ордера на правой границе? Я использую D2007.

Ответы [ 3 ]

8 голосов
/ 27 ноября 2009

Да, вы можете сделать любой тип пользовательского выравнивания. Просто используйте события элемента управления OnAlignInsertBefore () и OnAlignPosition (). (Они существуют в Delphi 2007, но не публикуются, поэтому они не отображаются на вкладке «События» Инспектора объектов; вы все равно можете назначить их в коде. Я показал прототипы ниже; они описаны в файле справки TAlignInsertBeforeEvent и TAlignPositionEvent; вы также можете увидеть CustomAlignInsertBefore и OnAlignInsertBefore.)

TAlignInsertBeforeEvent = function(Sender: TWinControl; 
  C1, C2: TControl): Boolean of object;

TAlignPositionEvent = procedure(Sender: TWinControl; Control: TControl;
  var NewLeft, NewTop, NewWidth, NewHeight: Integer;
  var AlignRect: TRect; AlignInfo: TAlignInfo) of object;

Документация содержит довольно хорошие описания параметров для обоих методов.

В Delphi 2010 эти события публикуются и отображаются на вкладке «События» Инспектора объектов.

Я никогда не видел проблемы, с которой вы столкнулись, хотя ... Вы пытались установить все из них на alNone, переместить их от правого края, а затем заново установить Align: = alRight в том порядке, хотите, чтобы они появились?

3 голосов
/ 27 ноября 2009

Посмотрите на Demo2 из этой загрузки .

2 голосов
/ 27 ноября 2009

Вы не раскрываете большую часть проблемы под рукой, но я бы взглянул на панель управления.

При отбрасывании элементов управления на панели управления появляется новое свойство порядка «автоматически». Вы можете указать, каким образом должны проходить ваши элементы управления, и, если вы хотите, чтобы между элементами управления было расстояние, вы должны установить поля для каждого элемента управления.

Небольшое уточнение: новое 'свойство-порядок' на самом деле называется ControlIndex и появится в нижней части инспектора объектов.

...