Ru-Board.club
← Вернуться в раздел «Программы»

» Inno Setup (создание инсталяционных пакетов)

Автор: maxdddca123
Дата сообщения: 26.07.2007 12:29
Подскажите, как проверить стоит ли стоит артибут Только для чтения у текстового файла , если стоит, то убрать его ?
Автор: Genri
Дата сообщения: 26.07.2007 13:53
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;
Автор: Chanka
Дата сообщения: 26.07.2007 14:06
Genri,

Я сам не смогу Может поможешь переделать
Автор: maxdddca123
Дата сообщения: 26.07.2007 14:57
Genri
Спасибо !
Автор: Genri
Дата сообщения: 26.07.2007 17:31
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;
Автор: iTASmania_Inc
Дата сообщения: 26.07.2007 18:34
А можно ли как-нибудь получить время запуска инсталлятора или что-то подобное! Допустим, хочу на станице wpInstalling перед началом установки вывести следующий меседж-бокс:
Время запуска --/--/-- --.--.--
Наачало инсталляции --/--/-- --.--.--
Приблизительно осталось (ну это я как бы из верхнего сам могу получить, добавив по желанию н-ное число часов, минут, секунд)!
Интересут только сами процедуры получения времени, пожалуйста, помогите!
Автор: Chanka
Дата сообщения: 26.07.2007 18:50
Genri,

Спасибо. Но как разместить текст и прочее я понятия не имею. Может когда у тебя будет время сможешь это реализовать
Автор: Genri
Дата сообщения: 26.07.2007 19:08
iTASmania_Inc
Цитата:
А можно ли как-нибудь получить время запуска инсталлятора
-- см. в хелпе описание функции 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;
Автор: iTASmania_Inc
Дата сообщения: 26.07.2007 20:26
Genri
Спасибо большое!!!
Автор: serg_aka_lain
Дата сообщения: 26.07.2007 20:35
Chanka Примерно что можно сделать см.личку.
Автор: iTASmania_Inc
Дата сообщения: 26.07.2007 22:52
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}, но как заставить деинсталлятор не удалять её и в то же время не кидать в лист-бокс? А молча обходить?
Автор: serg_aka_lain
Дата сообщения: 26.07.2007 23:19
Вот пример для всех.Листбокс с картинкой


[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]
Автор: iTASmania_Inc
Дата сообщения: 26.07.2007 23:24
serg_aka_lain
Спасибо!
Как раз то, о чём спрашивал!
Автор: Genri
Дата сообщения: 27.07.2007 00:11
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
Дата сообщения: 27.07.2007 00:18
Genri

Цитата:
Вот и все

Нет, не всё!
Вы неподражаемы, бесподобны! Вы - гений, сэр!!!
Теперь всё!
Автор: Sero
Дата сообщения: 27.07.2007 00:24

Цитата:
Вы неподражаемы, бесподобны! Вы - гений, сэр!!!

От меня тоже!
Автор: Genri
Дата сообщения: 27.07.2007 00:35
Если появится еще один желающий мне +1 поставить - админ мне сразу +10 влепит. Так что благодарности просьба наливать в личку
Автор: iTASmania_Inc
Дата сообщения: 27.07.2007 00:43
Genri
Извиняюсь, что не в личку!
А что из благодарностей Вы предпочитаете пить?
Просто, чтобы все знали Ваши предпочтения!

Добавлено:
Chanka
Если интересно, то исправленный вариант (с картинкой) можно взять отседова:
[more=Скачать]http://data.cod.ru/2051833290[/more]
Автор: SamLab
Дата сообщения: 27.07.2007 06:39
Русификатор от Ночного Волка стоит оджидать?
Автор: Chanka
Дата сообщения: 27.07.2007 08:46
Спасибо вам всем друзья. Получилось почти один в один. Но можно ли кое-что подправить

http://img263.imageshack.us/my.php?image=innouninsah7.jpg

Это пример от iTASmania_Inc

на

http://img256.imageshack.us/my.php?image=innoreadyinstallyi1.jpg

Это страница инно сетап ВСЁ ГОТОВО К УСТАНОВКЕ


то есть чтобы содержимое окна можно было всё выделить и скопировать то есть это окно сделать как в инно на странице ВСЁ ГОТОВО К УСТАНОВКЕ

Да и еще. Genri я обнаружил маленький глюк. Если после удаления программы в папке осталось пустая папка то она не отображается в списке.
Автор: Genri
Дата сообщения: 27.07.2007 09:40
Chanka
Цитата:
обнаружил маленький глюк. Если после удаления программы в папке осталось пустая папка то она не отображается в списке.
-- это не глюк. разницу между глюком, багом и фичей знаешь ?

Цитата:
кое-что подправить
-- хм. Это для тебя "кое-что подправить", а на самом деле это все переделать заново. Первый раз переделали с TNewCheckListBox на TListBox, теперь с TListBox на TMemo. И не известно еще что проще.

iTASmania_Inc
Цитата:
что .... предпочитаете пить?
-- утром кофе, вечером кефир... По выходным наоборот.

Автор: Chanka
Дата сообщения: 27.07.2007 09:48
Genri,


Цитата:
разницу между глюком, багом и фичей знаешь ?


Нет


Цитата:
Это для тебя "кое-что подправить"


Genri, Ну пожалуйста. С меня пиво и квас
Автор: Unc1e
Дата сообщения: 27.07.2007 10:11
Chanka

Цитата:
чтобы содержимое окна можно было всё выделить и скопировать

Я вот все думаю и никак не могу понять, какую практическую пользу может принести это выделение и вставка.
Автор: SyCraft
Дата сообщения: 27.07.2007 10:42
Подскажите а где бы почитать разъяснения на Русском по поводу новшеств новой версии?
Автор: Chanka
Дата сообщения: 27.07.2007 11:10
Unc1e,
Ну просто чтобы была такая возможность.
Автор: Genri
Дата сообщения: 27.07.2007 11:11
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;
Автор: Chanka
Дата сообщения: 27.07.2007 12:24
Genri,
Спасибо большое. Но у меня еще один вопрос
Допустим, что какая-то папка с файлами всё-таки должна остаться после удаления и её трогать не надо. Можно ли как-нибудь сделать, чтобы её не было в списке файлов удаления?
Автор: NightW0lf
Дата сообщения: 27.07.2007 12:38
SamLab

Цитата:
Русификатор от Ночного Волка стоит оджидать?

Думаю что седня сделаю.
Автор: SyCraft
Дата сообщения: 27.07.2007 12:55
Genri
Спасибо, но не совсем понял как вернуть отображение дочерних компонентов?
Автор: Chanka
Дата сообщения: 27.07.2007 13:28
Ктонибудь подскажет как совместить это

ExtraFilesList.ScrollBars := ssVertical;
ExtraFilesList.ScrollBars := ssHorizontal;

В таком виде показывается только одно

Страницы: 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768

Предыдущая тема: Mail.ru агент - вход не выполнен


Форум Ru-Board.club — поднят 15-09-2016 числа. Цель - сохранить наследие старого Ru-Board, истории становления российского интернета. Сделано для людей.