AlexDJ666 Цитата: Если в ListBox'е есть родительские элементы, то при нажатии на такой элемент выделение с дочерних снимается, а вот при повторном нажатии все дочерние не выделяются. Это можно как-то исправить?
-- можно изменить процедуру [more=CheckOnClick]
procedure CheckOnClick (Sender: TObject);
begin
if MouseY < ListBox.Items.Count then
begin
if ListBox.Checked[MouseY] then
ListBox.CheckItem(MouseY, coUncheck)
else
ListBox.CheckItem(MouseY, coCheckWithChildren);
end;
end; [/more]
По поводу скриншота - это не ко мне (я с графикой не люблю возиться).
По поводу полосы прокрутки - может и можно что-нибудь придумать, но не думаю, что это хоршая мысль. Все чекбоксы должны быть видны без прокрутки. Иначе пользователь может не обратить внимание на скрытые опции.
По поводу порядка страниц - посмотри хелп на CreateCustomPage. Если вкратце: первый параметр определяет, после какой страницы будет отображена создаваемая. Например:
Page1:=CreateCustomPage(wpWelcome, .... - т.е. Page1 будет отображена после wpWelcome
Page2:=CreateCustomPage(Page1.ID, .... - т.е. Page2 будет отображена после Page1
...и т.д.
antifire Цитата: При копировании файлов DATA оно виснет...
-- может лучше использовать принципиально другой [more=механизм]
#define MaxSlicesCount 255
#define OneSliceSize 46368582
#define i
[Setup]
AppName=My Program
AppVerName=My Program version 1.5
DefaultDirName={pf}\My Program
[Files]
Source: MyProg.exe; DestDir: {app}
Source: MyDll.dll; DestDir: {app}
Source: MyProg.chm; DestDir: {app}
#sub AddFile
Source: {code:GetFileName|{#i}}; DestDir: {app}; Check: NeedSlice({#i}); BeforeInstall: SearchSlice({#i}); ExternalSize: {#OneSliceSize}; Flags: external
#endsub
#for {i = 1; i <= MaxSlicesCount; i++} AddFile
[_Code]
var
MaxSlice, CurrentSlice: integer;
function GetFileName(Param: string): string;
begin
Result:= ExpandConstant('{src}\') +
Format('DATA.%.3d', [StrToInt(Param)]);
end;
function NeedSlice(current: integer): Boolean;
begin
if current <= MaxSlice then Result:= True;
end;
procedure SearchSlice(Param: integer);
var
FileName: string;
FileFound: boolean;
begin
FileName:= GetFileName(IntToStr(Param));
FileFound:= FileExists(FileName);
while not FileFound do
begin
if MsgBox('Вставьте диск №' + IntToStr(Param) +
' или нажмите Отмена для прекращения установки',
mbInformation, MB_RETRYCANCEL) = IDRETRY then
FileFound:= FileExists(FileName)
else
if ExitSetupMsgBox then
begin
WizardForm.CancelButton.OnClick(WizardForm.CancelButton);
Break;
end;
end;
end;
function GetMaxSlice(): integer;
var
FS: TFileStream;
str: string;
begin
str:= StringOfChar(' ', 1);
FS := TFileStream.Create(ExpandConstant('{src}\setup.exe'), fmOpenRead);
try
FS.Seek(8,soFromBeginning);
FS.ReadBuffer(str, 1);
Result:=Ord(str[1]);
finally
FS.Free;
end;
end;
procedure InitializeWizard();
begin
MaxSlice:= GetMaxSlice();
end;
procedure CancelButtonClick(CurPageID: Integer; var Cancel, Confirm: Boolean);
begin
if CurPageID = wpInstalling then
Confirm:= False;
end; [/more]?