Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  

Показать сообщение отдельно

Ветеран


Сообщения: 1133
Благодарности: 581

Профиль | Отправить PM | Цитировать


Лександер, конечно для каждого случая нужно смотреть, но вот накидал, как пример:
Пример

Код: Выделить весь код
[Setup]
AppName=My Program
AppVerName=My Program v 1.5
DefaultDirName={pf}\My Program
DefaultGroupName=My Program
OutputDir=.
Compression=lzma2/ultra
InternalCompressLevel=ultra
SolidCompression=yes

[Languages]
Name: rus; MessagesFile: compiler:Languages\Russian.isl

[Code]
var
  pnl: TPanel;

procedure CreateControl(const ParentControl: TWinControl);
// создаём все контролы
var
  i, lLeft, cLeft, aTop: Integer;
begin
  aTop := ScaleY(10);
  for i := 0 to 14 do
    begin
      with TLabel.Create(ParentControl) do
        begin
          Parent := ParentControl;
          AutoSize := True;
          Left := ScaleX(50);
          Top := aTop;
          Caption := 'TLabel № ' + IntToStr(i+1);
        end;
      with TCheckBox.Create(ParentControl) do
        begin
          Parent := ParentControl;
          SetBounds(ScaleX(200), aTop, ScaleX(100), ScaleY(14));
          Caption := 'TCheckBox № ' + IntToStr(i+1);
        end;
      with TEdit.Create(ParentControl) do
        begin
          Parent := ParentControl;
          SetBounds(ScaleX(350), aTop, ScaleX(100), ScaleY(20));
          Text := 'TEdit № ' + IntToStr(i+1);
        end;
      aTop := aTop + ScaleY(21);
    end;
end;

function DetectControl(const ParentControl: TWinControl): Boolean;
// проверяем наличие контролов
var
  i: Integer;
begin
  Result := False;
  for i := 0 to ParentControl.ControlCount-1 do
    if (ParentControl.Controls[i] is TLabel) or // проверяем, что контрол TLabel
      (ParentControl.Controls[i] is TCheckBox) or // проверяем, что контрол TCheckBox
      (ParentControl.Controls[i] is TEdit) then // проверяем, что контрол TEdit
      begin
        Result := True;
        Break;
      end;
end;

procedure ClearAllControl(const ParentControl: TWinControl);
// уничтожаем все контролы
var
  i: Integer;
begin
  { откровенно говоря с repeat..until ерись полнейшая... }
  repeat
    for i := 0 to ParentControl.ControlCount-1 do
      if (ParentControl.Controls[i] is TLabel) or // проверяем, что контрол TLabel
        (ParentControl.Controls[i] is TCheckBox) or // проверяем, что контрол TCheckBox
        (ParentControl.Controls[i] is TEdit) then // проверяем, что контрол TEdit
    { видимо какой-то глюк, но такое ощущение, что в этой процедуре не происходит задержки и
      цикл продолжается не дождавшись выполнения, в связи с чем некоторые контролы остаются }
          ParentControl.Controls[i].Free;
  until not DetectControl(ParentControl); // чтоб не зависнуть в цикле пришлось сделать доп. проверку
end;

procedure ButtonClick(Sender: TObject);
begin
  case TButton(Sender).Tag of
    0: CreateControl(pnl);
    1: ClearAllControl(pnl);
  end;
end;

procedure InitializeWizard();
var
  i, aLeft: Integer;
begin
  pnl := TPanel.Create(WizardForm);
  with pnl do
    begin
      Parent := WizardForm;
      Left := 0;
      Top := 0;
      Align := alClient;
    end;

  aLeft := ScaleX(100);
  for i := 0 to 1 do
    begin
      with TButton.Create(WizardForm) do
        begin
          Parent := pnl;
          SetBounds(aLeft, WizardForm.CancelButton.Top, ScaleX(150), ScaleY(23));
          case i of
            0: Caption := 'Создать все контролы';
            1: Caption := 'Разрушить все контролы';
          end;
          OnClick := @ButtonClick;
          Tag := i;
          aLeft :=  aLeft + ScaleX(160);
        end;
    end;
end;

procedure CancelButtonClick(CurPageID: Integer; var Cancel, Confirm: Boolean);
begin
  Confirm := False;
end;

-------
Книги нужны, чтобы напоминать человеку, что его оригинальные мысли не так уж новы... Авраам Линкольн.

Это сообщение посчитали полезным следующие участники:

Отправлено: 13:08, 07-04-2011 | #1259