Подскажите, как проверить стоит ли стоит артибут Только для чтения у текстового файла , если стоит, то убрать его ?
» Inno Setup (создание инсталяционных пакетов)
maxdddca123 -- зависит от того, интересуют ли тебя другие атрибуты. Но в общем случае, могу предложить два решения :
Решение через FindFirst :
Код:
function SetFileAttributes(lpFileName: string; dwFileAttributes: integer): integer;
external 'SetFileAttributesA@kernel32.dll stdcall';
procedure InitializeWizard();
var
FileName: string;
SR: TFindRec;
begin
FileName:= 'C:\TEMP\aaa.txt';
FindFirst(FileName, SR);
if (SR.Attributes and FILE_ATTRIBUTE_READONLY) = FILE_ATTRIBUTE_READONLY then
SetFileAttributes(FileName, FILE_ATTRIBUTE_NORMAL);
FindClose(SR);
end;
Решение через FindFirst :
Код:
function SetFileAttributes(lpFileName: string; dwFileAttributes: integer): integer;
external 'SetFileAttributesA@kernel32.dll stdcall';
procedure InitializeWizard();
var
FileName: string;
SR: TFindRec;
begin
FileName:= 'C:\TEMP\aaa.txt';
FindFirst(FileName, SR);
if (SR.Attributes and FILE_ATTRIBUTE_READONLY) = FILE_ATTRIBUTE_READONLY then
SetFileAttributes(FileName, FILE_ATTRIBUTE_NORMAL);
FindClose(SR);
end;
Genri,
Я сам не смогу Может поможешь переделать
Я сам не смогу Может поможешь переделать
Genri
Спасибо !
Спасибо !
Chanka -- [more=Пример здесь.]
Код:
[Setup]
AppName=My Program
AppVerName=My Program v.1.2
DefaultDirName={pf}\My Program
[Files]
Source: Files\*; DestDir: {app}
[Code]
var
Form: TSetupForm;
ListBox: TListBox;
CancelButton, DelButton: TButton;
procedure FillListBox(const fromDir, fileMask: string; Level: Byte);
var
FSR, DSR: TFindRec;
FindResult: Boolean;
APath: string;
MainLen: integer;
i: integer;
begin
MainLen:= Length(ExpandConstant('{app}'));
APath := AddBackslash(fromDir);
FindResult := FindFirst(APath + fileMask, FSR);
try
while FindResult do
begin
if FSR.Attributes and FILE_ATTRIBUTE_DIRECTORY = 0 then
begin
{files} i:= ListBox.Items.Add(Copy(APath + FSR.Name, MainLen+2, Length(APath + FSR.Name)));
end;
FindResult := FindNext(FSR);
end;
FindResult := FindFirst(APath + '*.*', DSR);
while FindResult do
begin
if ((DSR.Attributes and FILE_ATTRIBUTE_DIRECTORY) = FILE_ATTRIBUTE_DIRECTORY) and
not ((DSR.Name = '.') or (DSR.Name = '..')) then
begin
{Recursion} FillListBox(APath + DSR.Name, fileMask, Level+1);
end;
FindResult := FindNext(DSR);
end;
finally
FindClose(FSR);
FindClose(DSR);
end;
end;
procedure DeleteFiles();
begin
DelTree(ExpandConstant('{app}'), True, True, True);
end;
procedure BrowseRemainedFiles();
begin
Form:= CreateCustomForm;
Form.ClientWidth := ScaleX(500);
Form.ClientHeight := ScaleY(400);
Form.Caption := 'Files to delete';
Form.Center;
ListBox := TListBox.Create(Form);
ListBox.Left:= ScaleX(20);
ListBox.Top:= ScaleY(20);
ListBox.Width:= Form.ClientWidth - ScaleX(20*2);
ListBox.Height:= Form.ClientHeight - ScaleY(23*2 + 20);
ListBox.Parent:= Form;
CancelButton := TButton.Create(Form);
CancelButton.Parent := Form;
CancelButton.Width := ScaleX(75);
CancelButton.Height := ScaleY(23);
CancelButton.Left := Form.ClientWidth - CancelButton.Width - ScaleX(20);
CancelButton.Top := Form.ClientHeight - ScaleY(23 + 10);
CancelButton.Caption := 'Cancel';
CancelButton.ModalResult := mrCancel;
CancelButton.Cancel := True;
DelButton := TButton.Create(Form);
DelButton.Parent := Form;
DelButton.Width := ScaleX(75);
DelButton.Height := ScaleY(23);
DelButton.Left := CancelButton.Left - DelButton.Width - ScaleX(10);
DelButton.Top := Form.ClientHeight - ScaleY(23 + 10);
DelButton.Caption := 'Delete';
DelButton.ModalResult := mrOk;
Form.ActiveControl:= CancelButton;
FillListBox(ExpandConstant('{app}'), '*', 1);
if Form.ShowModal() = mrOk then DeleteFiles();
end;
procedure CurUninstallStepChanged(CurUninstallStep: TUninstallStep);
begin
if DirExists(ExpandConstant('{app}')) and (CurUninstallStep = usPostUninstall) then
BrowseRemainedFiles();
end;
Код:
[Setup]
AppName=My Program
AppVerName=My Program v.1.2
DefaultDirName={pf}\My Program
[Files]
Source: Files\*; DestDir: {app}
[Code]
var
Form: TSetupForm;
ListBox: TListBox;
CancelButton, DelButton: TButton;
procedure FillListBox(const fromDir, fileMask: string; Level: Byte);
var
FSR, DSR: TFindRec;
FindResult: Boolean;
APath: string;
MainLen: integer;
i: integer;
begin
MainLen:= Length(ExpandConstant('{app}'));
APath := AddBackslash(fromDir);
FindResult := FindFirst(APath + fileMask, FSR);
try
while FindResult do
begin
if FSR.Attributes and FILE_ATTRIBUTE_DIRECTORY = 0 then
begin
{files} i:= ListBox.Items.Add(Copy(APath + FSR.Name, MainLen+2, Length(APath + FSR.Name)));
end;
FindResult := FindNext(FSR);
end;
FindResult := FindFirst(APath + '*.*', DSR);
while FindResult do
begin
if ((DSR.Attributes and FILE_ATTRIBUTE_DIRECTORY) = FILE_ATTRIBUTE_DIRECTORY) and
not ((DSR.Name = '.') or (DSR.Name = '..')) then
begin
{Recursion} FillListBox(APath + DSR.Name, fileMask, Level+1);
end;
FindResult := FindNext(DSR);
end;
finally
FindClose(FSR);
FindClose(DSR);
end;
end;
procedure DeleteFiles();
begin
DelTree(ExpandConstant('{app}'), True, True, True);
end;
procedure BrowseRemainedFiles();
begin
Form:= CreateCustomForm;
Form.ClientWidth := ScaleX(500);
Form.ClientHeight := ScaleY(400);
Form.Caption := 'Files to delete';
Form.Center;
ListBox := TListBox.Create(Form);
ListBox.Left:= ScaleX(20);
ListBox.Top:= ScaleY(20);
ListBox.Width:= Form.ClientWidth - ScaleX(20*2);
ListBox.Height:= Form.ClientHeight - ScaleY(23*2 + 20);
ListBox.Parent:= Form;
CancelButton := TButton.Create(Form);
CancelButton.Parent := Form;
CancelButton.Width := ScaleX(75);
CancelButton.Height := ScaleY(23);
CancelButton.Left := Form.ClientWidth - CancelButton.Width - ScaleX(20);
CancelButton.Top := Form.ClientHeight - ScaleY(23 + 10);
CancelButton.Caption := 'Cancel';
CancelButton.ModalResult := mrCancel;
CancelButton.Cancel := True;
DelButton := TButton.Create(Form);
DelButton.Parent := Form;
DelButton.Width := ScaleX(75);
DelButton.Height := ScaleY(23);
DelButton.Left := CancelButton.Left - DelButton.Width - ScaleX(10);
DelButton.Top := Form.ClientHeight - ScaleY(23 + 10);
DelButton.Caption := 'Delete';
DelButton.ModalResult := mrOk;
Form.ActiveControl:= CancelButton;
FillListBox(ExpandConstant('{app}'), '*', 1);
if Form.ShowModal() = mrOk then DeleteFiles();
end;
procedure CurUninstallStepChanged(CurUninstallStep: TUninstallStep);
begin
if DirExists(ExpandConstant('{app}')) and (CurUninstallStep = usPostUninstall) then
BrowseRemainedFiles();
end;
А можно ли как-нибудь получить время запуска инсталлятора или что-то подобное! Допустим, хочу на станице wpInstalling перед началом установки вывести следующий меседж-бокс:
Время запуска --/--/-- --.--.--
Наачало инсталляции --/--/-- --.--.--
Приблизительно осталось (ну это я как бы из верхнего сам могу получить, добавив по желанию н-ное число часов, минут, секунд)!
Интересут только сами процедуры получения времени, пожалуйста, помогите!
Время запуска --/--/-- --.--.--
Наачало инсталляции --/--/-- --.--.--
Приблизительно осталось (ну это я как бы из верхнего сам могу получить, добавив по желанию н-ное число часов, минут, секунд)!
Интересут только сами процедуры получения времени, пожалуйста, помогите!
Genri,
Спасибо. Но как разместить текст и прочее я понятия не имею. Может когда у тебя будет время сможешь это реализовать
Спасибо. Но как разместить текст и прочее я понятия не имею. Может когда у тебя будет время сможешь это реализовать
iTASmania_Inc
Цитата:
Кстати, если кому интересно, инно имеет несколько встроенных, но не документированных функций. Например :
function PadL(s: String; I: LongInt): String;
function PadR(s: String; I: LongInt): String;
function PadZ(s: String; I: LongInt): String;
function StrGet(var S: String; I: Integer): Char;
procedure StrSet(c: Char; I: Integer; var s: String);
function Replicate(c: Char; I: LongInt): String;
Последняя фактически дублирует StringOfChar, а остальные могут представлять интерес. Только пользоваться надо осторожно, так как по крайней мере в некоторых не реализована обработка исключений. [more=Здесь]
Код:
[Setup]
AppName=My Program
AppVerName=My Program v.1.2
DefaultDirName={pf}\My Program
[Files]
Source: Files\*; DestDir: {app}
[Code]
procedure InitializeWizard();
var
str, strL, strR, strZ: string;
begin
str:= 'ABCDEF';
strL:= 'PadL: ' + '<' + PadL(str, 25) + '>';
strR:= 'PadR: ' + '<' + PadR(str, 25) + '>';
strZ:= 'PadZ: ' + '<' + PadZ(str, 25) + '>';
MsgBox('PadL, PadR, PadZ Demo :' + #10#10#13 +
str + #10#13 +
strL + #10#13 +
strR + #10#13 +
strZ, mbInformation, MB_OK);
MsgBox('StrGet Demo :' + #10#10#13 +
StrGet(str, 3), mbInformation, MB_OK);
StrSet('+', 2, str);
MsgBox('StrSet Demo :' + #10#10#13 +
str, mbInformation, MB_OK);
MsgBox('Replicate Demo :' + #10#10#13 +
Replicate('Z', 25), mbInformation, MB_OK);
end;
Цитата:
А можно ли как-нибудь получить время запуска инсталлятора-- см. в хелпе описание функции GetDateTimeString - возвращает текущие дату/время в нужном формате.
Кстати, если кому интересно, инно имеет несколько встроенных, но не документированных функций. Например :
function PadL(s: String; I: LongInt): String;
function PadR(s: String; I: LongInt): String;
function PadZ(s: String; I: LongInt): String;
function StrGet(var S: String; I: Integer): Char;
procedure StrSet(c: Char; I: Integer; var s: String);
function Replicate(c: Char; I: LongInt): String;
Последняя фактически дублирует StringOfChar, а остальные могут представлять интерес. Только пользоваться надо осторожно, так как по крайней мере в некоторых не реализована обработка исключений. [more=Здесь]
Код:
[Setup]
AppName=My Program
AppVerName=My Program v.1.2
DefaultDirName={pf}\My Program
[Files]
Source: Files\*; DestDir: {app}
[Code]
procedure InitializeWizard();
var
str, strL, strR, strZ: string;
begin
str:= 'ABCDEF';
strL:= 'PadL: ' + '<' + PadL(str, 25) + '>';
strR:= 'PadR: ' + '<' + PadR(str, 25) + '>';
strZ:= 'PadZ: ' + '<' + PadZ(str, 25) + '>';
MsgBox('PadL, PadR, PadZ Demo :' + #10#10#13 +
str + #10#13 +
strL + #10#13 +
strR + #10#13 +
strZ, mbInformation, MB_OK);
MsgBox('StrGet Demo :' + #10#10#13 +
StrGet(str, 3), mbInformation, MB_OK);
StrSet('+', 2, str);
MsgBox('StrSet Demo :' + #10#10#13 +
str, mbInformation, MB_OK);
MsgBox('Replicate Demo :' + #10#10#13 +
Replicate('Z', 25), mbInformation, MB_OK);
end;
Genri
Спасибо большое!!!
Спасибо большое!!!
Chanka Примерно что можно сделать см.личку.
Chanka
[more=Или сюда]
[Setup]
AppName=My Program
AppVerName=My Program [Version]
DefaultDirName={pf}\My Program
[Files]
Source: Files\*; DestDir: {app}
[Code]
var
Form: TSetupForm;
ListBox: TListBox;
CancelButton, DelButton: TButton;
UpImage, DownImage: TBitmapImage;
UpPanel, DownPanel: TPanel;
NameLabel, DescriptionLabel, BeforeListBoxLabel: TLabel;
DownTextLabel: TLabel;
procedure FillListBox(const fromDir, fileMask: string; Level: Byte);
var
FSR, DSR: TFindRec;
FindResult: Boolean;
APath: String;
MainLen: Integer;
i: Integer;
begin
MainLen:= Length(ExpandConstant('{app}'));
APath := AddBackslash(fromDir);
FindResult := FindFirst(APath + fileMask, FSR);
try
while FindResult do
begin
if FSR.Attributes and FILE_ATTRIBUTE_DIRECTORY = 0 then
begin
{files} i:= ListBox.Items.Add(Copy(APath + FSR.Name, MainLen+2, Length(APath + FSR.Name)));
end;
FindResult := FindNext(FSR);
end;
FindResult := FindFirst(APath + '*.*', DSR);
while FindResult do
begin
if ((DSR.Attributes and FILE_ATTRIBUTE_DIRECTORY) = FILE_ATTRIBUTE_DIRECTORY) and
not ((DSR.Name = '.') or (DSR.Name = '..')) then
begin
{Recursion} FillListBox(APath + DSR.Name, fileMask, Level+1);
end;
FindResult := FindNext(DSR);
end;
finally
FindClose(FSR);
FindClose(DSR);
end;
end;
procedure DeleteFiles();
begin
DelTree(ExpandConstant('{app}'), True, True, True);
end;
procedure BrowseRemainedFiles();
begin
Form := CreateCustomForm;
Form.ClientWidth := ScaleX(504);
Form.ClientHeight := ScaleY(358);
Form.Caption := 'Paradise - InstallShield Wizard';
Form.Center;
UpImage := TBitmapImage.Create(Form);
UpImage.Top := ScaleY(0);
UpImage.Left := ScaleX(0);
UpImage.Width := Form.ClientWidth;
UpImage.Height := ScaleY(59);
UpImage.BackColor := clWhite;
UpImage.Parent := Form;
DownImage := TBitmapImage.Create(Form);
DownImage.Top := ScaleY(61);
DownImage.Left := ScaleX(0);
DownImage.Width := Form.ClientWidth;
DownImage.Height := Form.ClientHeight - DownImage.Top;
DownImage.BackColor := $EEE9EB;
DownImage.Parent := Form;
UpPanel := TPanel.Create(Form);
UpPanel.Top := ScaleY(59);
UpPanel.Width := Form.ClientWidth;
UpPanel.Height := ScaleY(2);
UpPanel.BevelOuter := bvLowered;
UpPanel.Parent := Form;
NameLabel := TLabel.Create(Form);
NameLabel.Top := ScaleY(5);
NameLabel.Left := ScaleX(16);
NameLabel.Font.Style := [fsBold];
NameLabel.Caption := 'Внимание!';
NameLabel.Color := clWhite;
NameLabel.Parent := Form;
DescriptionLabel := TLabel.Create(Form);
DescriptionLabel.Top := ScaleY(24);
DescriptionLabel.Left := ScaleX(25);
DescriptionLabel.Caption := 'Папка установки содержит посторонние файлы. Удалить их?';
DescriptionLabel.Color := clWhite;
DescriptionLabel.Parent := Form;
BeforeListBoxLabel := TLabel.Create(Form);
BeforeListBoxLabel.Top := ScaleY(68);
BeforeListBoxLabel.Left := ScaleX(25);
BeforeListBoxLabel.Caption := 'Если Вы уверены, что хотите удалить папку установки со всеми указанными файлами,'#13
'нажмите Да.'
BeforeListBoxLabel.Color := $EEE9EB;
BeforeListBoxLabel.Parent := Form;
DownPanel := TPanel.Create(Form);
DownPanel.Left := ScaleX(65);
DownPanel.Top := ScaleY(308);
DownPanel.Width := ScaleX(435);
DownPanel.Height := ScaleY(2);
DownPanel.BevelOuter := bvLowered;
DownPanel.Parent := Form;
DownTextLabel := TLabel.Create(Form);
DownTextLabel.Top := ScaleY(302);
DownTextLabel.Caption := ' InstallShield';
DownTextLabel.Font.Color := $99A8AC;
DownTextLabel.Color := $EEE9EB;
DownTextLabel.Parent := Form;
ListBox := TListBox.Create(Form);
ListBox.Left := ScaleX(25);
ListBox.Top := ScaleY(108);
ListBox.Width := Form.ClientWidth - ScaleX(50);
ListBox.Height := ScaleY(180);
ListBox.Color := $EEE9EB;
ListBox.Parent := Form;
CancelButton := TButton.Create(Form);
CancelButton.Parent := Form;
CancelButton.Width := ScaleX(75);
CancelButton.Height := ScaleY(23);
CancelButton.Left := Form.ClientWidth - CancelButton.Width - ScaleX(20);
CancelButton.Top := Form.ClientHeight - ScaleY(23 + 10);
CancelButton.Caption := 'Нет';
CancelButton.ModalResult := mrCancel;
CancelButton.Cancel := True;
DelButton := TButton.Create(Form);
DelButton.Parent := Form;
DelButton.Width := ScaleX(75);
DelButton.Height := ScaleY(23);
DelButton.Left := CancelButton.Left - DelButton.Width - ScaleX(10);
DelButton.Top := Form.ClientHeight - ScaleY(23 + 10);
DelButton.Caption := 'Да';
DelButton.ModalResult := mrOk;
Form.ActiveControl := CancelButton;
FillListBox(ExpandConstant('{app}'), '*', 1);
if Form.ShowModal() = mrOk then DeleteFiles();
end;
procedure CurUninstallStepChanged(CurUninstallStep: TUninstallStep);
begin
if DirExists(ExpandConstant('{app}')) and (CurUninstallStep = usPostUninstall) then
BrowseRemainedFiles();
end;
[/more]
Добавлено:
Genri
А можно ли как-нибудь в твоём скрипте, показывающем посторонии файлы в директории программы использовать картинки? То есть как прикрепить на форму с лист-боксом картинку? В принципе, можно кинуть в инсталлятор и скопировать в {app}, но как заставить деинсталлятор не удалять её и в то же время не кидать в лист-бокс? А молча обходить?
[more=Или сюда]
[Setup]
AppName=My Program
AppVerName=My Program [Version]
DefaultDirName={pf}\My Program
[Files]
Source: Files\*; DestDir: {app}
[Code]
var
Form: TSetupForm;
ListBox: TListBox;
CancelButton, DelButton: TButton;
UpImage, DownImage: TBitmapImage;
UpPanel, DownPanel: TPanel;
NameLabel, DescriptionLabel, BeforeListBoxLabel: TLabel;
DownTextLabel: TLabel;
procedure FillListBox(const fromDir, fileMask: string; Level: Byte);
var
FSR, DSR: TFindRec;
FindResult: Boolean;
APath: String;
MainLen: Integer;
i: Integer;
begin
MainLen:= Length(ExpandConstant('{app}'));
APath := AddBackslash(fromDir);
FindResult := FindFirst(APath + fileMask, FSR);
try
while FindResult do
begin
if FSR.Attributes and FILE_ATTRIBUTE_DIRECTORY = 0 then
begin
{files} i:= ListBox.Items.Add(Copy(APath + FSR.Name, MainLen+2, Length(APath + FSR.Name)));
end;
FindResult := FindNext(FSR);
end;
FindResult := FindFirst(APath + '*.*', DSR);
while FindResult do
begin
if ((DSR.Attributes and FILE_ATTRIBUTE_DIRECTORY) = FILE_ATTRIBUTE_DIRECTORY) and
not ((DSR.Name = '.') or (DSR.Name = '..')) then
begin
{Recursion} FillListBox(APath + DSR.Name, fileMask, Level+1);
end;
FindResult := FindNext(DSR);
end;
finally
FindClose(FSR);
FindClose(DSR);
end;
end;
procedure DeleteFiles();
begin
DelTree(ExpandConstant('{app}'), True, True, True);
end;
procedure BrowseRemainedFiles();
begin
Form := CreateCustomForm;
Form.ClientWidth := ScaleX(504);
Form.ClientHeight := ScaleY(358);
Form.Caption := 'Paradise - InstallShield Wizard';
Form.Center;
UpImage := TBitmapImage.Create(Form);
UpImage.Top := ScaleY(0);
UpImage.Left := ScaleX(0);
UpImage.Width := Form.ClientWidth;
UpImage.Height := ScaleY(59);
UpImage.BackColor := clWhite;
UpImage.Parent := Form;
DownImage := TBitmapImage.Create(Form);
DownImage.Top := ScaleY(61);
DownImage.Left := ScaleX(0);
DownImage.Width := Form.ClientWidth;
DownImage.Height := Form.ClientHeight - DownImage.Top;
DownImage.BackColor := $EEE9EB;
DownImage.Parent := Form;
UpPanel := TPanel.Create(Form);
UpPanel.Top := ScaleY(59);
UpPanel.Width := Form.ClientWidth;
UpPanel.Height := ScaleY(2);
UpPanel.BevelOuter := bvLowered;
UpPanel.Parent := Form;
NameLabel := TLabel.Create(Form);
NameLabel.Top := ScaleY(5);
NameLabel.Left := ScaleX(16);
NameLabel.Font.Style := [fsBold];
NameLabel.Caption := 'Внимание!';
NameLabel.Color := clWhite;
NameLabel.Parent := Form;
DescriptionLabel := TLabel.Create(Form);
DescriptionLabel.Top := ScaleY(24);
DescriptionLabel.Left := ScaleX(25);
DescriptionLabel.Caption := 'Папка установки содержит посторонние файлы. Удалить их?';
DescriptionLabel.Color := clWhite;
DescriptionLabel.Parent := Form;
BeforeListBoxLabel := TLabel.Create(Form);
BeforeListBoxLabel.Top := ScaleY(68);
BeforeListBoxLabel.Left := ScaleX(25);
BeforeListBoxLabel.Caption := 'Если Вы уверены, что хотите удалить папку установки со всеми указанными файлами,'#13
'нажмите Да.'
BeforeListBoxLabel.Color := $EEE9EB;
BeforeListBoxLabel.Parent := Form;
DownPanel := TPanel.Create(Form);
DownPanel.Left := ScaleX(65);
DownPanel.Top := ScaleY(308);
DownPanel.Width := ScaleX(435);
DownPanel.Height := ScaleY(2);
DownPanel.BevelOuter := bvLowered;
DownPanel.Parent := Form;
DownTextLabel := TLabel.Create(Form);
DownTextLabel.Top := ScaleY(302);
DownTextLabel.Caption := ' InstallShield';
DownTextLabel.Font.Color := $99A8AC;
DownTextLabel.Color := $EEE9EB;
DownTextLabel.Parent := Form;
ListBox := TListBox.Create(Form);
ListBox.Left := ScaleX(25);
ListBox.Top := ScaleY(108);
ListBox.Width := Form.ClientWidth - ScaleX(50);
ListBox.Height := ScaleY(180);
ListBox.Color := $EEE9EB;
ListBox.Parent := Form;
CancelButton := TButton.Create(Form);
CancelButton.Parent := Form;
CancelButton.Width := ScaleX(75);
CancelButton.Height := ScaleY(23);
CancelButton.Left := Form.ClientWidth - CancelButton.Width - ScaleX(20);
CancelButton.Top := Form.ClientHeight - ScaleY(23 + 10);
CancelButton.Caption := 'Нет';
CancelButton.ModalResult := mrCancel;
CancelButton.Cancel := True;
DelButton := TButton.Create(Form);
DelButton.Parent := Form;
DelButton.Width := ScaleX(75);
DelButton.Height := ScaleY(23);
DelButton.Left := CancelButton.Left - DelButton.Width - ScaleX(10);
DelButton.Top := Form.ClientHeight - ScaleY(23 + 10);
DelButton.Caption := 'Да';
DelButton.ModalResult := mrOk;
Form.ActiveControl := CancelButton;
FillListBox(ExpandConstant('{app}'), '*', 1);
if Form.ShowModal() = mrOk then DeleteFiles();
end;
procedure CurUninstallStepChanged(CurUninstallStep: TUninstallStep);
begin
if DirExists(ExpandConstant('{app}')) and (CurUninstallStep = usPostUninstall) then
BrowseRemainedFiles();
end;
[/more]
Добавлено:
Genri
А можно ли как-нибудь в твоём скрипте, показывающем посторонии файлы в директории программы использовать картинки? То есть как прикрепить на форму с лист-боксом картинку? В принципе, можно кинуть в инсталлятор и скопировать в {app}, но как заставить деинсталлятор не удалять её и в то же время не кидать в лист-бокс? А молча обходить?
Вот пример для всех.Листбокс с картинкой
[more] Код:
[Setup]
AppName=My Program
AppVerName=My Program v.1.2
DefaultDirName={pf}\My Program
Outputdir=C:\
[Messages]
UninstalledMost=Программа была полностью удалена
[Files]
Source: {sys}\*.dll; DestDir: {app}; Flags: external ignoreversion;
Source: compiler:WizModernSmallImage.bmp; DestDir: {app}; Flags: ignoreversion uninsneveruninstall;
Code]
var Form: TSetupForm; ListBox: TListBox; CancelButton, DelButton: TButton; beveluninst, beveluninst2: TBevel;
panel: TPanel; UninsText, UninsText1, UninsText2: TNewStaticText;
BitmapFileName: String; BitmapImage: TBitmapImage;
procedure FillListBox(const fromDir, fileMask: string; Level: Byte);
var
FSR, DSR: TFindRec;
FindResult: Boolean;
APath: string;
MainLen: integer;
i: integer;
begin
MainLen:= Length(ExpandConstant('{app}'));
APath := AddBackslash(fromDir);
FindResult := FindFirst(APath + fileMask, FSR);
try
while FindResult do
begin
if FSR.Attributes and FILE_ATTRIBUTE_DIRECTORY = 0 then
begin
{files} i:= ListBox.Items.Add(Copy(APath + FSR.Name, MainLen+2, Length(APath + FSR.Name)));
end;
FindResult := FindNext(FSR);
end;
FindResult := FindFirst(APath + '*.*', DSR);
while FindResult do
begin
if ((DSR.Attributes and FILE_ATTRIBUTE_DIRECTORY) = FILE_ATTRIBUTE_DIRECTORY) and
not ((DSR.Name = '.') or (DSR.Name = '..')) then
begin
{Recursion} FillListBox(APath + DSR.Name, fileMask, Level+1);
end;
FindResult := FindNext(DSR);
end;
finally
FindClose(FSR);
FindClose(DSR);
end;
end;
procedure DeleteFiles();
begin
DelTree(ExpandConstant('{app}'), True, True, True);
end;
procedure BrowseRemainedFiles();
begin
Form:= CreateCustomForm;
Form.ClientWidth := ScaleX(497);
Form.ClientHeight := ScaleY(360);
Form.Caption := 'Удаление';
Form.Center;
panel:=TPanel.Create(Form);
panel.left:=0;
panel.top:=0;
panel.height:=59;
panel.color:=clWhite;
panel.width:=Form.Width;
panel.parent:=Form;
BitmapFileName := ExpandConstant('{app}\WizModernSmallImage.bmp');
BitmapImage := TBitmapImage.Create(Form);
BitmapImage.Left := Form.ClientWidth - ScaleX(57);
BitmapImage.Top := 2;
BitmapImage.AutoSize := True;
BitmapImage.Bitmap.LoadFromFile(BitmapFileName);
BitmapImage.Parent := Panel;
UninsText1:=TNewStaticText.Create(Form);
UninsText1.Left := 15;
UninsText1.Top := 10;
UninsText1.Width := 200;
UninsText1.Height := 14;
UninsText1.AutoSize := false;
UninsText1.WordWrap := true;
UninsText1.Font.Style := [fsBold];
UninsText1.Caption := 'Внимание!';
UninsText1.Color:=clWhite;
UninsText1.Parent := Form;
UninsText2:=TNewStaticText.Create(Form);
UninsText2.Left := 20;
UninsText2.Top := 25;
UninsText2.Width := 400;
UninsText2.Height := 30;
UninsText2.AutoSize := false;
UninsText2.WordWrap := true;
UninsText2.Caption := 'Папка установки содержит посторонние файлы. Удалить их?';
UninsText2.Color:=clWhite;
UninsText2.Parent := Form;
UninsText:=TNewStaticText.Create(Form);
UninsText.left:=20;
UninsText.top:=65;
UninsText.Autosize:=False
UninsText.WordWrap:=True;
UninsText.width:= Form.ClientWidth - ScaleX(20*2);
UninsText.height:=30;
UninsText.Caption:='Если Вы уверены, что хотите удалить папку установки со всеми файлами, нажмите Да.';
UninsText.parent:=Form;
beveluninst:=TBevel.Create(Form);
beveluninst.left:=0;
beveluninst.top:=59;
beveluninst.height:=1;
beveluninst.width:=Form.width;
beveluninst.parent:=Form;
beveluninst2:=TBevel.Create(Form);
beveluninst2.left:=0;
beveluninst2.top:=314;
beveluninst2.height:=2;
beveluninst2.width:=Form.width;
beveluninst2.parent:=Form;
ListBox := TListBox.Create(Form);
ListBox.Left:= ScaleX(20);
ListBox.Top:= ScaleY(100);
ListBox.Width:= Form.ClientWidth - ScaleX(20*2);
ListBox.Height:=211;
ListBox.Color:=clBtnFace;
ListBox.Parent:= Form;
CancelButton := TButton.Create(Form);
CancelButton.Parent := Form;
CancelButton.Width := ScaleX(75);
CancelButton.Height := ScaleY(23);
CancelButton.Left := Form.ClientWidth - CancelButton.Width - ScaleX(20);
CancelButton.Top := Form.ClientHeight - ScaleY(23 + 10);
CancelButton.Caption := 'Нет';
CancelButton.ModalResult := mrCancel;
CancelButton.Cancel := True;
DelButton := TButton.Create(Form);
DelButton.Parent := Form;
DelButton.Width := ScaleX(75);
DelButton.Height := ScaleY(23);
DelButton.Left := CancelButton.Left - DelButton.Width - ScaleX(10);
DelButton.Top := Form.ClientHeight - ScaleY(23 + 10);
DelButton.Caption := 'Да';
DelButton.ModalResult := mrOk;
Form.ActiveControl:= CancelButton;
FillListBox(ExpandConstant('{app}'), '*', 1);
if Form.ShowModal() = mrOk then DeleteFiles();
end;
procedure CurUninstallStepChanged(CurUninstallStep: TUninstallStep);
begin
if DirExists(ExpandConstant('{app}')) and (CurUninstallStep = usPostUninstall) then
BrowseRemainedFiles();
end;
[/more]
[more] Код:
[Setup]
AppName=My Program
AppVerName=My Program v.1.2
DefaultDirName={pf}\My Program
Outputdir=C:\
[Messages]
UninstalledMost=Программа была полностью удалена
[Files]
Source: {sys}\*.dll; DestDir: {app}; Flags: external ignoreversion;
Source: compiler:WizModernSmallImage.bmp; DestDir: {app}; Flags: ignoreversion uninsneveruninstall;
Code]
var Form: TSetupForm; ListBox: TListBox; CancelButton, DelButton: TButton; beveluninst, beveluninst2: TBevel;
panel: TPanel; UninsText, UninsText1, UninsText2: TNewStaticText;
BitmapFileName: String; BitmapImage: TBitmapImage;
procedure FillListBox(const fromDir, fileMask: string; Level: Byte);
var
FSR, DSR: TFindRec;
FindResult: Boolean;
APath: string;
MainLen: integer;
i: integer;
begin
MainLen:= Length(ExpandConstant('{app}'));
APath := AddBackslash(fromDir);
FindResult := FindFirst(APath + fileMask, FSR);
try
while FindResult do
begin
if FSR.Attributes and FILE_ATTRIBUTE_DIRECTORY = 0 then
begin
{files} i:= ListBox.Items.Add(Copy(APath + FSR.Name, MainLen+2, Length(APath + FSR.Name)));
end;
FindResult := FindNext(FSR);
end;
FindResult := FindFirst(APath + '*.*', DSR);
while FindResult do
begin
if ((DSR.Attributes and FILE_ATTRIBUTE_DIRECTORY) = FILE_ATTRIBUTE_DIRECTORY) and
not ((DSR.Name = '.') or (DSR.Name = '..')) then
begin
{Recursion} FillListBox(APath + DSR.Name, fileMask, Level+1);
end;
FindResult := FindNext(DSR);
end;
finally
FindClose(FSR);
FindClose(DSR);
end;
end;
procedure DeleteFiles();
begin
DelTree(ExpandConstant('{app}'), True, True, True);
end;
procedure BrowseRemainedFiles();
begin
Form:= CreateCustomForm;
Form.ClientWidth := ScaleX(497);
Form.ClientHeight := ScaleY(360);
Form.Caption := 'Удаление';
Form.Center;
panel:=TPanel.Create(Form);
panel.left:=0;
panel.top:=0;
panel.height:=59;
panel.color:=clWhite;
panel.width:=Form.Width;
panel.parent:=Form;
BitmapFileName := ExpandConstant('{app}\WizModernSmallImage.bmp');
BitmapImage := TBitmapImage.Create(Form);
BitmapImage.Left := Form.ClientWidth - ScaleX(57);
BitmapImage.Top := 2;
BitmapImage.AutoSize := True;
BitmapImage.Bitmap.LoadFromFile(BitmapFileName);
BitmapImage.Parent := Panel;
UninsText1:=TNewStaticText.Create(Form);
UninsText1.Left := 15;
UninsText1.Top := 10;
UninsText1.Width := 200;
UninsText1.Height := 14;
UninsText1.AutoSize := false;
UninsText1.WordWrap := true;
UninsText1.Font.Style := [fsBold];
UninsText1.Caption := 'Внимание!';
UninsText1.Color:=clWhite;
UninsText1.Parent := Form;
UninsText2:=TNewStaticText.Create(Form);
UninsText2.Left := 20;
UninsText2.Top := 25;
UninsText2.Width := 400;
UninsText2.Height := 30;
UninsText2.AutoSize := false;
UninsText2.WordWrap := true;
UninsText2.Caption := 'Папка установки содержит посторонние файлы. Удалить их?';
UninsText2.Color:=clWhite;
UninsText2.Parent := Form;
UninsText:=TNewStaticText.Create(Form);
UninsText.left:=20;
UninsText.top:=65;
UninsText.Autosize:=False
UninsText.WordWrap:=True;
UninsText.width:= Form.ClientWidth - ScaleX(20*2);
UninsText.height:=30;
UninsText.Caption:='Если Вы уверены, что хотите удалить папку установки со всеми файлами, нажмите Да.';
UninsText.parent:=Form;
beveluninst:=TBevel.Create(Form);
beveluninst.left:=0;
beveluninst.top:=59;
beveluninst.height:=1;
beveluninst.width:=Form.width;
beveluninst.parent:=Form;
beveluninst2:=TBevel.Create(Form);
beveluninst2.left:=0;
beveluninst2.top:=314;
beveluninst2.height:=2;
beveluninst2.width:=Form.width;
beveluninst2.parent:=Form;
ListBox := TListBox.Create(Form);
ListBox.Left:= ScaleX(20);
ListBox.Top:= ScaleY(100);
ListBox.Width:= Form.ClientWidth - ScaleX(20*2);
ListBox.Height:=211;
ListBox.Color:=clBtnFace;
ListBox.Parent:= Form;
CancelButton := TButton.Create(Form);
CancelButton.Parent := Form;
CancelButton.Width := ScaleX(75);
CancelButton.Height := ScaleY(23);
CancelButton.Left := Form.ClientWidth - CancelButton.Width - ScaleX(20);
CancelButton.Top := Form.ClientHeight - ScaleY(23 + 10);
CancelButton.Caption := 'Нет';
CancelButton.ModalResult := mrCancel;
CancelButton.Cancel := True;
DelButton := TButton.Create(Form);
DelButton.Parent := Form;
DelButton.Width := ScaleX(75);
DelButton.Height := ScaleY(23);
DelButton.Left := CancelButton.Left - DelButton.Width - ScaleX(10);
DelButton.Top := Form.ClientHeight - ScaleY(23 + 10);
DelButton.Caption := 'Да';
DelButton.ModalResult := mrOk;
Form.ActiveControl:= CancelButton;
FillListBox(ExpandConstant('{app}'), '*', 1);
if Form.ShowModal() = mrOk then DeleteFiles();
end;
procedure CurUninstallStepChanged(CurUninstallStep: TUninstallStep);
begin
if DirExists(ExpandConstant('{app}')) and (CurUninstallStep = usPostUninstall) then
BrowseRemainedFiles();
end;
[/more]
serg_aka_lain
Спасибо!
Как раз то, о чём спрашивал!
Спасибо!
Как раз то, о чём спрашивал!
serg_aka_lain
iTASmania_Inc
Цитата:
-- Не совсем. Вполне работоспособное решение. Но в поставленной задаче было еще одно условие :
Цитата:
На мой взгляд это лишнее. Я бы делал по методу serg_aka_lain. Но раз задача поставлена...
В принципе можно фильтровать по имени при заполнении листбокса. Но это хорошо если картинок 1-2. Поэтому мне больше нравится другой способ :
Добавляем картинки в проект:
Source: WizModernSmallImage.bmp; DestDir: {app}
В начале деинсталляции копируем во временную папку:
function InitializeUninstall(): Boolean;
begin
FileCopy(ExpandConstant('{app}\WizModernSmallImage.bmp'),
ExpandConstant('{tmp}\WizModernSmallImage.bmp'), True);
Result:= True;
end;
В нужный момент грузим файл из временной папки:
UpImage.Bitmap.LoadFromFile(ExpandConstant('{tmp}\WizModernSmallImage.bmp'));
Из папки с программой файл удалится штатным образом и значит в листбокс не попадет. А папка темп удалится автоматом после всей деинсталляции. Вот и все
iTASmania_Inc
Цитата:
Как раз то, о чём спрашивал!
-- Не совсем. Вполне работоспособное решение. Но в поставленной задаче было еще одно условие :
Цитата:
картинку ... не кидать в лист-бокс? А молча обходить?
На мой взгляд это лишнее. Я бы делал по методу serg_aka_lain. Но раз задача поставлена...
В принципе можно фильтровать по имени при заполнении листбокса. Но это хорошо если картинок 1-2. Поэтому мне больше нравится другой способ :
Добавляем картинки в проект:
Source: WizModernSmallImage.bmp; DestDir: {app}
В начале деинсталляции копируем во временную папку:
function InitializeUninstall(): Boolean;
begin
FileCopy(ExpandConstant('{app}\WizModernSmallImage.bmp'),
ExpandConstant('{tmp}\WizModernSmallImage.bmp'), True);
Result:= True;
end;
В нужный момент грузим файл из временной папки:
UpImage.Bitmap.LoadFromFile(ExpandConstant('{tmp}\WizModernSmallImage.bmp'));
Из папки с программой файл удалится штатным образом и значит в листбокс не попадет. А папка темп удалится автоматом после всей деинсталляции. Вот и все
Genri
Цитата:
Нет, не всё!
Вы неподражаемы, бесподобны! Вы - гений, сэр!!!
Теперь всё!
Цитата:
Вот и все
Нет, не всё!
Вы неподражаемы, бесподобны! Вы - гений, сэр!!!
Теперь всё!
Цитата:
Вы неподражаемы, бесподобны! Вы - гений, сэр!!!
От меня тоже!
Если появится еще один желающий мне +1 поставить - админ мне сразу +10 влепит. Так что благодарности просьба наливать в личку
Genri
Извиняюсь, что не в личку!
А что из благодарностей Вы предпочитаете пить?
Просто, чтобы все знали Ваши предпочтения!
Добавлено:
Chanka
Если интересно, то исправленный вариант (с картинкой) можно взять отседова:
[more=Скачать]http://data.cod.ru/2051833290[/more]
Извиняюсь, что не в личку!
А что из благодарностей Вы предпочитаете пить?
Просто, чтобы все знали Ваши предпочтения!
Добавлено:
Chanka
Если интересно, то исправленный вариант (с картинкой) можно взять отседова:
[more=Скачать]http://data.cod.ru/2051833290[/more]
Русификатор от Ночного Волка стоит оджидать?
Спасибо вам всем друзья. Получилось почти один в один. Но можно ли кое-что подправить
http://img263.imageshack.us/my.php?image=innouninsah7.jpg
Это пример от iTASmania_Inc
на
http://img256.imageshack.us/my.php?image=innoreadyinstallyi1.jpg
Это страница инно сетап ВСЁ ГОТОВО К УСТАНОВКЕ
то есть чтобы содержимое окна можно было всё выделить и скопировать то есть это окно сделать как в инно на странице ВСЁ ГОТОВО К УСТАНОВКЕ
Да и еще. Genri я обнаружил маленький глюк. Если после удаления программы в папке осталось пустая папка то она не отображается в списке.
http://img263.imageshack.us/my.php?image=innouninsah7.jpg
Это пример от iTASmania_Inc
на
http://img256.imageshack.us/my.php?image=innoreadyinstallyi1.jpg
Это страница инно сетап ВСЁ ГОТОВО К УСТАНОВКЕ
то есть чтобы содержимое окна можно было всё выделить и скопировать то есть это окно сделать как в инно на странице ВСЁ ГОТОВО К УСТАНОВКЕ
Да и еще. Genri я обнаружил маленький глюк. Если после удаления программы в папке осталось пустая папка то она не отображается в списке.
Chanka
Цитата:
Цитата:
iTASmania_Inc
Цитата:
Цитата:
обнаружил маленький глюк. Если после удаления программы в папке осталось пустая папка то она не отображается в списке.-- это не глюк. разницу между глюком, багом и фичей знаешь ?
Цитата:
кое-что подправить-- хм. Это для тебя "кое-что подправить", а на самом деле это все переделать заново. Первый раз переделали с TNewCheckListBox на TListBox, теперь с TListBox на TMemo. И не известно еще что проще.
iTASmania_Inc
Цитата:
что .... предпочитаете пить?-- утром кофе, вечером кефир... По выходным наоборот.
Genri,
Цитата:
Нет
Цитата:
Genri, Ну пожалуйста. С меня пиво и квас
Цитата:
разницу между глюком, багом и фичей знаешь ?
Нет
Цитата:
Это для тебя "кое-что подправить"
Genri, Ну пожалуйста. С меня пиво и квас
Chanka
Цитата:
Я вот все думаю и никак не могу понять, какую практическую пользу может принести это выделение и вставка.
Цитата:
чтобы содержимое окна можно было всё выделить и скопировать
Я вот все думаю и никак не могу понять, какую практическую пользу может принести это выделение и вставка.
Подскажите а где бы почитать разъяснения на Русском по поводу новшеств новой версии?
Unc1e,
Ну просто чтобы была такая возможность.
Ну просто чтобы была такая возможность.
Chanka -- [more=Здесь]
Код:
[Setup]
AppName=My Program
AppVerName=My Program [Version]
DefaultDirName={pf}\My Program
[Files]
Source: Files\*; DestDir: {app}
Source: Image.bmp; DestDir: {app}
[Code]
var
Form: TSetupForm;
ExtraFilesList: TMemo;
CancelButton, DelButton: TButton;
UpImage, DownImage, Image: TBitmapImage;
UpPanel, DownPanel: TPanel;
NameLabel, DescriptionLabel, BeforeListBoxLabel: TLabel;
DownTextLabel: TLabel;
function InitializeUninstall(): Boolean;
begin
FileCopy(ExpandConstant('{app}\Image.bmp'),
ExpandConstant('{tmp}\Image.bmp'), True);
Result := True;
end;
procedure FillListBox(const fromDir, fileMask: string; Level: Byte);
var
FSR, DSR: TFindRec;
FindResult: Boolean;
APath: String;
MainLen: Integer;
i: Integer;
begin
MainLen:= Length(ExpandConstant('{app}'));
APath := AddBackslash(fromDir);
FindResult := FindFirst(APath + fileMask, FSR);
try
while FindResult do
begin
if FSR.Attributes and FILE_ATTRIBUTE_DIRECTORY = 0 then
begin
{files} i:= ExtraFilesList.Lines.Add(Copy(APath + FSR.Name, MainLen+2, Length(APath + FSR.Name)));
end;
FindResult := FindNext(FSR);
end;
FindResult := FindFirst(APath + '*.*', DSR);
while FindResult do
begin
if ((DSR.Attributes and FILE_ATTRIBUTE_DIRECTORY) = FILE_ATTRIBUTE_DIRECTORY) and
not ((DSR.Name = '.') or (DSR.Name = '..')) then
begin
{Recursion} FillListBox(APath + DSR.Name, fileMask, Level+1);
end;
FindResult := FindNext(DSR);
end;
finally
FindClose(FSR);
FindClose(DSR);
end;
end;
procedure DeleteFiles();
begin
DelTree(ExpandConstant('{app}'), True, True, True);
end;
procedure BrowseRemainedFiles();
begin
Form := CreateCustomForm;
Form.ClientWidth := ScaleX(504);
Form.ClientHeight := ScaleY(358);
Form.Caption := 'Paradise - InstallShield Wizard';
Form.Center;
UpImage := TBitmapImage.Create(Form);
UpImage.Top := ScaleY(0);
UpImage.Left := ScaleX(0);
UpImage.Width := Form.ClientWidth;
UpImage.Height := ScaleY(59);
UpImage.BackColor := clWhite;
UpImage.Parent := Form;
Image := TBitmapImage.Create(Form);
Image.Top := ScaleY(0);
Image.Width := ScaleX(142);
Image.Left := Form.ClientWidth - Image.Width;
Image.Height := ScaleY(59);
Image.Bitmap.LoadFromFile(ExpandConstant('{tmp}\Image.bmp'));
Image.Parent := Form;
DownImage := TBitmapImage.Create(Form);
DownImage.Top := ScaleY(61);
DownImage.Left := ScaleX(0);
DownImage.Width := Form.ClientWidth;
DownImage.Height := Form.ClientHeight - DownImage.Top;
DownImage.BackColor := $EEE9EB;
DownImage.Parent := Form;
UpPanel := TPanel.Create(Form);
UpPanel.Top := ScaleY(59);
UpPanel.Width := Form.ClientWidth;
UpPanel.Height := ScaleY(2);
UpPanel.BevelOuter := bvLowered;
UpPanel.Parent := Form;
NameLabel := TLabel.Create(Form);
NameLabel.Top := ScaleY(5);
NameLabel.Left := ScaleX(16);
NameLabel.Font.Style := [fsBold];
NameLabel.Caption := 'Внимание!';
NameLabel.Color := clWhite;
NameLabel.Parent := Form;
DescriptionLabel := TLabel.Create(Form);
DescriptionLabel.Top := ScaleY(24);
DescriptionLabel.Left := ScaleX(25);
DescriptionLabel.Caption := 'Папка установки содержит посторонние файлы. Удалить их?';
DescriptionLabel.Color := clWhite;
DescriptionLabel.Parent := Form;
BeforeListBoxLabel := TLabel.Create(Form);
BeforeListBoxLabel.Top := ScaleY(68);
BeforeListBoxLabel.Left := ScaleX(25);
BeforeListBoxLabel.Caption := 'Если Вы уверены, что хотите удалить папку установки со всеми указанными файлами,'#13
'нажмите Да.'
BeforeListBoxLabel.Color := $EEE9EB;
BeforeListBoxLabel.Parent := Form;
DownPanel := TPanel.Create(Form);
DownPanel.Left := ScaleX(65);
DownPanel.Top := ScaleY(308);
DownPanel.Width := ScaleX(435);
DownPanel.Height := ScaleY(2);
DownPanel.BevelOuter := bvLowered;
DownPanel.Parent := Form;
DownTextLabel := TLabel.Create(Form);
DownTextLabel.Top := ScaleY(302);
DownTextLabel.Caption := ' InstallShield';
DownTextLabel.Font.Color := $99A8AC;
DownTextLabel.Color := $EEE9EB;
DownTextLabel.Parent := Form;
ExtraFilesList := TMemo.Create(Form);
ExtraFilesList.Left := ScaleX(25);
ExtraFilesList.Top := ScaleY(108);
ExtraFilesList.Width := Form.ClientWidth - ScaleX(50);
ExtraFilesList.Height := ScaleY(180);
ExtraFilesList.Color := $EEE9EB;
ExtraFilesList.Parent := Form;
CancelButton := TButton.Create(Form);
CancelButton.Parent := Form;
CancelButton.Width := ScaleX(75);
CancelButton.Height := ScaleY(23);
CancelButton.Left := Form.ClientWidth - CancelButton.Width - ScaleX(20);
CancelButton.Top := Form.ClientHeight - ScaleY(23 + 10);
CancelButton.Caption := 'Нет';
CancelButton.ModalResult := mrCancel;
CancelButton.Cancel := True;
DelButton := TButton.Create(Form);
DelButton.Parent := Form;
DelButton.Width := ScaleX(75);
DelButton.Height := ScaleY(23);
DelButton.Left := CancelButton.Left - DelButton.Width - ScaleX(10);
DelButton.Top := Form.ClientHeight - ScaleY(23 + 10);
DelButton.Caption := 'Да';
DelButton.ModalResult := mrOk;
Form.ActiveControl := CancelButton;
FillListBox(ExpandConstant('{app}'), '*', 1);
if ExtraFilesList.Lines.Count = 0 then
DeleteFiles()
else
if Form.ShowModal() = mrOk then DeleteFiles();
end;
procedure CurUninstallStepChanged(CurUninstallStep: TUninstallStep);
begin
if DirExists(ExpandConstant('{app}')) and (CurUninstallStep = usPostUninstall) then
BrowseRemainedFiles();
end;
Код:
[Setup]
AppName=My Program
AppVerName=My Program [Version]
DefaultDirName={pf}\My Program
[Files]
Source: Files\*; DestDir: {app}
Source: Image.bmp; DestDir: {app}
[Code]
var
Form: TSetupForm;
ExtraFilesList: TMemo;
CancelButton, DelButton: TButton;
UpImage, DownImage, Image: TBitmapImage;
UpPanel, DownPanel: TPanel;
NameLabel, DescriptionLabel, BeforeListBoxLabel: TLabel;
DownTextLabel: TLabel;
function InitializeUninstall(): Boolean;
begin
FileCopy(ExpandConstant('{app}\Image.bmp'),
ExpandConstant('{tmp}\Image.bmp'), True);
Result := True;
end;
procedure FillListBox(const fromDir, fileMask: string; Level: Byte);
var
FSR, DSR: TFindRec;
FindResult: Boolean;
APath: String;
MainLen: Integer;
i: Integer;
begin
MainLen:= Length(ExpandConstant('{app}'));
APath := AddBackslash(fromDir);
FindResult := FindFirst(APath + fileMask, FSR);
try
while FindResult do
begin
if FSR.Attributes and FILE_ATTRIBUTE_DIRECTORY = 0 then
begin
{files} i:= ExtraFilesList.Lines.Add(Copy(APath + FSR.Name, MainLen+2, Length(APath + FSR.Name)));
end;
FindResult := FindNext(FSR);
end;
FindResult := FindFirst(APath + '*.*', DSR);
while FindResult do
begin
if ((DSR.Attributes and FILE_ATTRIBUTE_DIRECTORY) = FILE_ATTRIBUTE_DIRECTORY) and
not ((DSR.Name = '.') or (DSR.Name = '..')) then
begin
{Recursion} FillListBox(APath + DSR.Name, fileMask, Level+1);
end;
FindResult := FindNext(DSR);
end;
finally
FindClose(FSR);
FindClose(DSR);
end;
end;
procedure DeleteFiles();
begin
DelTree(ExpandConstant('{app}'), True, True, True);
end;
procedure BrowseRemainedFiles();
begin
Form := CreateCustomForm;
Form.ClientWidth := ScaleX(504);
Form.ClientHeight := ScaleY(358);
Form.Caption := 'Paradise - InstallShield Wizard';
Form.Center;
UpImage := TBitmapImage.Create(Form);
UpImage.Top := ScaleY(0);
UpImage.Left := ScaleX(0);
UpImage.Width := Form.ClientWidth;
UpImage.Height := ScaleY(59);
UpImage.BackColor := clWhite;
UpImage.Parent := Form;
Image := TBitmapImage.Create(Form);
Image.Top := ScaleY(0);
Image.Width := ScaleX(142);
Image.Left := Form.ClientWidth - Image.Width;
Image.Height := ScaleY(59);
Image.Bitmap.LoadFromFile(ExpandConstant('{tmp}\Image.bmp'));
Image.Parent := Form;
DownImage := TBitmapImage.Create(Form);
DownImage.Top := ScaleY(61);
DownImage.Left := ScaleX(0);
DownImage.Width := Form.ClientWidth;
DownImage.Height := Form.ClientHeight - DownImage.Top;
DownImage.BackColor := $EEE9EB;
DownImage.Parent := Form;
UpPanel := TPanel.Create(Form);
UpPanel.Top := ScaleY(59);
UpPanel.Width := Form.ClientWidth;
UpPanel.Height := ScaleY(2);
UpPanel.BevelOuter := bvLowered;
UpPanel.Parent := Form;
NameLabel := TLabel.Create(Form);
NameLabel.Top := ScaleY(5);
NameLabel.Left := ScaleX(16);
NameLabel.Font.Style := [fsBold];
NameLabel.Caption := 'Внимание!';
NameLabel.Color := clWhite;
NameLabel.Parent := Form;
DescriptionLabel := TLabel.Create(Form);
DescriptionLabel.Top := ScaleY(24);
DescriptionLabel.Left := ScaleX(25);
DescriptionLabel.Caption := 'Папка установки содержит посторонние файлы. Удалить их?';
DescriptionLabel.Color := clWhite;
DescriptionLabel.Parent := Form;
BeforeListBoxLabel := TLabel.Create(Form);
BeforeListBoxLabel.Top := ScaleY(68);
BeforeListBoxLabel.Left := ScaleX(25);
BeforeListBoxLabel.Caption := 'Если Вы уверены, что хотите удалить папку установки со всеми указанными файлами,'#13
'нажмите Да.'
BeforeListBoxLabel.Color := $EEE9EB;
BeforeListBoxLabel.Parent := Form;
DownPanel := TPanel.Create(Form);
DownPanel.Left := ScaleX(65);
DownPanel.Top := ScaleY(308);
DownPanel.Width := ScaleX(435);
DownPanel.Height := ScaleY(2);
DownPanel.BevelOuter := bvLowered;
DownPanel.Parent := Form;
DownTextLabel := TLabel.Create(Form);
DownTextLabel.Top := ScaleY(302);
DownTextLabel.Caption := ' InstallShield';
DownTextLabel.Font.Color := $99A8AC;
DownTextLabel.Color := $EEE9EB;
DownTextLabel.Parent := Form;
ExtraFilesList := TMemo.Create(Form);
ExtraFilesList.Left := ScaleX(25);
ExtraFilesList.Top := ScaleY(108);
ExtraFilesList.Width := Form.ClientWidth - ScaleX(50);
ExtraFilesList.Height := ScaleY(180);
ExtraFilesList.Color := $EEE9EB;
ExtraFilesList.Parent := Form;
CancelButton := TButton.Create(Form);
CancelButton.Parent := Form;
CancelButton.Width := ScaleX(75);
CancelButton.Height := ScaleY(23);
CancelButton.Left := Form.ClientWidth - CancelButton.Width - ScaleX(20);
CancelButton.Top := Form.ClientHeight - ScaleY(23 + 10);
CancelButton.Caption := 'Нет';
CancelButton.ModalResult := mrCancel;
CancelButton.Cancel := True;
DelButton := TButton.Create(Form);
DelButton.Parent := Form;
DelButton.Width := ScaleX(75);
DelButton.Height := ScaleY(23);
DelButton.Left := CancelButton.Left - DelButton.Width - ScaleX(10);
DelButton.Top := Form.ClientHeight - ScaleY(23 + 10);
DelButton.Caption := 'Да';
DelButton.ModalResult := mrOk;
Form.ActiveControl := CancelButton;
FillListBox(ExpandConstant('{app}'), '*', 1);
if ExtraFilesList.Lines.Count = 0 then
DeleteFiles()
else
if Form.ShowModal() = mrOk then DeleteFiles();
end;
procedure CurUninstallStepChanged(CurUninstallStep: TUninstallStep);
begin
if DirExists(ExpandConstant('{app}')) and (CurUninstallStep = usPostUninstall) then
BrowseRemainedFiles();
end;
Genri,
Спасибо большое. Но у меня еще один вопрос
Допустим, что какая-то папка с файлами всё-таки должна остаться после удаления и её трогать не надо. Можно ли как-нибудь сделать, чтобы её не было в списке файлов удаления?
Спасибо большое. Но у меня еще один вопрос
Допустим, что какая-то папка с файлами всё-таки должна остаться после удаления и её трогать не надо. Можно ли как-нибудь сделать, чтобы её не было в списке файлов удаления?
SamLab
Цитата:
Думаю что седня сделаю.
Цитата:
Русификатор от Ночного Волка стоит оджидать?
Думаю что седня сделаю.
Genri
Спасибо, но не совсем понял как вернуть отображение дочерних компонентов?
Спасибо, но не совсем понял как вернуть отображение дочерних компонентов?
Ктонибудь подскажет как совместить это
ExtraFilesList.ScrollBars := ssVertical;
ExtraFilesList.ScrollBars := ssHorizontal;
В таком виде показывается только одно
ExtraFilesList.ScrollBars := ssVertical;
ExtraFilesList.ScrollBars := ssHorizontal;
В таком виде показывается только одно
Страницы: 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768
Предыдущая тема: Mail.ru агент - вход не выполнен
Форум Ru-Board.club — поднят 15-09-2016 числа. Цель - сохранить наследие старого Ru-Board, истории становления российского интернета. Сделано для людей.