Войти

Показать полную графическую версию : Скрипты Inno Setup. Помощь и советы [часть 5]


Страниц : 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 [29] 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100

Johny777
08-08-2012, 17:56
Leka_651,
не знаю как ты, но лично я модулями вообще не пользуюсь, тк путаюсь сильно
у меня например основной скрипт инсталла халфы 2 длиной в около 9000 строк(никаких модулей) и ошибки дублирующихся функций и другие устранял очень быстро
также код становится очень наглядным, хоть и длинный
функции и процедуры сверху
использование ниже ( Я знаю в дельфи можно объявить процедуру(её имя) в шапке и потом писать где угодно, а здесь, в Инно, так нельзя)
переменные в самом верху и тд
попробуй записать всё в одном скрипте в порядке чтения компилятором (сверху вниз)! :)
добавь комментарии для себя,

Leka_651
08-08-2012, 18:05
Johny777,
я бы рада, но у меня 21 файл, по которым собираются 44 сетапа, и пока большая часть не мое творение. а времени все привести в порядок нет - нужно ошибки править :(
буду мучаться дальше :) спасибо за помощь.

Johny777,
можешь рассказать чем отличаются inno ultra и простая inno?

Serega
08-08-2012, 19:50
только вот вылетала »
Другими словами Insert('\', dir, Length(dir)+1); это тоже самое, что dir := dir + '\';. Написал так, т.к. процедура Insert работает быстрее, а почему вылетела такая ошибка, не знаю...
исправил (выделил зелёным): »
всё правильно сделали
форма появляется при таком вот условии »
Если при проверке количества файлов вам не нужно знать их всё количество, то можно подкорректировать функцию именно по вашим условиям:


function GetFileCount(dir: string): Integer;
var
FindFiles: TFindRec;
begin
Result := 0;
if FindFirst(dir + '\*_update.exe', FindFiles) then
begin
repeat
if FindFiles.Attributes and FILE_ATTRIBUTE_DIRECTORY = 0 then
case FindFiles.Name of
{#FNames}: Result := Result + 1;
end;
until not FindNext(FindFiles) or (Result > 1);
FindClose(FindFiles);
end;
end;


если есть ещё способы по ускорению скорости её работы »
Для увеличения скорости по мере возможности старайтесь меньше обращаться к контролам формы, т.е. загоняйте эти значения в переменные и уже потом работаете с этими переменными.


//////////////////////////////////////////////////////////
i_portal_russian_gcf: Integer; // 25
dir: string;
begin
if not Size_Form_Exist then
begin
if not Param and not Game_From_INI_Selected then
begin
dir := WizardForm.DirEdit.Text;
half_life_2_russian_gcf := FileExists(dir + '\half-life 2_russian.gcf');
half_life_2_buka_russian_gcf := FileExists(dir + '\half-life 2 buka russian.gcf');
half_life_2_2007_base_content_gcf := FileExists(dir + '\half-life 2 2007 base content.gcf');
///////////////////////////////////////////////////////


Для уменьшения количества переменных я бы использовал массивы, а при однообразных вызовах работал через for... to...do. Так же по возможности нужно стараться разгружать InitializeWizard запуская большие расчёты в отдельном потоке.

Batistas
08-08-2012, 20:24
Как и обещал, поставил виртуальную машину, попробовал скопилировать - экзэшник скомпилирован, запускается, но выдает ошибку в самом конце установки - http://s1.ipicture.ru/uploads/20120808/bNfOvdds.png . Я так посмотрел на скрипт, попробовал добавить два слэша в одну из строк. Результат - экзэшник не запускается и выдает ошибку, что и на 7 - http://s1.ipicture.ru/uploads/20120808/c1CTB8sV.png . Сдается мне, что ошибка в самом скрипте...
Вот скрин от знакомого - та же самая ерундень - http://img-life.ru/upload_image/0be879b9496d65ec9521ff48a6b50795.JPG (компиляция завершена, идет окончание установки)

El Sanchez
09-08-2012, 09:30
Batistas, вы не читаете, что вам пишут:
Оказалось, что юникоду не понравились метод createElement при создании нод и метод setAttribute при создании аттрибутов. Процедуру CreateDCPlusPlus в своем предыдущем посте исправил. »
Либо меняете версию компилятора на ANSI и остаетесь на старой версии скрипта, либо компилятор какой хотите, но используйте исправленную (http://forum.oszone.net/post-1965349-564.html) версию скрипта (поменялась только процедура CreateDCPlusPlus).

Batistas
09-08-2012, 10:03
El Sanchez, теперь я прочитал, видимо проглядел. Поставил ansi-версию, ошибки все равно вылетают. http://s1.ipicture.ru/uploads/20120809/WTFVVU16.png , http://s1.ipicture.ru/uploads/20120809/zUJ2xwg3.png

Spell1999
09-08-2012, 10:38
люди помогите плиз как и чем можно сжать файлы до максимума? я жал и раром фриарком 7 зип но сёравно очень слабо жмёт.

alert30
09-08-2012, 10:48
Spell1999, NanoZip.

Batistas
09-08-2012, 10:54
Spell1999, все от конкретного файла зависит. http://s1.ipicture.ru/uploads/20120809/jvZcF9SW.png , http://s1.ipicture.ru/uploads/20120809/jHQMmJ9z.png

Spell1999
09-08-2012, 10:54
и чё это за чуш

Batistas, я также делал но непомогает

я немогу понтять чем жмут. например maxpayne 3 с 25 гигов сжали до 12 это как?

alert30
09-08-2012, 11:00
и чё это за чуш »
Не чушь, этот архиватор сильнее жмет.
я немогу понтять чем жмут. например maxpayne 3 с 25 гигов сжали до 12 это как? »
Потому что там было много видео и музыки в папке этой игры.

Spell1999
09-08-2012, 11:03
несопрю она висит вся на музыке и видео. но сёравно фриарк нежмёт так.

Batistas
09-08-2012, 11:03
Spell1999, скорее всего удалили ненужное. Вот еще для сжатия - http://www.youtube.com/watch?v=CQcJJ_FyUnE

Spell1999
09-08-2012, 11:07
Batistas, я тоже так думал сначала. но потом скачал установил она тянет почти на 25 гигов как лицензия, там ничё не вырезано. ща гляну видос попробую.

El Sanchez
09-08-2012, 11:31
Поставил ansi-версию, ошибки все равно вылетают. »
Batistas, попробуйте вместо объекта Microsoft.XMLDOM подставить одно из значений: MSXML2.DOMDocument, MSXML2.DOMDocument.3.0, MSXML2.DOMDocument.4.0, MSXML2.DOMDocument.6.0.
Если будет ругань, то оформите ReadDCPlusPlus вот так:


function ReadDCPlusPlus(Filename, Node, Default: String): String;
var
objXMLDoc: Variant;
begin
Result := Default;
if not FileExists(Filename) then Exit;
try
objXMLDoc := CreateOleObject('Microsoft.XMLDOM'); //или другой объект
objXMLDoc.load(Filename);
objXMLDoc.async := False;
if objXMLDoc.parseError.errorCode <> 0 then Exit;
Result := objXMLDoc.selectSingleNode(Node).text;
except
ShowExceptionMessage;
Exit;
end;
end;

Johny777
09-08-2012, 11:44
Spell1999,
по вопросам сжатия читай тут http://forum.ru-board.com/topic.cgi?forum=5&topic=30239&start=0
тут http://forum.ru-board.com/topic.cgi?forum=5&topic=32025
большинство (даже почти все) из так называемых "репаков" сжимаются на основе средств сжатия и преобразования
файлов поддерживаемых библиотекой IsDone (распаковка)
качай его отсюда http://176.9.1.113:52080/showthread.php?t=34&page=49
читай к нему справку и пользуйся, если хочешь (справка должна идти в комплекте, то бишь в архиве)
эта тема предназначена для написания/помощи в написании кода на основе языка Object Pascal
используемом в инно и всего того что стоит в справке по инно - стандартные средства

Ivan_009
09-08-2012, 14:10
Покажите пример наложение текстур на кнопки с двум состояниям искал везде 4 или 3 состояния... :sorry:

Spell1999
09-08-2012, 15:15
Johny777, спс до меня допёрла кажись)))

Johny777
09-08-2012, 18:40
Ivan_009,
текстурирование кнопок
2 состояния - обычное и при нажатии
код:


#define ButtonWidth "80" ; ширина кнопки
#define ButtonHeight "25" ; высота

#define ButtonFontColor "clWhite" ;цвет шрифта кнопок

#define TextureWidth "160" ;ширина картинки-текстуры
#define TextureHeight "25" ;высота


[Setup]
AppName=Test
AppVerName=Test
DefaultDirName={pf}\Test
OutputDir=.

;Изображение размером 160х25 (можете поменять в купе с настройками в препроцессоре, в шапке)
;левая половина - обычное состояние, правая - при нажатии
BitmapResource=button:button.bmp


[Code]
var
ButtonPanel: array [0..4] of TPanel;
ButtonImage: array [0..4] of TBitmapImage;
ButtonLabel: array [0..4] of TLabel;

procedure ButtonLabelClick(Sender: TObject);
var
Button: TButton;
begin
with WizardForm do
begin
case TLabel(Sender).Tag of
0: Button := BackButton;
1: Button := NextButton;
2: Button := CancelButton;
3: Button := DirBrowseButton;
4: Button := GroupBrowseButton;
else exit
end;
end;
Button.OnClick(Button);
end;

procedure ButtonLabelMouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
begin
ButtonImage[TLabel(Sender).Tag].Left:= -ScaleX({#ButtonWidth});
end;

procedure ButtonLabelMouseUp(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
begin
ButtonImage[TLabel(Sender).Tag].Left := ScaleX(0);
end;

procedure LoadButtonImage(AButton: TButton; AButtonIndex: integer);
var
Image: TBitmapImage;
Panel: TPanel;
Labl: TLabel;
begin
Panel:=TPanel.Create(WizardForm)
with Panel do
begin
SetBounds(AButton.Left,AButton.Top,AButton.Width,AButton.Height);
Tag := AButtonIndex;
Parent := AButton.Parent;
end;

ButtonPanel[AButtonIndex] := Panel;

Image:=TBitmapImage.Create(WizardForm)
with Image do
begin
Width := ScaleX({#TextureWidth});
Height := ScaleY({#TextureHeight});
Enabled := False;
Bitmap.LoadFromResourceName(HInstance, '_IS_BUTTON');
Parent := Panel;
end;

ButtonImage[AButtonIndex]:=Image;

with TLabel.Create(WizardForm) do
begin
Tag := AButtonIndex;
Parent := Panel;
Width := Panel.Width;
Height := Panel.Height;
Transparent := True;
OnClick := @ButtonLabelClick;
OnDblClick := @ButtonLabelClick;
OnMouseDown := @ButtonLabelMouseDown;
OnMouseUp := @ButtonLabelMouseUp;
end;

Labl:=TLabel.Create(WizardForm)
with Labl do
begin
Autosize := True;
Alignment := taCenter;
Tag := AButtonIndex;
Transparent := True;
Font.Color := {#ButtonFontColor};
Caption := AButton.Caption;
OnClick := @ButtonLabelClick;
OnMouseDown := @ButtonLabelMouseDown;
OnMouseUp := @ButtonLabelMouseUp;
OnDblClick := @ButtonLabelClick;
Parent := Panel;
end;

ButtonLabel[AButtonIndex]:= Labl;
end;

procedure UpdateButton(AButton: TButton;AButtonIndex: integer);
begin
ButtonPanel[AButtonIndex].Visible := AButton.Visible;
with ButtonLabel[AButtonIndex] do
begin
Caption := AButton.Caption;
Left := ButtonPanel[AButtonIndex].Width div 2 - ButtonLabel[AButtonIndex].Width div 2;
Top := ButtonPanel[AButtonIndex].Height div 2 - ButtonLabel[AButtonIndex].Height div 2;
end;
end;


procedure InitializeWizard();
begin
with WizardForm do
begin
BackButton.Width:={#ButtonWidth};
BackButton.Height:={#ButtonHeight};
NextButton.Width:={#ButtonWidth};
NextButton.Height:={#ButtonHeight};
CancelButton.Width:={#ButtonWidth};
CancelButton.Height:={#ButtonHeight};
DirBrowseButton.Width:={#ButtonWidth};
DirBrowseButton.Height:={#ButtonHeight};
GroupBrowseButton.Width:={#ButtonWidth};
GroupBrowseButton.Height:={#ButtonHeight};

LoadButtonImage(BackButton,0);
LoadButtonImage(NextButton,1);
LoadButtonImage(CancelButton,2);
LoadButtonImage(DirBrowseButton,3);
LoadButtonImage(GroupBrowseButton,4);
end;
end;

procedure CurPageChanged(CurPageID: Integer);
begin
UpdateButton(WizardForm.BackButton,0);
UpdateButton(WizardForm.NextButton,1);
UpdateButton(WizardForm.CancelButton,2);
UpdateButton(WizardForm.DirBrowseButton,3);
UpdateButton(WizardForm.GroupBrowseButton,4);
end;


текстура (положить рядом со скриптом) :

Ivan_009
09-08-2012, 18:54
Johny777, а возможно ли в свою форму отмены текстурировать эти кнопки.... :unsure:
или использовать вместе с деинсталлятором.
и как сделать чтобы при нажатии на чекбокс не создавать ярлык в меню пуск кнопка становилась неактивной......Заранее спасибо за любую помощь.........




© OSzone.net 2001-2012