Показать сообщение отдельно
  #5  
Старый 13.11.2008, 14:52
lmikle lmikle вне форума
Модератор
 
Регистрация: 17.04.2008
Сообщения: 8,087
Версия Delphi: 7, XE3, 10.2
Репутация: 49089
По умолчанию

Собственно, тебе надо 2 вещи:
1. Создать массив ссылок на кнопки
2. Сделать процку, кторая их разместит по вертикали или горизонтали с учетом видимости.

Кстати, альтернативный вариант. Делать кнопки не невидимыми, а запрещенными (св-во Enabled). Тогда не придется их двигать.

А теперь к коду. Заполнение масива расчитано на то, что кнопки лежат на самой форме и являются TButton.

Код:
type
  TForm1 = class(TForm)
    Button1: TButton;
    Button2: TButton;
    Button3: TButton;
    Button4: TButton;
    Button5: TButton;
    procedure FormCreate(Sender: TObject);
    procedure FormDestroy(Sender: TObject);
  private
    { Private declarations }
    FButtonList : TList;
    procedure ReArrangeButtons(ASpace : Integer);
  public
    { Public declarations }
  end;

...

procedure TForm1.FormCreate(Sender: TObject);
var
  I : Integer;
begin
  FButtonList := TList.Create;
  For I := 0 To Self.ComponentCount-1 Do
    If Self.Components[i] Is TButton Then
      FButtonList.Add(Self.Components[i]);
end;

procedure TForm1.FormDestroy(Sender: TObject);
begin
  FButtonList.Free;
end;

procedure TForm1.ReArrangeButtons(ASpace: Integer);
var
  I : Integer;
  ALeft : Integer;
begin
  ALeft := ASpace; // Place of 1st button
  For I := 0 To FButtonList.Count-1 Do
    If TButton(FButtonList[i]).Visible Then
      Begin
        TButton(FButtonList[i]).Left := ALeft; // Place button
        ALeft := ALeft + TButton(FButtonList[i]).Width + ASpace; // Calc left of next button
      End;
end;
Ответить с цитированием