Ветеран
Сообщения: 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
|