audiofeel
Старожил
при ошибке распаковки ISDone или ее отмене нужно изменить размер окна WizardForm.ClientHeight:= ScaleY...... ( в низ)
примерно как в некоторых инсталляторах при нажатии на кнопку "лицензионное соглашение" размер окна как бы выходит (выплывает) снизу.
как сделать ?
и еще . как вот этот пример "прикрутить" к ISDone
Как добавить TMemo на страницу установки, в котором будут отображаться извлекаемые файлы? FAQ по Inno Setup
еще вопрос. как сделать быстрый выбор диска установки. его буквы, как на скрине ??
все, разобрался я с TMEMO и "быстрый выбор диска" пример нашел на OSZONE
----------------------------------------
теперь проблема возникла
если нажать на кнопку "обзор" и выбрать диск установки например D:\, то эта информация не обновляется в ComboBox, то есть так и остается C:\
Как вот такое победить
и проблема с TMemo
распакуемые файлы видно на TMemo с эти все в порядке. но нужно (хотелось) там видеть и StatusLabel
, то есть инфу о том что происходит, если началась распаковка то "распаковка файлов" и идет список файлов. если установка доп. по , то идет сообщение об этой установке, если ошибка то инфа об ошибке, у меня не получается туда "всунуть" StatusLabel ни как
примерно как в некоторых инсталляторах при нажатии на кнопку "лицензионное соглашение" размер окна как бы выходит (выплывает) снизу.
как сделать ?
и еще . как вот этот пример "прикрутить" к ISDone
Как добавить TMemo на страницу установки, в котором будут отображаться извлекаемые файлы? FAQ по Inno Setup
еще вопрос. как сделать быстрый выбор диска установки. его буквы, как на скрине ??
все, разобрался я с TMEMO и "быстрый выбор диска" пример нашел на OSZONE
#define MyAppName "Моя программа"
;#define records
[Setup]
AppName=ISDone
AppVerName=ISDone
DefaultDirName={pf}\{#MyAppName}
DefaultGroupName={#MyAppName}
OutputDir=.
OutputBaseFilename=Setup
SolidCompression=true
DisableReadyPage=true
InternalCompressLevel=ultra64
Compression=lzma/ultra64
ExtraDiskSpaceRequired=5000000000
[Files]
Source: ISDone\unarc.dll; DestDir: {tmp}; Flags: dontcopy
Source: ISDone\ISDone.dll; DestDir: {tmp}; Flags: dontcopy
#ifdef records
Source: records.inf; DestDir: {tmp}; Flags: dontcopy
#endif
Source: ISDone\facompress.dll; DestDir: {tmp}; Flags: dontcopy
[Languages]
Name: russian; MessagesFile: compiler:Languages\Russian.isl
[UninstallDelete]
Type: filesandordirs; Name: {app}
;#define records
[Setup]
AppName=ISDone
AppVerName=ISDone
DefaultDirName={pf}\{#MyAppName}
DefaultGroupName={#MyAppName}
OutputDir=.
OutputBaseFilename=Setup
SolidCompression=true
DisableReadyPage=true
InternalCompressLevel=ultra64
Compression=lzma/ultra64
ExtraDiskSpaceRequired=5000000000
[Files]
Source: ISDone\unarc.dll; DestDir: {tmp}; Flags: dontcopy
Source: ISDone\ISDone.dll; DestDir: {tmp}; Flags: dontcopy
#ifdef records
Source: records.inf; DestDir: {tmp}; Flags: dontcopy
#endif
Source: ISDone\facompress.dll; DestDir: {tmp}; Flags: dontcopy
[Languages]
Name: russian; MessagesFile: compiler:Languages\Russian.isl
[UninstallDelete]
Type: filesandordirs; Name: {app}
Код:
const
DRIVE_UNKNOWN = 0;
DRIVE_NO_ROOT_DIR = 1;
DRIVE_REMOVABLE = 2;
DRIVE_FIXED = 3;
DRIVE_REMOTE = 4;
DRIVE_CDROM = 5;
DRIVE_RAMDISK = 6;
var
DiskChangesComboBox: TNewComboBox;
DrvLetters: array of string;
AFile: String;
FilesMemo: TNewMemo;
ISDonePB: TNewProgressBar;
ISDoneCancel: integer;
ISDoneError: boolean;
type
TCallback = function (OveralPct,CurrentPct: integer;CurrentFile,TimeStr1,TimeStr2,TimeStr3:PAnsiChar): longword;
function GetDriveType(lpDisk: string): integer;
external 'GetDriveTypeA@kernel32.dll stdcall';
function GetLogicalDriveStrings(nLenDrives: LongInt; lpDrives: string): integer;
external 'GetLogicalDriveStringsA@kernel32.dll stdcall';
function WrapCallback(callback:TCallback; paramcount:integer):longword;
external 'wrapcallback@files:ISDone.dll stdcall delayload';
function ISArcExtract(CurComponent:Cardinal; PctOfTotal:double; InName, OutPath, ExtractedPath: AnsiString; DeleteInFile:boolean; Password, CfgFile, WorkPath: AnsiString; ExtractPCF: boolean ):boolean;
external 'ISArcExtract@files:ISDone.dll stdcall delayload';
function Exec2 (FileName, Param: PAnsiChar;Show:boolean):boolean;
external 'Exec2@files:ISDone.dll stdcall delayload';
function ISFindFiles(CurComponent:Cardinal; FileMask:AnsiString; var ColFiles:integer):integer;
external 'ISFindFiles@files:ISDone.dll stdcall delayload';
function ISPickFilename(FindHandle:integer; OutPath:AnsiString; var CurIndex:integer; DeleteInFile:boolean):boolean;
external 'ISPickFilename@files:ISDone.dll stdcall delayload';
function ISGetName(TypeStr:integer):PAnsichar;
external 'ISGetName@files:ISDone.dll stdcall delayload';
function ISFindFree(FindHandle:integer):boolean;
external 'ISFindFree@files:ISDone.dll stdcall delayload';
function ISDoneInit(RecordFileName:AnsiString; TimeType,Comp1,Comp2,Comp3:Cardinal; WinHandle, NeededMem:longint; callback:TCallback):boolean;
external 'ISDoneInit@files:ISDone.dll stdcall';
function ISDoneStop:boolean;
external 'ISDoneStop@files:ISDone.dll stdcall';
function SuspendProc:boolean;
external 'SuspendProc@files:ISDone.dll stdcall';
function ResumeProc:boolean;
external 'ResumeProc@files:ISDone.dll stdcall';
//////////////////////////////////////////////////////////////////////////////////////////
function DriveTypeString(dtype: integer): string;
begin
case dtype of
DRIVE_NO_ROOT_DIR:;
DRIVE_REMOVABLE:;
DRIVE_FIXED:;
DRIVE_REMOTE:;
DRIVE_CDROM:;
DRIVE_RAMDISK:;
end;
end;
procedure DiskChangesComboBoxOnClick(Sender: TObject);
begin
WizardForm.DirEdit.Text := DrvLetters[DiskChangesComboBox.ItemIndex] + '{#MyAppName}';
end;
procedure FillCombo();
var
drivesletters, drive, sd: string;
n, lenletters, disktype, posnull: integer;
begin
sd := UpperCase(ExpandConstant('{sd}'));
drivesletters := StringOfChar(' ', 64);
lenletters := GetLogicalDriveStrings(63, drivesletters);
SetLength(drivesletters, lenletters);
Drive := '';
n := 0;
while ((Length(Drivesletters) > 0)) do begin
posnull := Pos(#0, Drivesletters);
if posnull > 0 then begin
Drive := UpperCase(Copy(Drivesletters, 1, posnull-1));
disktype := GetDriveType(Drive);
if ( not ( disktype = DRIVE_REMOVABLE ) ) then begin
if ( not ( disktype = DRIVE_REMOTE ) ) then
if ( not ( disktype = DRIVE_CDROM ) ) then
if ( not ( disktype = DRIVE_RAMDISK ) ) then
DiskChangesComboBox.Items.Add(Drive + DriveTypeString(disktype))
SetArrayLength(DrvLetters, N+1);
DrvLetters[n] := Drive;
if (Copy(Drive, 1, 2)=sd) then DiskChangesComboBox.ItemIndex := n;
n := n+1;
end
Drivesletters := Copy(Drivesletters, posnull+1, Length(Drivesletters));
end;
end;
DiskChangesComboBoxOnClick(DiskChangesComboBox);
end;
//////////////////////////////////////////////////////////////////////////////////////
function ProgressCallback(OveralPct,CurrentPct: integer; CurrentFile, TimeStr1, TimeStr2, TimeStr3: PAnsiChar): longword;
begin
if OveralPct<=1000 then ISDonePB.Position := OveralPct;
AFile := ExpandConstant('ExtractedFile: ') + (CurrentFile);
FilesMemo.Lines.Add(AFile)
Result := ISDoneCancel;
end;
procedure CancelButtonClick(CurPageID: Integer; var Cancel, Confirm: Boolean);
begin
if CurPageID = wpInstalling then begin
SuspendProc;
Confirm := False;
Cancel := False;
if ExitSetupMsgBox then ISDoneCancel:=1;
ResumeProc;
end;
end;
procedure InitializeWizard();
begin
with WizardForm do begin
DirEdit.SetBounds(ScaleX(43), ScaleY(81), ScaleX(290), ScaleY(21));
DirEdit.Text := WizardForm.DirEdit.Text+#0;
end;
DiskChangesComboBox := TNewComboBox.Create(WizardForm.SelectDirPage);
with DiskChangesComboBox do begin
Parent := WizardForm.DirEdit.Parent;
SetBounds(ScaleX(0), WizardForm.DirEdit.Top, ScaleX(40), WizardForm.DirEdit.Height);
Style := csDropDownList;
DiskChangesComboBox.OnClick := @DiskChangesComboBoxOnClick;
end
FilesMemo:= TNewMemo.Create(WizardForm);
with FilesMemo do begin
SetBounds(ScaleX(0), ScaleY(80), ScaleX(417), ScaleY(150));
WordWrap := False;
Parent := WizardForm.InstallingPage;
ScrollBars:= ssVertical;
ReadOnly := True;
Clear;
end;
FillCombo;
end;
procedure HideControls;
begin
ISDonePB.Hide;
end;
procedure CreateControls;
begin
ISDonePB := TNewProgressBar.Create(WizardForm);
with ISDonePB do begin
Parent := WizardForm.InstallingPage;
SetBounds(ScaleX(0), ScaleY(42), ScaleX(417), ScaleY(21));
Max := 1000;
end;
end;
Procedure CurPageChanged(CurPageID: Integer);
Begin
if (CurPageID = wpFinished) and ISDoneError then begin
WizardForm.Caption:= 'Ошибка распаковки!';
WizardForm.FinishedLabel.Font.Color:= clRed;
WizardForm.FinishedLabel.Caption:= SetupMessage(msgSetupAborted) ;
end;
end;
function CheckError:boolean;
begin
result:= not ISDoneError;
end;
procedure CurStepChanged(CurStep: TSetupStep);
begin
if CurStep = ssInstall then begin
WizardForm.ProgressGauge.Hide;
CreateControls;
ISDoneCancel:=0;
ExtractTemporaryFile('unarc.dll');
ExtractTemporaryFile('facompress.dll');
#ifdef records
ExtractTemporaryFile('records.inf');
#endif
ISDoneError:=true;
if ISDoneInit(ExpandConstant('{src}\records.inf'), $F777, 0, 0, 0, 0, 512, @ProgressCallback) then begin
repeat
if not ISArcExtract ( 0, 0, ExpandConstant('{src}\test.arc'), ExpandConstant('{app}'), '', false, '', '', ExpandConstant('{app}'), False) then break;
ISDoneError:=false;
until true;
ISDoneStop;
end;
HideControls;
end;
if (CurStep=ssPostInstall) and ISDoneError then begin
Exec2(ExpandConstant('{uninstallexe}'), '/VERYSILENT', false);
end;
end;
[/SPOILER]
теперь проблема возникла
если нажать на кнопку "обзор" и выбрать диск установки например D:\, то эта информация не обновляется в ComboBox, то есть так и остается C:\
Как вот такое победить
и проблема с TMemo
распакуемые файлы видно на TMemo с эти все в порядке. но нужно (хотелось) там видеть и StatusLabel
, то есть инфу о том что происходит, если началась распаковка то "распаковка файлов" и идет список файлов. если установка доп. по , то идет сообщение об этой установке, если ошибка то инфа об ошибке, у меня не получается туда "всунуть" StatusLabel ни как
Вложения
-
3.7 KB Просмотры: 97
-
452.5 KB Просмотры: 19
Последнее редактирование: