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

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

Автор: iTASmania_Inc
Дата сообщения: 15.06.2007 07:30
Genri

Цитата:
Частично можно решить таким образом. Но опять-таки - это не решит проблему нештатных ситуаций и их сообщений.

А мне вполне хватит! СПАСИБО БОЛЬШОЕ!!!!!!!!!!!!!

Добавлено:

Цитата:
А вообще-то, хорошая программа в Always on top не нуждается

А кто тебе сказал, что я хорошие программы в инсталляторы пакую?
Автор: Unc1e
Дата сообщения: 15.06.2007 13:33
Такой вопрос:
Как у Uninstall`а заменить WizardSmallBitmapImage на большую (но не WizardBitmapImage конечно), которая перекрывала бы PageNameLabel и PageDescriptionLabel? Примерно так, но чтобы работало:

[Code]
procedure CurUninstallStepChanged(CurUninstallStep: TUninstallStep);
begin
if CurUninstallStep=usUninstall then
begin
WizardForm.PageNameLabel.Enabled := False;
WizardForm.PageDescriptionLabel.Enabled := False;
WizardForm.WizardSmallBitmapImage.Top := 0;
WizardForm.WizardSmallBitmapImage.Left := 0;
WizardForm.WizardSmallBitmapImage.Width := 497;
WizardForm.WizardSmallBitmapImage.Height := 58;
end
end;

Заранее спасибо!
Автор: Forslay
Дата сообщения: 15.06.2007 16:07
Здравствуйте Уважаемые пользователи и профессионалы по использованию программы Inno Setup 5XX.
==============
Я У вас новенький... У меня есть большая просьба - отнестись к моей просьбе очень отзывчиво, и главное что бы был результат.
==============
Некоторые азы, я вроде бы изучил, но в создании профессиональной инсталляционной системы, умения у меня ещё пока не хватает.
====================
У меня есть игровой проект, заключается он в модификации Counter-Strike 1.6.
То есть я делаю собственную сборку игры с некоторыми изменениями, ради интереса, перечисляю:

> Собственная полная русификация
> Изменение GUI, VGUI меню на более удобное
> Собственный забиндённый конфиг
> Отредактированный профиль ботов
> Постоянное обновление исполнителей и их библиотек от Steam
> А так же эмуляция Steam [Взлом Листен сервера]
===================================
Это самый важный список изменений, отличающийся от стандартной CS с патчем.
====================
Раньше я запаковывал проект в программу Smart Install Maker, но когда понял, что мне не хватает возможностей, сразу же обратился к Inno Setup.
========================
На 19.06.07 - намечен новый выпуск CS.

И для этого я хочу создать профессиональный красочный инсталлятор:
> Встроенная mp3 музыка + клавиши управления.
> Красивая Оболочка
> Выбор русской и английской версии
> (Снизу где пишеться Forslay Inc * 2007, что бы эту примочка была активна, при нажатии на неё - была переадресация на мой E-Mail.
> Хорошая заставка! Желательно какое нить слайд шоу!

Сдесь я перечислил всё, что покамись не в моих знаниях, умениях! Времени на изучение информации катострафически мало!
======
У меня есть уже полу-готовый скрипт к инсталляции



Цитата:
[Setup]
AppName=Counter-Strike
AppVerName=Counter-Strike 1.6
AppPublisher=Forslay Inc, 2007 ©
AppPublisherURL=http://ataka.muravlenko.ru:8080/
AppSupportURL=http://ataka.muravlenko.ru:8080/
AppUpdatesURL=http://ataka.muravlenko.ru:8080/
DefaultDirName={pf}\Counter-Strike
DefaultGroupName=Counter-Strike
AllowNoIcons=yes
LicenseFile=C:\Program Files\Inno Setup 5\license.rtf
InfoBeforeFile=C:\Program Files\Inno Setup 5\Info-1.rtf
InfoAfterFile=C:\Program Files\Inno Setup 5\Info-2.rtf
OutputDir=C:\Documents and Settings\Forslay\Рабочий стол
OutputBaseFilename=CS
SetupIconFile=D:\Разроботка\Client\Примочки\Иконки\ICO\steam orb.ico
Compression=lzma
SolidCompression=no
WindowVisible=no
UserInfoPage=yes
WizardImageFile=Logo.bmp
WizardSmallImageFile=Forslay.bmp

[Registry]
Root: HKCU; SubKey: Software\Valve\Half-Life\cstrike\Settings; ValueType: string; ValueName: User Token 2; ValueData:
Root: HKCU; SubKey: Software\Valve\Half-Life\cstrike\Settings; ValueType: string; ValueName: User Token 3; ValueData:
Root: HKCU; SubKey: Software\Valve\Half-Life\Settings; ValueType: string; ValueName: EngineDLL; ValueData: hw.dll
Root: HKCU; SubKey: Software\Valve\Half-Life\Settings; ValueType: string; ValueName: User Token 2; ValueData:
Root: HKCU; SubKey: Software\Valve\Half-Life\Settings; ValueType: string; ValueName: User Token 3; ValueData:
Root: HKCU; SubKey: Software\Valve\Half-Life\Settings; ValueType: dword; ValueName: ScreenWindowed; ValueData: $00000000
Root: HKCU; SubKey: Software\Valve\Half-Life\Settings; ValueType: dword; ValueName: CrashInitializingVideoMode; ValueData: $00000000
Root: HKCU; SubKey: Software\Valve\Half-Life\Settings; ValueType: dword; ValueName: ScreenWidth; ValueData: $00000400
Root: HKCU; SubKey: Software\Valve\Half-Life\Settings; ValueType: dword; ValueName: ScreenHeight; ValueData: $00000300
Root: HKCU; SubKey: Software\Valve\Half-Life\Settings; ValueType: dword; ValueName: ScreenBPP; ValueData: $00000020
Root: HKCU; SubKey: Software\Valve\Half-Life\Settings; ValueType: string; ValueName: ValveKey; ValueData: AAAAA-AAAAA-AAAAA-AAAAA-AAAAA
Root: HKCU; SubKey: Software\Valve\Half-Life\Settings; ValueType: dword; ValueName: EngineD3D; ValueData: $00000000
Root: HKCU; SubKey: Software\Valve\Steam; ValueType: string; ValueName: LastContentProviderURL; ValueData: http://forslay.clan.su/cstrike/gfx/steam_banner.html
Root: HKCU; SubKey: Software\Valve\Steam; ValueType: string; ValueName: Language; ValueData: English
Root: HKCU; SubKey: Software\Valve\Steam; ValueType: string; ValueName: Rate; ValueData: 25000
Root: HKCU; SubKey: Software\Valve\Steam; ValueType: string; ValueName: LastGameNameUsed; ValueData: Game CS by: sX89 Clan * Forslay Inc.

[Languages]
Name: "russian"; MessagesFile: "compiler:Languages\Russian.isl"


[Messages]
BeveledLabel=Forslay Inc, 2007 ©.

[CustomMessages]
UninstallProgram=Удаление %1

[Tasks]
Name: "desktopicon"; Description: "{cm:CreateDesktopIcon}"; GroupDescription: "{cm:AdditionalIcons}"; Flags: unchecked
Name: "quicklaunchicon"; Description: "{cm:CreateQuickLaunchIcon}"; GroupDescription: "{cm:AdditionalIcons}"; Flags: unchecked

[Files]
Source: "C:\Counter-Strike\hl.exe"; DestDir: "{app}"; Flags: ignoreversion recursesubdirs createallsubdirs
Source: "C:\Counter-Strike\*"; DestDir: "{app}"; Flags: ignoreversion
Source: "C:\Program Files\Inno Setup 5\ISTask.dll"; DestDir: "{tmp}"; Flags: dontcopy
Source: "C:\Program Files\Inno Setup 5\splash.bmp"; DestDir: "{tmp}"; Flags: dontcopy
Source: "C:\Program Files\Inno Setup 5\splash.wav"; DestDir: "{tmp}"; Flags: dontcopy
Source: compiler:callnsis.dll; Flags: dontcopy noencryption
Source: compiler:get_hw_caps.dll; Flags: dontcopy noencryption
Source: compiler:AdvSplash.dll; Flags: dontcopy noencryption
Source: compiler:isxbb.dll; Flags: dontcopy noencryption


[Code]
//////////Проверка системных требований
const
NeedSize = 400; //Прописать, сколько мегабайт необходимо

DRIVE_UNKNOWN = 0;
DRIVE_NO_ROOT_DIR = 1;
DRIVE_REMOVEABLE = 2;
DRIVE_FIXED = 3;
DRIVE_REMOTE = 4;
DRIVE_CDROM = 5;
DRIVE_RAMDISK = 6;
//Все эффекты анимации
AW_FADE_IN = $00080000;
AW_FADE_OUT = $00090000;
AW_SLIDE_IN_LEFT = $00040001;
AW_SLIDE_OUT_LEFT = $00050002;
AW_SLIDE_IN_RIGHT = $00040002;
AW_SLIDE_OUT_RIGHT = $00050001;
AW_SLIDE_IN_TOP = $00040004;
AW_SLIDE_OUT_TOP = $00050008;
AW_SLIDE_IN_BOTTOM = $00040008;
AW_SLIDE_OUT_BOTTOM = $00050004;
AW_DIAG_SLIDE_IN_TOPLEFT = $00040005;
AW_DIAG_SLIDE_OUT_TOPLEFT = $0005000A;
AW_DIAG_SLIDE_IN_TOPRIGHT = $00040006;
AW_DIAG_SLIDE_OUT_TOPRIGHT = $00050009;
AW_DIAG_SLIDE_IN_BOTTOMLEFT = $00040009;
AW_DIAG_SLIDE_OUT_BOTTOMLEFT = $00050006;
AW_DIAG_SLIDE_IN_BOTTOMRIGHT = $0004000A;
AW_DIAG_SLIDE_OUT_BOTTOMRIGHT = $00050005;
AW_EXPLODE = $00040010;
AW_IMPLODE = $00050010;
///////////
MB_ICONINFORMATION = $40;
MB_ICONEXCLAMATION = $30;
MB_ICONQUESTION = $20;    
MB_ICONSTOP = $10;
MB_ICONNONE = $0;

function MessageBox(hWnd: Integer; lpText, lpCaption: String; uType: Cardinal): Integer;
external 'MessageBoxA@user32.dll stdcall';


var
ListBox: TListBox;

function AnimateWindow(hWnd: HWND; dwTime: DWORD; dwFlags: DWORD): Boolean;
external 'AnimateWindow@user32 stdcall';

procedure ListBoxOnClick(Sender: TObject);
var
NewLetter, OldString: String;
i: Integer;
begin
for i:= 0 to ListBox.Items.Count-1 do
begin
if ListBox.Selected[i] then
begin
NewLetter:= Copy(ListBox.Items[i], 0, 1);
OldString:= Copy(WizardForm.DirEdit.Text, 2, Length(WizardForm.DirEdit.Text));
WizardForm.DirEdit.Text:= NewLetter + OldString;
end;
end;
end;

function GetLogicalDrives: DWORD;
external 'GetLogicalDrives@kernel32.dll stdcall';

function GetDriveType(nDrive: String): Longint;
external 'GetDriveTypeA@kernel32.dll stdcall';

function GetVideoCardName(): PChar;
external 'hwc_GetVideoCardName@files:get_hw_caps.dll stdcall';

function GetSoundCardName(): PChar;
external 'hwc_GetSoundCardName@files:get_hw_caps.dll stdcall';

function DetectHardware(): Integer;
external 'hwc_DetectHardware@files:get_hw_caps.dll stdcall';

function GetHardDriveFreeSpace(hdd: integer): Integer;
external 'hwc_GetHardDriveFreeSpace@files:get_hw_caps.dll stdcall';

function GetHardDriveName(hdd: integer): PChar;
external 'hwc_GetHardDriveName@files:get_hw_caps.dll stdcall';

function GetHardDriveTotalSpace(hdd: integer): Integer;
external 'hwc_GetHardDriveTotalSpace@files:get_hw_caps.dll stdcall';

function GetHardDrivesCount(): Integer;
external 'hwc_GetHardDrivesCount@files:get_hw_caps.dll stdcall';

function GetSoundCards(): Integer;
external 'hwc_GetSoundCards@files:get_hw_caps.dll stdcall';

function GetSystemPage(): Integer;
external 'hwc_GetSystemPage@files:get_hw_caps.dll stdcall';

function GetSystemPhys(): Integer;
external 'hwc_GetSystemPhys@files:get_hw_caps.dll stdcall';

function GetVidMemLocal(): Integer;
external 'hwc_GetVidMemLocal@files:get_hw_caps.dll stdcall';

function GetVidMemNonLocal(): Integer;
external 'hwc_GetVidMemNonLocal@files:get_hw_caps.dll stdcall';

function GetVideoCardDev(): Integer;
external 'hwc_GetVideoCardDev@files:get_hw_caps.dll stdcall';

function GetVideoCardVen(): Integer;
external 'hwc_GetVideoCardVen@files:get_hw_caps.dll stdcall';

function DelSp(const s:string):string;// функция удаления пробелов в начале строки
var
c, i: integer;
stt, st, st1: string;
begin
c := 0;
st := s;

for i := 1 to Length(st) do
begin

stt := copy(st, i, 1);
if (stt = ' ') and (c >= 1) then
begin
st1 := st1;
c := c + 1;
end
else if (stt = ' ') and (c = 0) then
begin
c := c + 1;
st1 := st1 + stt;
end
else if (stt <> ' ') then
begin
c := 0;
st1 := st1 + stt;
end
end;

Result:= st1;
end;

function CheckSystemPage(PreviousPageId: Integer): Integer;
var Page: TWizardPage;
ProcessorName:string;
Processor,VideoCardPanel,AudioCardPanel,RAMPanel,PageFilePanel: TPanel;
ProcessorNamePanel,VideoCardNamePanel,AudioCardNamePanel,RAMTotalPanel,PageFileTotalPanel: TPanel;
ProcessorMHZ: Cardinal;
StaticText,StaticText2:TNewStaticText;
VidRam:integer;
begin
RegQueryStringValue(HKLM, 'HARDWARE\DESCRIPTION\System\CentralProcessor\0','ProcessorNameString', ProcessorName);
RegQueryDWordValue(HKLM, 'HARDWARE\DESCRIPTION\System\CentralProcessor\0','~MHz', ProcessorMHZ);
GetVidMemLocal;
GetSoundCards;

Page := CreateCustomPage(PreviousPageId,'Апаратное Обеспечение','Программа установки обнаружила следуюшие необходимые компоненты');

StaticText:=TNewStaticText.Create(Page);
with StaticText do
begin
Parent:=Page.Surface;
Caption:='Все компоненты удовлетворяют требованиям игры.';
Left:=0;
Top:=5;
AutoSize:=True;
end;

StaticText2:=TNewStaticText.Create(Page);
with StaticText2 do
begin
Parent:=Page.Surface;
Caption:='Когда будете готовы продолжить установку, нажмите Далее'
Left:=0;
Top:=220;
AutoSize:=True;
end;

Processor := TPanel.Create(Page);
with Processor do
begin
Parent := Page.Surface;
Caption := ' Ваш процессор';
Left := ScaleX(0);
Top := ScaleY(32);
alignment:=taLeftJustify;
Width := ScaleX(121);
Height := ScaleY(25);
BevelInner := bvLowered;
TabOrder := 0;
end;

ProcessorNamePanel := TPanel.Create(Page);
with ProcessorNamePanel do
begin
Parent := Page.Surface;
Caption :=DelSP(ProcessorName)+' '+IntToStr(ProcessorMHZ)+'MHz' ; //новое обработанное значение строки
// Caption :=ProcessorName+' '+IntToStr(ProcessorMHZ)+'MHz' ;
Left := ScaleX(128);
Top := ScaleY(32);
alignment:=taLeftJustify;
Width := ScaleX(281);
Height := ScaleY(25);
BevelInner := bvLowered;
Color :=$ccffcc;
TabOrder := 1;
end;

if ProcessorMHZ<1800then
begin
ProcessorNamePanel.Color:=clRed;
StaticText.Caption:='Не все компоненты удовлетворяют требованиям игры.';
end;

VideoCardPanel:=TPanel.Create(Page);
with VideoCardPanel do
begin
Parent:=Page.Surface;
Caption:=' Ваша видеокарта';
Left:=ScaleX(0);
alignment:=taLeftJustify;
Top:=Processor.Top+27;
Width:=ScaleX(121);
Height:=ScaleY(25);
BevelInner:=bvLowered;
TabOrder:=0;
end;

VideoCardNamePanel:=TPanel.Create(Page);
with VideoCardNamePanel do
begin
Parent:=Page.Surface;
Caption:=' '+GetVideoCardName; //+' ОЗУ-'+inttostr(round(GetVidMemLocal/1000000))+' МБ';
//Caption:=' ОЗУ-'+inttostr(GetVidMemLocal)+' МБ';
VidrAM:= GetVidMemLocal/1000000;

if VidRam>127 then
begin
if VidRam<200 then Caption:=Caption+' 128 МB'
else if VidRam<300 then Caption:=Caption+' 256 МB'
else if VidRam<400 then Caption:=Caption+' 384 МB'
else if VidRam>500 then Caption:=Caption+' 512 МB';
end;

Left:=ScaleX(128);
Top:=VideoCardPanel.Top;
alignment:=taLeftJustify;
Width:=ScaleX(281);
Height:=ScaleY(25);
BevelInner:=bvLowered;
Color :=$ccffcc;
TabOrder:=1;
end;

if GetVidMemLocal<127000000 then //128MB
begin
StaticText.Caption:='Не все компоненты удовлетворяют требованиям игры.';
VideoCardNamePanel.Color:=clRed;
end;

AudioCardPanel:=TPanel.Create(Page);
with AudioCardPanel do
begin
Parent:=Page.Surface;
Caption:=' Ваша звуковая карта';
Left:=ScaleX(0);
Top:=VideoCardPanel.Top+27;
alignment:=taLeftJustify;
Width:=ScaleX(121);
Height:=ScaleY(25);
BevelInner:=bvLowered;
TabOrder:=0;
end;

AudioCardNamePanel:=TPanel.Create(Page);
with AudioCardNamePanel do
begin
Parent:=Page.Surface;
Caption:=' '+GetSoundCardName;
Left:=ScaleX(128);
alignment:=taLeftJustify;
Top:=AudioCardPanel.Top;
Width:=ScaleX(281);
Height:=ScaleY(25);
BevelInner:=bvLowered;
TabOrder:=1;
Color :=$ccffcc;
end;

if
GetSoundCards=0 then
begin
StaticText.Caption:='Не все компоненты удовлетворяют требованиям игры.';
AudioCardNamePanel.Color:=clRed;
end;


RAMPanel:=TPanel.Create(Page);
with RAMPanel do
begin
Parent:=Page.Surface;
Caption:=' Оперативная память'
Left:=0;
Top:=AudioCardPanel.Top+27;
alignment:=taLeftJustify;
Width:=ScaleX(121);
Height:=ScaleY(25);
BevelInner:=bvLowered;
TabOrder:=0;
end;

RAMTotalPanel:=TPanel.Create(Page);
with RAMTotalPanel do
begin
Parent:=Page.Surface;
Caption:=' '+IntToStr(GetSystemPhys+1) +' MB'
Left:=AudioCardNamePanel.Left;
Top:=RAMPanel.Top;
alignment:=taLeftJustify;
Width:=AudioCardNamePanel.Width;
Height:=ScaleY(25);
BevelInner:=bvLowered;
TabOrder:=1;
Color :=$ccffcc;
end;

if GetSystemPhys+1<256 then
begin
RAMTotalPanel.Color:=clRed;
StaticText.Caption:='Не все компоненты удовлетворяют требованиям игры.';
end;

PageFilePanel:=TPanel.Create(Page);
with PageFilePanel do
begin
Parent:=Page.Surface;
Caption:=' Ваш файл подкачки';
alignment:=taLeftJustify;
Left:=0;
Top:=RAMPanel.Top+27;
Width:=RAMPanel.Width;
Height:=ScaleY(25);
BevelInner:=bvLowered;
TabOrder:=0;
end;

PageFileTotalPanel:=TPanel.Create(Page);
with PageFileTotalPanel do
begin
Parent:=Page.Surface;
Caption:=' '+IntToStr(GetSystemPage)+' MB';
Left:=RAMTotalPanel.Left;
Top:=PageFilePanel.Top;
alignment:=taLeftJustify;
Width:=RAMTotalPanel.Width;
Height:=ScaleY(25);
BevelInner:=bvLowered;
TabOrder:=1;
Color :=$ccffcc;
end;

if GetSystemPage<800 then
begin
PageFileTotalPanel.Color:=clRed;
StaticText.Caption:='Не все компоненты удовлетворяют требованиям игры.';
end;

Result := Page.ID;
end;
//////////////////

var
KeyPage: TInputQueryWizardPage;
ProgressPage: TOutputProgressWizardPage;
function NextButtonClick(CurPageID: Integer): Boolean;
var
I: Integer;
begin
Result := True;
if CurPageID = KeyPage.ID then begin
ProgressPage.SetText('Проверка введенного пароля...', '');
ProgressPage.SetProgress(0, 0);
ProgressPage.Show;
try
for I := 0 to 10 do begin
ProgressPage.SetProgress(I, 10);
Sleep(100);
end;
finally
ProgressPage.Hide;
end;
if KeyPage.Values[0] = 'Forslay Inc' then
Result := True
else begin
MsgBox('Пароль не прошёл валидатность. Пожалуйста введите правильный пароль.', mbError, MB_OK);
Result := False;
end;
end else
Result := True;
end;
function GetSystemMetrics(nIndex:Integer):Integer;
external 'GetSystemMetrics@user32.dll stdcall';

procedure callplug(parentwnd: Integer; pluginname,funcname,param1,param2,param3,param4,param5,param6,param7,param8,param9,param10: PChar);
external 'callplug@files:callnsis.dll stdcall';


procedure AboutButtonOnClick(Sender: TObject);
begin
MsgBox('Для регестрации данной копии игры, обратитесь к автору даннной модификации.', mbInformation, mb_Ok);
MsgBox('Если Вы хотите это сделать сейчас, то обратитесь к автору [Forslay] следующими путями.', mbInformation, mb_Ok);
MsgBox('ICQ номер: 483-064-648', mbInformation, mb_Ok);
MsgBox('E-Mail: Forslay@inbox.ru', mbInformation, mb_Ok);
MsgBox('Либо позвоните ему на сотовый прямо сейчас: +79091954089, а так же домашний: +73493824329', mbInformation, mb_Ok);
MsgBox('После того как свяжитесь, сообщите свои данные: Имя и Фамилию, а так же Организацию', mbInformation, mb_Ok);
end;

procedure URLLabelOnClick(Sender: TObject);
var
ErrorCode: Integer;
begin
ShellExec('open', 'http://ataka.muravlenko.ru:8080', '', '', SW_SHOWNORMAL, ewNoWait, ErrorCode);
end;

procedure DirOnClick(Sender: TObject);
var
res: Boolean;
UserSelectDir: string;
begin
UserSelectDir := WizardForm.DirEdit.Text;
res := BrowseForFolder('Выберите директорию для установки и нажмите ''ОК''', UserSelectDir, True);
if res then
begin
WizardForm.DirEdit.Text := UserSelectDir;
end;
end;



procedure InitializeWizard();
var
AboutButton, CancelButton: TButton;
URLLabel: TNewStaticText;
BackgroundBitmapImage: TBitmapImage;
BackgroundBitmapText: TNewStaticText;
begin
CheckSystemPage(wplicense)
CancelButton := WizardForm.CancelButton;

AboutButton := TButton.Create(WizardForm);
AboutButton.Left := WizardForm.ClientWidth - CancelButton.Left - CancelButton.Width;
AboutButton.Top := CancelButton.Top;
AboutButton.Width := CancelButton.Width;
AboutButton.Height := CancelButton.Height;
AboutButton.Caption := 'Регестрация';
AboutButton.OnClick := @AboutButtonOnClick;
AboutButton.Parent := WizardForm;

URLLabel := TNewStaticText.Create(WizardForm);
URLLabel.Caption := 'Сайт проекта';
URLLabel.Cursor := crHand;
URLLabel.OnClick := @URLLabelOnClick;
URLLabel.Parent := WizardForm;
URLLabel.Font.Style := URLLabel.Font.Style + [fsUnderline];
URLLabel.Font.Color := clBlue;
URLLabel.Top := AboutButton.Top + AboutButton.Height - URLLabel.Height - 2;
URLLabel.Left := AboutButton.Left + AboutButton.Width + ScaleX(20);

BackgroundBitmapImage := TBitmapImage.Create(MainForm);
BackgroundBitmapImage.Left := 50;
BackgroundBitmapImage.Top := 90;
BackgroundBitmapImage.AutoSize := True;
BackgroundBitmapImage.Bitmap := WizardForm.WizardBitmapImage.Bitmap;
BackgroundBitmapImage.Parent := MainForm;

BackgroundBitmapText := TNewStaticText.Create(MainForm);
BackgroundBitmapText.Left := BackgroundBitmapImage.Left;
BackgroundBitmapText.Top := BackgroundBitmapImage.Top + BackgroundBitmapImage.Height + ScaleY(8);
BackgroundBitmapText.Caption := 'TBitmapImage';
BackgroundBitmapText.Parent := MainForm;


KeyPage := CreateInputQueryPage(wpWelcome,
'Персональная информация', 'Какой пароль необходим для продолжения?',
'Вы должны ввести пароль, который позволит дальнейший ход выполнения установочных действий. ' +
'Пароль находится в сопутствующем readme.txt.');
KeyPage.Add('Пароль:', False);
ProgressPage := CreateOutputProgressPage('Персональная информация',
'Какой пароль необходим для продолжения?');
ExtractTemporaryFile('splash.bmp')
ExtractTemporaryFile('splash.wav')
ExtractTemporaryFile('AdvSplash.dll')
callplug(0,ExpandConstant('{tmp}\AdvSplash.dll'),'show','1500','4000','2500','-1',ExpandConstant('{tmp}\splash'),'','','','','')
end;

function KillTask(ExeFileName: string): Integer;
external 'KillTask@files:ISTask.dll stdcall delayload';

function RunTask(FileName: string; bFullpath: Boolean): Boolean;
external 'RunTask@files:ISTask.dll stdcall delayload';

//**************************************************//
function InitializeSetup(): Boolean;
begin
If RunTask('hl.exe', false) then
begin
if MsgBox('В данный момент запущена игра Counter-Strike, для продолжения установки я её вырублю. Ок?', mbInformation, mb_YesNo) = idYes then
begin
KillTask('hl.exe');
Result:= True;
end else
Exit;
end;
Result:=True;
end;

procedure CurPageChanged(CurPageID: Integer);
begin
If CurPageID=wpLicense then
begin
WizardForm.BackButton.Enabled := False;
end
else
If CurPageID=wpInfoBefore then
begin
WizardForm.BackButton.Enabled := True;
end;
end;

procedure CancelButtonClick(CurPage: Integer; var Cancel, Confirm: Boolean);
var
hWnd: Integer;
begin
Cancel:=False;
Confirm:=False;
hWnd := StrToInt(ExpandConstant('{wizardhwnd}'));
if MessageBox(hWnd, 'Вы действительно хотите отменить установку игры?', 'Выход из установки', MB_YESNO or $0) = idYes
then
Cancel:=true;
end;

function CheckSerial(Serial: String): Boolean;
var
mask:string;
i:Integer;
begin
Result:=True;
mask:='####-####-##****';
If Length(Serial)<>Length(mask) then
begin
Result:=False;
exit;
end;
For i:=1 to Length(mask) do
begin
If StrGet(mask, i)='#' then
If not ((Ord(StrGet(Serial, i))>=48) and (Ord(StrGet(Serial, i))<=57)) then
begin
Result:=False;
exit;
end;
If StrGet(mask, i)='*' then
If not ((StrGet(Serial, i)>='A') and (StrGet(Serial, i)<='Z')) then
begin
Result:=False;
exit;
end;
end;
end;



//////////////Нажатия на Beveled
procedure BevelLabelOnClick(Sender: TObject);
var
ErrorCode: Integer;
begin
ShellExec('open', 'http://www.chuvakstepan.xost.ru', '', '', SW_SHOWNORMAL, ewNoWait, ErrorCode);
end;
///////////////////////////

//////////////Нажатия на Chuvakstepan Inc
procedure LabelCOMP(Sender: TObject);
var
hWnd: Integer;
begin
MessageBox(hWnd, 'Что ты хотел, нажав на эту штуку?', 'Выход из установки', MB_OK or $0)
end;
///////////////////////////

[Icons]
Name: "{group}\Counter-Strike"; Filename: "{app}\hl.exe"
Name: "{group}\{cm:ProgramOnTheWeb,Counter-Strike}"; Filename: "http://ataka.muravlenko.ru:8080/"
Name: "{group}\{cm:UninstallProgram,Counter-Strike}"; Filename: "{uninstallexe}"
Name: "{commondesktop}\Counter-Strike"; Filename: "{app}\hl.exe"; Tasks: desktopicon
Name: "{userappdata}\Microsoft\Internet Explorer\Quick Launch\Counter-Strike"; Filename: "{app}\hl.exe"; Tasks: quicklaunchicon

[Run]
Filename: "{app}\hl.exe"; Description: "{cm:LaunchProgram,Counter-Strike}"; Flags: shellexec postinstall skipifsilent


Поэтому прошу Вашей помощи! Профессионалы! Пожалуйста срочно помогите мне!!!!! Я уже просто незнаю на что надееться! У самого ни чо невыходит .

Очень буду благодарен! Заранее Спасибо!!!!!!

Автор: NightW0lf
Дата сообщения: 15.06.2007 18:36
Forslay

Цитата:
И для этого я хочу создать профессиональный красочный инсталлятор:
> Встроенная mp3 музыка + клавиши управления.
> Красивая Оболочка
> Выбор русской и английской версии
> (Снизу где пишеться Forslay Inc * 2007, что бы эту примочка была активна, при нажатии на неё - была переадресация на мой E-Mail.
> Хорошая заставка! Желательно какое нить слайд шоу!

Вот скачай руководство от Kindly [оно есть в шапке], там есть ответы на все твои вопросы)

Добавлено:
Всем привет!
У меня такая проблема:
Я решил добавить выбор языков в свой сетап [Russian & English], и проблема заключаеться в том что я использую подсказки для кнопок управления музыкой + есть новые диалоговые страницы - и естественно там все написанно по Русски, а вот если я выберу Английский язык то получаеться несоответсвие выбран английский, а на этих местах написанно по Русски.
Как сделать так чтобы если выбран Английский то текст у подсказок и отдельных страниц будет на Английском, а если выбран Русский то на русском?
Автор: Sero
Дата сообщения: 15.06.2007 21:26
NightW0lf


Цитата:
Я решил добавить выбор языков в свой сетап [Russian & English], и проблема заключаеться в том что я использую подсказки для кнопок управления музыкой + есть новые диалоговые страницы - и естественно там все написанно по Русски, а вот если я выберу Английский язык то получаеться несоответсвие выбран английский, а на этих местах написанно по Русски.
Как сделать так чтобы если выбран Английский то текст у подсказок и отдельных страниц будет на Английском, а если выбран Русский то на русском?


Вот пример:
[more=код]

Код:
[Setup]
AppName=Test
AppVerName=Test
CreateAppDir=no
Uninstallable=no

[Languages]
Name: rus; MessagesFile: compiler:\Languages\Russian.isl;
Name: eng; MessagesFile: compiler:Default.isl

[CustomMessages]
rus.PageCaption=This is Russian
eng.PageCaption=This is English

eng.PageDescription=This is English
rus.PageDescription=This is Russian

eng.TextCaption=English
rus.TextCaption=Russian

[Code]
var
English: TNewStaticText;

function CustomForm_CreatePage(PreviousPageId: Integer): Integer;
var
Page: TWizardPage;
begin
Page := CreateCustomPage(
PreviousPageId,
ExpandConstant('{cm:PageCaption}'),
ExpandConstant('{cm:PageDescription}'));

English := TNewStaticText.Create(Page);
with English do
begin
Parent := Page.Surface;
Caption := ExpandConstant('{cm:TextCaption}');
Left := 24
Top := 16
Wordwrap := True;
AutoSize := False;
TabOrder := 0;
end;

Result := Page.ID;
end;


procedure InitializeWizard();
begin
CustomForm_CreatePage(wpWelcome);
end;
Автор: paRUS_51
Дата сообщения: 15.06.2007 22:25
Кто-нибудь подскажите, пожалуйста, как сделать так чтобы показывались проценты вовремя установки.
Заранее ОГРОМНОЕ СПАСИБО!!!!!
Автор: NightW0lf
Дата сообщения: 15.06.2007 22:53
Sero
Спасибо!
А вот как сделать это подсказаок у кнопок управления MP3 и для RTF лицензии и readme.
Автор: Sero
Дата сообщения: 15.06.2007 23:36
NightW0lf


Цитата:
А вот как сделать это подсказаок у кнопок управления MP3

Вот:

Код:
[CustomMessages]
eng.StopButtonHint=Stop
rus.StopButtonHint=Стоп

eng.PlayButtonHint=Play
rus.PlayButtonHint=Воспроизведение

eng.PauseButtonHint=Pause
rus.PauseButtonHint=Пауза

[Code]
.....
.....
PlayButton := TButton.Create(WizardForm);
PlayButton.Left := 5;
PlayButton.Top := 335;
PlayButton.Width := 50;
PlayButton.Height := 20;
PlayButton.Caption := 'Play';
PlayButton.OnClick := @PlayButtonOnClick;
PlayButton.Parent := WizardForm;
PlayButton.Cursor := crHand;
PlayButton.ShowHint := True;
PlayButton.Hint := ExpandConstant('{cm:PlayButtonHint}')

PauseButton := TButton.Create(WizardForm);
PauseButton.Left := 58;
PauseButton.Top := 335;
PauseButton.Width := 50;
PauseButton.Height := 20;
PauseButton.Caption := 'Pause';
PauseButton.OnClick := @PauseButtonOnClick;
PauseButton.Parent := WizardForm;
PauseButton.Cursor := crHand;
PauseButton.ShowHint := True;
PauseButton.Hint := ExpandConstant('{cm:PauseButtonHint}')

StopButton := TButton.Create(WizardForm);
StopButton.Left := 111;
StopButton.Top := 335;
StopButton.Width := 50;
StopButton.Height := 20;
StopButton.Caption := 'Stop';
StopButton.OnClick := @StopButtonOnClick;
StopButton.Parent := WizardForm;
StopButton.Cursor := crHand;
StopButton.ShowHint := True;
StopButton.Hint := ExpandConstant('{cm:StopButtonHint}')
......
......
Автор: boss911
Дата сообщения: 16.06.2007 03:45
Ребята, помогите, плиз! Нужно, чтоб секция [Registry] обработалась (вносились данные в реестр) после [Run], даже, если выбрана галка 'postinstall'. Реально?

Ситуация такая, что в секции [Run], выполняется некий *.exe с ключами, так программа себя регистрирует в тихом режиме, так вот эта регистрация перезаписывает значения реестра, которые указаны у меня в [Registry].

Сразу скажу, что выполнения команды regedit /s settings.reg, после выполнения всех команд запусков, не выход, так как значения реестра имеют переменные (пути к файлам и т.д.).
Автор: paRUS_51
Дата сообщения: 16.06.2007 05:22
Кто-нибудь подскажите, пожалуйста, как сделать так чтобы показывались проценты вовремя установки.
Заранее ОГРОМНОЕ СПАСИБО!!!!!
Автор: Chuvakstepan
Дата сообщения: 16.06.2007 11:42
Привет всем!
У меня небольшой вопросик
Есть код:


Код: [Registry]
Root: HKLM; SubKey: SOFTWARE\Chuvakstepan\Spider-man3; ValueType: string; ValueName: PathGame; ValueData: {app}; Flags: uninsdeletekey

/////////// Удаление игровых сохранений
procedure CurUninstallStepChanged(CurUninstallStep: TUninstallStep);
var
ResultStr:string;
begin
case CurUninstallStep of
usUninstall:
begin
RegQueryStringValue(HKLM, 'SOFTWARE\Chuvakstepan\Spider-man3', 'UnInstConfirm', ResultStr)
if MsgBox('Удалить сохранённые игры?, mbInformation, MB_YESNO) = idYes
then
if not DelTree(ExpandConstant('{userdocs}')+'\Activision\Spider-Man 3', True, True, True)
then
MsgBox('Папка не удалена!' #13#13 'Папка не существует или задействованна.', mbError, MB_OK);
end;
end;
end;
////////////////////////////
Автор: Sero
Дата сообщения: 16.06.2007 11:52
Chuvakstepan

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

Попробуй так:

Код:
[Registry]
Root: HKLM; SubKey: SOFTWARE\Chuvakstepan\Spider-man3; ValueType: string; ValueName: PathGame; ValueData: {app}; Flags: uninsdeletekey

[code]
procedure CurUninstallStepChanged(CurUninstallStep: TUninstallStep);
var ResultStr:String;
begin
if CurUninstallStep=usPostUninstall then
begin
RegQueryStringValue(HKLM, 'SOFTWARE\Chuvakstepan\Spider-man3', 'UnInstConfirm', ResultStr)
if DirExists(ExpandConstant('{userdocs}')+'\Activision\Spider-Man 3') then
if MsgBox('Удалить сохраненные игры',mbconfirmation, mb_YesNo) = IDYES then
begin
if not DelTree(ExpandConstant('{userdocs}')+'\Activision\Spider-Man 3', True, True, True)
then
MsgBox('Папка не удалена!' #13#13 'Папка не существует или задействованна.', mbError, MB_OK);
end;
end;
end;
Автор: Chuvakstepan
Дата сообщения: 16.06.2007 12:05
Sero
Спасибо!!!
Автор: Sero
Дата сообщения: 16.06.2007 12:42
Chuvakstepan
Все работает?
Автор: gregoryaz
Дата сообщения: 16.06.2007 12:54
Товарищи, помогите плиз!
Как сделать, что бы при установке изменить количество стандартных сообщений? Т.е., убрать часть из них, например страницу приветствия? В хелпе написано, что нужно ковыряться в файле Default.isl или том, на какой ссылка в секции Languages, но что там конкретно изменить???
Автор: NightW0lf
Дата сообщения: 16.06.2007 13:10
gregoryaz

Цитата:
Как сделать, что бы при установке изменить количество стандартных сообщений? Т.е., убрать часть из них, например страницу приветствия? В хелпе написано, что нужно ковыряться в файле Default.isl или том, на какой ссылка в секции Languages, но что там конкретно изменить???

Для этого открой нужный языковой файл в формате .isl и найди там интересующий тебя текст, перед текстом будет переменная которая и отвечает за отображаемый текст далее занеси эту переменную в свой скрипт в секцию [Messages]:
ПРИМЕР

Код:
[Messages]
WelcomeLabel2=Твой текст
Автор: gregoryaz
Дата сообщения: 16.06.2007 13:41
NightW0lf, это как я понял, изменянет стандартный текст сообщения на свой. Мне же надо что бы изо всех сообщений т.е. диалоговых окон типа страницы приветствия, страницы выбора папки установки, страницы выбора ярлыков и т.д., показываемых пользователю при установке готовой программы, выдавалось только одно - диалог выбора папки установки и всё. Можно ли так сделать?
Автор: Sampron
Дата сообщения: 16.06.2007 14:01
gregoryaz

[Setup]
AppName=My Program
AppVerName=My Program
DefaultDirName={pf}\My Program
DisableReadyPage=True
DisableFinishedPage=True

[Code]
procedure CurPageChanged(CurPageID: Integer);
begin
If CurPageID=wpWelcome then
begin
SendMessage(WizardForm.NEXTBUTTON.Handle, 513, 0, 0)
SendMessage(WizardForm.NEXTBUTTON.Handle, 514, 0, 0)
end
end;
Автор: iTASmania_Inc
Дата сообщения: 16.06.2007 14:40
В форум
А вот тут paRUS_51 вопрос задавал насчёт того, чтобы показывать проценты во время установки, это для Inno реально? Потому что где-то видел подобное, не помню где, но инсталлятор был очень похож на Inno'вский!
Автор: Victor_Dobrov
Дата сообщения: 16.06.2007 15:45
Corona Skin & SysInfo - обложка со встроенной проверкой системных требований. При несоответствии минимальным требованиям после страницы 'Приветствия' будет показана таблица, где неподходящие программе условия выделены красным цветом. Увеличит объём инсталлятора всего на 70Кб.
Автор: NightW0lf
Дата сообщения: 16.06.2007 16:45
2 All
У меня есть код для вывода даты и времени в BeveledLabel, а мне бы хотелось чтобы выводилось еще в диалоговое сообщение. Это возможно - если то как?
[more=Вот код для вывода даты и времени]

Код:
[Setup]
AppName=date.time.beveledlabel.am.pm
AppVerName=date.time.beveledlabel.am.pm
DefaultDirName={pf}\date.time.beveledlabel.am.pm
OutputBaseFilename=date.time.beveledlabel.am.pm.by.genri


;Язык всех диалогов в инсталляторе:
[Languages]
Name: "russian"; MessagesFile: "compiler:Languages\Russian.isl"


[Messages]
BeveledLabel=Name of program



Код:
type
TFileTime = record
lowdatatime: longint;
highdatatime: longint;
end;

TSystemTime = record
wYear: Word;
wMonth: Word;
wDayOfWeek: Word;
wDay: Word;
wHour: Word;
wMinute: Word;
wSecond: Word;
wMilliseconds: Word;
end;

function GetFileTime(hfile: longint; var lpcreation, lpaccess, lpwrite: TFileTime): boolean;
external 'GetFileTime@kernel32.dll stdcall';

function FileTimeToSystemTime(var tftm: TFileTime; var systm: TSystemTime): boolean;
external 'FileTimeToSystemTime@kernel32.dll stdcall';

function FileTimeToLocalFileTime(utct: TFileTime; var loct: TFileTime): boolean;
external 'FileTimeToLocalFileTime@kernel32.dll stdcall';

function GetDateFormat(Locale: Integer; dwFlags: LongInt;
var lpDate: TSystemTime; lpFormat: PChar; lpDateStr: string;
cchDate: Integer): Integer; external
'GetDateFormatA@kernel32.dll';

function GetTimeFormat(Locale: Integer; dwFlags: LongInt;
var lpTime: TSystemTime; lpFormat: PChar; lpTimeStr: string;
cchDate: Integer): Integer; external
'GetTimeFormatA@kernel32.dll';

var
strFile: string;
strCreTime: string;
strModTime: string;
strAccessTime: string;

function FormattedTime(t: TSystemTime): string;
var
s, fmt: string;
begin
fmt := StringOfChar(' ', 64);
GetDateFormat(0, 0, t, 'yyyy-MM-dd', fmt, 63);
fmt := CastIntegerToString(CastStringToInteger(fmt));

s := ' -- built on ' + fmt;

fmt := StringOfChar(' ', 64);
GetTimeFormat(0, 0, t, 'hh:mm:ss tt', fmt, 63);
fmt := CastIntegerToString(CastStringToInteger(fmt));

s := s + ' at ' + fmt;

Result := s;
end;

function GetFileSysTime(nomef: string; var stime: string; idx: Integer): TSystemTime;
var
fs: TFileStream;
risul: TSystemTime;
creat, access, write, local: TFileTime;
begin
fs := TFileStream.Create(nomef, fmOpenRead);
GetFileTime(fs.handle, creat, access, write);
fs.Free;
case idx of
1: FileTimeToLocalFileTime(creat, local);
2: FileTimeToLocalFileTime(access, local);
3: FileTimeToLocalFileTime(write, local);
end;
FileTimeToSystemTime(local, risul);
stime := FormattedTime(risul);
Result := risul;
end;

procedure InitializeWizard();
var
filename, s: string;
t: TSystemTime;
begin
filename := ExpandConstant('{srcexe}');
strFile := filename;
t := GetFileSysTime(filename, s, 1);
strCreTime := s;
t := GetFileSysTime(filename, s, 2);
strAccessTime := s;
t := GetFileSysTime(filename, s, 3);
strModTime := s;

WizardForm.BeveledLabel.Caption := WizardForm.BeveledLabel.Caption + strCreTime;
end;
Автор: gregoryaz
Дата сообщения: 16.06.2007 16:51
Sampron, огромное спасибо, работает, только при таком варианте ещё появляется страничка выбора ярлыков, а мне её нужно убрать. Как бы и её удалить, чтоб осталась только страница выбра места установки?
Автор: Sampron
Дата сообщения: 16.06.2007 16:58
gregoryaz
Удали секцию [Tasks]
Автор: boss911
Дата сообщения: 16.06.2007 18:45
Дорогие кодеры, ну помогите пожалуйста! Неужели нет решения, чтоб поменять последовательность выполнения процедур?
Автор: gregoryaz
Дата сообщения: 16.06.2007 18:54
Sampron, если секцию [Tasks] удалить, то тогда ярлыки не создадутся, а мне нужно чтоб они создавались, но чтоб пользователь не видел страницы их выбора, так можно?
Автор: Sampron
Дата сообщения: 16.06.2007 19:17
gregoryaz

Цитата:
если секцию [Tasks] удалить, то тогда ярлыки не создадутся

Ты уверен что не создадутся? а так не пробовал:

[Setup]
AppName=My Program
AppVerName=My Program 1.5
DefaultDirName={pf}\My Program

[Files]
Source: compiler:Examples\MyProg.exe; DestDir: {app}

[Icons]
Name: {commondesktop}\My Program; Filename: {app}\MyProg.exe
Автор: gregoryaz
Дата сообщения: 16.06.2007 20:27
Sampron, офигенно большой тебе сенкс!! Всё так как надо.
Автор: Sero
Дата сообщения: 16.06.2007 21:50
NightW0lf

Цитата:
У меня есть код для вывода даты и времени в BeveledLabel, а мне бы хотелось чтобы выводилось еще в диалоговое сообщение. Это возможно - если то как?


[more=Так]

Код:
[Setup]
;Название программы - инсталлятора, а также заголовок инсталлятора, (пожеланию можно версию указать):
AppName=about.button
;Версия программы - инсталлятора, (пожеланию можно указать - название + версию):
AppVerName=about.button
;Директория установки для программы - инсталлятора:
DefaultDirName={pf}\about.button
;Название выходного файла компилятора:
OutputBaseFilename=about.button.by.nightw0lf


[Code]
type
TFileTime = record
lowdatatime: longint;
highdatatime: longint;
end;

TSystemTime = record
wYear: Word;
wMonth: Word;
wDayOfWeek: Word;
wDay: Word;
wHour: Word;
wMinute: Word;
wSecond: Word;
wMilliseconds: Word;
end;

const
MB_ICONINFORMATION = $40;
MB_ICONEXCLAMATION = $30;
MB_ICONQUESTION = $20;
MB_ICONSTOP = $10;
MB_ICONNONE = $0;

function MessageBox(hWnd: Integer; lpText, lpCaption: string; uType: Cardinal): Integer;
external 'MessageBoxA@user32.dll stdcall';
function GetFileTime(hfile: longint; var lpcreation, lpaccess, lpwrite: TFileTime): boolean;
external 'GetFileTime@kernel32.dll stdcall';

function FileTimeToSystemTime(var tftm: TFileTime; var systm: TSystemTime): boolean;
external 'FileTimeToSystemTime@kernel32.dll stdcall';

function FileTimeToLocalFileTime(utct: TFileTime; var loct: TFileTime): boolean;
external 'FileTimeToLocalFileTime@kernel32.dll stdcall';

function GetDateFormat(Locale: Integer; dwFlags: LongInt;
var lpDate: TSystemTime; lpFormat: PChar; lpDateStr: string;
cchDate: Integer): Integer; external
'GetDateFormatA@kernel32.dll';

function GetTimeFormat(Locale: Integer; dwFlags: LongInt;
var lpTime: TSystemTime; lpFormat: PChar; lpTimeStr: string;
cchDate: Integer): Integer; external
'GetTimeFormatA@kernel32.dll';

var
strFile: string;
strCreTime: string;
strModTime: string;
strAccessTime: string;



function FormattedTime(t: TSystemTime): string;
var
s, fmt: string;
begin
fmt := StringOfChar(' ', 64);
GetDateFormat(0, 0, t, 'yyyy-MM-dd', fmt, 63);
fmt := CastIntegerToString(CastStringToInteger(fmt));

s := ' -- built on ' + fmt;

fmt := StringOfChar(' ', 64);
GetTimeFormat(0, 0, t, 'hh:mm:ss tt', fmt, 63);
fmt := CastIntegerToString(CastStringToInteger(fmt));

s := s + ' at ' + fmt;

Result := s;
end;



function GetFileSysTime(nomef: string; var stime: string; idx: Integer): TSystemTime;
var
fs: TFileStream;
risul: TSystemTime;
creat, access, write, local: TFileTime;
begin
fs := TFileStream.Create(nomef, fmOpenRead);
GetFileTime(fs.handle, creat, access, write);
fs.Free;
case idx of
1: FileTimeToLocalFileTime(creat, local);
2: FileTimeToLocalFileTime(access, local);
3: FileTimeToLocalFileTime(write, local);
end;
FileTimeToSystemTime(local, risul);
stime := FormattedTime(risul);
Result := risul;
end;

procedure AboutButtonOnClick(Sender: TObject);
var
hWnd: Integer;
begin
hWnd := StrToInt(ExpandConstant('{wizardhwnd}'));
MessageBox(hWnd, '' +
+ #13 'Released: '+strCreTime, 'Инфо', MB_OK or $40);
end;


procedure InitializeWizard();
var
Width, Height, I: Integer;
AboutButton, CancelButton: TButton;
filename, s: string;
t: TSystemTime;
begin
filename := ExpandConstant('{srcexe}');
strFile := filename;
t := GetFileSysTime(filename, s, 1);
strCreTime := s;
t := GetFileSysTime(filename, s, 2);
strAccessTime := s;
t := GetFileSysTime(filename, s, 3);
strModTime := s;

CancelButton := WizardForm.CancelButton;

AboutButton := TButton.Create(WizardForm);
AboutButton.Left := WizardForm.ClientWidth - CancelButton.Left - CancelButton.Width;
AboutButton.Top := CancelButton.Top;
AboutButton.Width := CancelButton.Width;
AboutButton.Height := CancelButton.Height;
AboutButton.Caption := 'About';
AboutButton.ShowHint := True
AboutButton.Hint := 'О программе'
AboutButton.OnClick := @AboutButtonOnClick;
AboutButton.Parent := WizardForm;
AboutButton.Cursor := crHand;
AboutButton.Font.Style := AboutButton.Font.Style + [fsUnderline];
end;
Автор: EagleSH
Дата сообщения: 16.06.2007 23:09
Unc1e

Цитата:
Вопрос к обладателям Windows Vista. Что нужно написать в скрипте, чтобы добавлялся ярлык к установленной игре в папке «Игры»? Чтобы рейтинг ESRB и индекс производительности правильно отображались.

вот наткнулся на статью, поможет

http://www.thevista.ru/page.php?id=8718
Автор: NightW0lf
Дата сообщения: 16.06.2007 23:27
Sero

Цитата:
Так ?

Да, СПАСИБО!

Страницы: 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768

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


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