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

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

Автор: GRom V
Дата сообщения: 12.04.2008 03:11
Есть такой скриптик...
procedure CurUninstallStepChanged(CurUninstallStep: TUninstallStep);
var
Res: Integer;
begin case CurUninstallStep of
usPostUninstall:
begin
//Проверяем присутствие папки после удаления
If DirExists(ExpandConstant('{userdocs}\My Games\Crysis\')+'')
then
//Создаем диалог с тремя кнопками
case MsgBox('Удалить сохранения игры "Crysis"?'#13#13 +
'"Да" – полное удаление сохранений.' #13#13
//'"Нет" – открыть папку в проводнике, чтобы вручную удалить файлы.'#13#13 +
'"Отмена" – Оставить сохранения.', mbInformation, MB_OKCANCEL)
of IDOK:
begin
DelTree(ExpandConstant('{app}')+'', True, True, True)
DelTree(ExpandConstant('{userdocs}\My Games\Crysis\')+'', True, True, True)
end;
end;
end;
end;
end;

Как сделать чтоб при деинсталляции, при нажатии ОК - собственное сообщение, НО стандартное в конце НЕ ВЫСКАКИВАЛО???
При нажатии Отмена - собственное сообщение, НО стандартное в конце НЕ ВЫСКАКИВАЛО???
Автор: Single Feniks
Дата сообщения: 12.04.2008 04:38
chelobey

1. А не судьба ее просто в невидимую зону передвинуть и не париться!
Ну или передвинуть ее на задний план! если окно чем-нить забито, картинками там разными.
2. Можно сделать проверку в реестре в секции раскладки клавиатуры, в секции обращения к Shell32 там тоже все по-русски ну и в секции временной зоны, ну и много еще где ну а дальше уже по результатам проверок выводишь нужное тебе сообщение. Вот примерно ключи реестра которые будут меняться исходя из версии виндоза:

[HKEY_USERS\.DEFAULT\Software\Microsoft\Windows\ShellNoRoam\MUICache]

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\WOW\boot.description]
"language.dll"="Русский"

[HKEY_USERS\.DEFAULT\Software\Microsoft\Windows NT\CurrentVersion\Time Zones]
"TimeZoneKeyName"="Russian Standard Time"

------------------------------------------------------------------------------------------------------------------

А теперь собственно вопрос: Как отключить у объектов (к примеру у тех же кнопок) функцию переключения табуляцией?! Чтобы при нажатии на таб не переключалась активное выдиление, ну или не переключалось на то, на что не нужно! Именно не делать неактивным объект а только отключить "табулентность"! =)
Автор: chelobey
Дата сообщения: 12.04.2008 11:13
всем спасибо
замечания учел
Автор: Single Feniks
Дата сообщения: 12.04.2008 18:57
Ну и совсем простенький вопрос:

Как заставить Inno брать путь из ключа такого вида: DefaultDirName={reg:HKLM\SOFTWARE\Microsoft\...\{72289AD0-9E28-46B9-8587-0F56460B38D5},InstallPath|{pf}\Прога} Он ругается на то что не находит константу {72289AD0-9E28-46B9-8587-0F56460B38D5}! пробовал и {{ и в константу его загонять и дефиндить... Не помогает! Подскажите плз!

З.Ы.: \...\ - это сокрашение длинного пути, на всякий случай уточню.. а-то мало ли =)

Автор: Unc1e
Дата сообщения: 12.04.2008 19:24
Single Feniks, кажется так DefaultDirName={reg:HKLM\SOFTWARE\Microsoft\...\{{72289AD0-9E28-46B9-8587-0F56460B38D5%7d,InstallPath|{pf}\Прога}
Автор: Single Feniks
Дата сообщения: 12.04.2008 19:48
Во точ то надо! Спасибо! чет сам про ASCII не подумал... хотя она тож чет не всегда срабатывает! =( Ну а на мои прошлые вопросы никто не желает ответить?! =)
Автор: elapse
Дата сообщения: 12.04.2008 20:17
Single Feniks, чтобы снять выделение с кнопки, создай Label c Transparent := True; при наведении на который возвращай нужное положение текстуры. Как пример - см. Corona Skin.

Цитата:
Как отключить у объектов (к примеру у тех же кнопок) функцию переключения табуляцией?!


Код:
procedure InitializeWizard;
begin
WizardForm.DirBrowseButton.TabStop := False;
end;
Автор: shurman31
Дата сообщения: 12.04.2008 20:54
Genri, Спасибо большое!! Добавил строку Result:= True; устанавливается и то и другое, только запускаютсяя оба сразу. А как сделать чтобы сначала установился Server? а после его установки уже запустилась установка приложения.

И ещё один вопросик можно. Можно ли с помощью Inno Setup установить базу данных?
Автор: Single Feniks
Дата сообщения: 12.04.2008 21:30
elapse
За табуляцию спасибо то что надо!
А вот снятие выделения именно этим способом я и не хочу делать (Хотел уточнить при написании вопроса да поленился)! Хотелось бы узнать еслть ли именно процедуры похожие на те что я перечислил.
Автор: Genri
Дата сообщения: 12.04.2008 21:48
shurman31

Цитата:
как сделать чтобы сначала установился Server?
-- я уже в предыдущем сообщении говорил: не используй в Exec не предназначенные для нее константы - ssInstall это этапы установки (TSetupStep). В функции Exec следует использовать константы TExecWait = (ewNoWait, ewWaitUntilTerminated, ewWaitUntilIdle).
Начнешь подставлять правильные, поймешь в чем разница.
Автор: shurman31
Дата сообщения: 12.04.2008 22:37
Genri, спасибо. Подставил ewWaitUntilTerminated теперь всё круто. Очень помог!!!
Автор: GRom V
Дата сообщения: 13.04.2008 00:27
Ответьте ПЛИЗЗ кто нить на мой вопросик!!!???

Автор: KurtWagner
Дата сообщения: 13.04.2008 03:03
Ау народ! Помогите плиз! Как перезагружать компьютер без потверждения??? т.е. устанавливается жмешь готово и он автомат. перезагружаеться!!!
Автор: Kardinalli
Дата сообщения: 13.04.2008 21:14
Ветки про инсталляторы вообще, к сожалению не нашел, поэтому спрошу здесь. Подскажите, в каком из инсталляторов при установке есть возможность проверить наличие некоторых файлов и в зависимости от результата разрешить, или запретить работу сетапа? Собственно, мне нужно создать апдейт, с заменой некотрых файлов уже установленной программы.
Только пожалуйста без самописных скриптовых сценариев! Мне проще написать ехе-шник и загрузить ему в ресурсы нужные файлы...
Пользуюсь Smart Install Maker, отличная вещь, но там нет такой проверочной опции...
Автор: Kutsenko
Дата сообщения: 13.04.2008 23:04
2 Kardinalli
В руководстве по Inno Setup есть такое. Скачай Inno Setup Scripting и там найди.

У меня возник такой нюмбский вопрос: как убрать у формы кнопку "закрыть", и как можна убрать выделение с пароля - когда я нажимаю "далее" открывается следующая страничка с паролем, но он почему выделенный, как это можно убрать? Сори что такие вопросы уже были раньше заданы.
Автор: Single Feniks
Дата сообщения: 14.04.2008 03:08
4 Kutsenko - Я делал вот так: procedure InitializeWizard(); begin WizardForm.BorderIcons:=[]; end; Но при этом пропадают и кнопка минимизации и кнопка "На весь экран" (biMinimize, biMaximize), причем ввод этих параметров без biSystemMenu ничего не дает, а вместе с ним - возвращает все кнопки!
Так что если кто знает как скрыть (Показать все кнопки кроме) кнопку [Х] закрыть у формы, то я бы тоже не прочь это узнать! =)

Kardinalli - Да... пользовался как-то я Smart Install Maker... хорош... для маленьких топорных инсталлов, для больших проектов вообще не катит, да и алгоритм сжатия/извлечения какой-то корявый - при размерах инсталла от 100-200 метров вешает систему на время установки, но устанавливает! ))
Изучай скриптовые языки они рулят для качественных проектов! И собственно по теме - вот тут небольшой скрипт "тихой" установки с проверкой по реестру в Inno. Тут только пару строчек на свои заменить и все, а подобных SIM с такими функциями что-то не знаю! =\

[more=< Скриптик >]

Вот 2 варианта Быстрой (Тихой, бесшумной, в скрытом режиме...) установки. После сообщения установит "Бесшумно":

------------------------------------------------------------------------------

[Setup]
AppName=Название
AppVerName=Название v1.0
DefaultDirName={reg:HKLM\SOFTWARE\Paint.NET,TARGETDIR|C:\Прога}
DisableProgramGroupPage=yes
OutputBaseFilename=setup
Compression=lzma
SolidCompression=yes
UsePreviousAppDir=false
DirExistsWarning=no
DisableReadyPage=true
DisableDirPage=yes
DisableFinishedPage=yes
Uninstallable=false

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

[Files]
Source: Папка с файлами\*; DestDir: {app}; Flags: ignoreversion

[Code]
function InitializeSetup() : Boolean;    begin
        if RegKeyExists(HKLM, 'SOFTWARE\Paint.NET')    then begin
        MsgBox(' "Название" успешно обнаружена.' #13#13 'Установка полностью автоматическая.', mbInformation, mb_Ok);
        Result := True;    end    else begin
        MsgBox(' "Название" не установлена или установлена неверно.' #13#13 'Дальнейшая работа мастера невозможна.', mbError, mb_Ok);
        Result:= False;    exit; end;
end;

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;

------------------------------------------------------------------------------

Ну и менее бесшумный вариант (Шапуку оставляешь ту же):

------------------------------------------------------------------------------

[Code]
function InitializeSetup() : Boolean;    begin
    if RegKeyExists(HKLM, 'HKLM, 'SOFTWARE\Paint.NET')
    then begin Result := True; end    else begin
    MsgBox(' "Название" не установлена или установлена неверно.' #13#13 'Дальнейшая работа мастера невозможна.', mbError, mb_Ok);
    Result:= False;    exit; end;
end;

procedure InitializeWizard(); begin
    WizardForm.WelcomeLabel1.Caption:=' Установка "Название"'
    WizardForm.WelcomeLabel2.Caption:=' "Название" успешно обнаружена, для установки жми кнопку "Установить"'
end;

procedure CurPageChanged(CurPageID: Integer); begin
    if CurPageID=wpWelcome then    begin
    If WizardForm.FindComponent('NextButton') is TButton then
    TButton(WizardForm.FindComponent('NextButton')).Caption:='Установить';
    If WizardForm.FindComponent('CancelButton') is TButton then
    TButton(WizardForm.FindComponent('CancelButton')).Caption:='Выход';    end;
end;

------------------------------------------------------------------------------
[/more]
Автор: Kardinalli
Дата сообщения: 14.04.2008 06:12
Single Feniks
Спасибо! Попробую.
А если запись в реестр не используется, как определить есть или нет файлы по указанному пути?

P.S. Нашел! При помощи IS Tools оказывается можно сделать почти все.
Автор: Kutsenko
Дата сообщения: 14.04.2008 07:28
2 Single Feniks
Так я пробывал. Это не помогает. Для инсталятора этот скрипт подходит, а вот для формы НЕТ. Вопросы остаются актуальными. HELP.
Автор: htuos
Дата сообщения: 14.04.2008 11:14
Kutsenko

Цитата:
как убрать у формы кнопку "закрыть"

листай назад, уже обсуждалось, причем недавно
Автор: Forslay
Дата сообщения: 14.04.2008 11:30
Народ помогите пожалуйста, вот есть такая функция:



Код: [code]
var
ResultCode: Integer;
ResultReg: string;

begin
Result := false;
if RegQueryStringValue(HKEY_LOCAL_MACHINE, 'SOFTWARE\Valve\Half-Life\cstrike', 'InstallPath', ResultReg)
then
if MsgBox('Counter-Strike уже установлен на Вашем компьютере.'#13#13'Вы желаете запустить Counter-Strike?', mbConfirmation, MB_YESNO) = IDYES
then
begin
RemoveQuotes(ResultReg);
if not Exec(ResultReg + '\hl.exe', '-game cstrike -steam -console', '', SW_SHOW, ewNoWait, ResultCode)
then
MsgBox('Ошибка', mbError, MB_OK);

end
else
begin
Result := true;
end;
Автор: htuos
Дата сообщения: 14.04.2008 12:02
Forslay
и в каком месте ты это делаешь (название процедуры, функции)?
если InitializeSetup, то наверное так

Код: begin
Result := false;
if RegQueryStringValue(HKEY_LOCAL_MACHINE, 'SOFTWARE\Valve\Half-Life\cstrike', 'InstallPath', ResultReg) then begin
if MsgBox('Counter-Strike уже установлен на Вашем компьютере.'#13#13'Вы желаете запустить Counter-Strike?', mbConfirmation, MB_YESNO) = IDYES then begin
RemoveQuotes(ResultReg);
if not Exec(ResultReg + '\hl.exe', '-game cstrike -steam -console', '', SW_SHOW, ewNoWait, ResultCode) then MsgBox('Ошибка', mbError, MB_OK);
end
end else Result := true;
end;
Автор: Single Feniks
Дата сообщения: 14.04.2008 12:28
4 Kutsenko

Чет я не понял тогда ты про какую форму вообще говоришь!
    MainForm.Visible:=True;
    MainForm.BorderIcons:=[];

Тож прекрасно работает... только размеры и положение дописать. Или ты вообще не про это?!
Автор: Kardinalli
Дата сообщения: 14.04.2008 12:32
Прошу не пинать, с Паскалем и скриптами раньше дела не имел, а IS изучаю первый день. Суть вопроса выше, несколькими постами ранее, проблему я решил, теперь не могу сообразить вот что: мне нужно, чтобы при отсутствии некоторых файлов в определенной папке, выводилось сообщение об их отсутствии и прекращении инсталляции.
Я попробовал использовать встроенную функцию:

Код: [Code]
procedure FlSr
if FileSearch('MyProg.exe', '{app}\MyDir\': string)='пусто ' then begin
MsgBox(' Программа MyProg не найдена. Обновление не завершено!', mbInformation, mb_Ok);
end
Автор: Single Feniks
Дата сообщения: 14.04.2008 12:44
Kardinalli

Я его сам за 2 дня изучил, конечно не совсем досконально. Правда до этого знал NSIS ну и было много типа SIM и т.д.
Попробуй лучше вот так:
function InitializeSetup() : Boolean;    
begin
    Result := True;
    if not FileExists('D:\Папка\Файл.exe') then    begin    
    MsgBox('Не найдены файлы в папке установки', mbError, mb_Ok); Result:= False; exit;
    end
end;
Автор: Kardinalli
Дата сообщения: 14.04.2008 13:16
Single Feniks
О, респект! То что нужно! Спасибо!
Автор: Forslay
Дата сообщения: 14.04.2008 14:02
htuos, спасибо за объяснение, но не работает... Просто в функции: function InitializeSetup(): Boolean;, у меня много других задач, и может быть из-за них продолжается установка.... Твой код я ставлю в самый верх функции: function InitializeSetup(): Boolean;, для того, что бы он исполнялся ранее, чем все остальные задачи... Но Увы не получается, у меня запускается приложение, и инсталляция продолжается... Ну веть полюбому можно сделать так что бы инсталяция наглухо закрывалась, после нажатия на кнопку "ОК"... Неужели нет такого параметра, который бы такое делал... 88(

Вот мой function InitializeSetup(): Boolean;:

[more]function InitializeSetup(): Boolean;

var
ResultCode: Integer;
ResultReg: string;
xres, yres, bpp, pl, tmp: Integer;
hDC: Integer;
lt, datelimit: TSystemTime;
s, crlf: string;
CancelButton: TButton;
ResultCode: Integer;
MD5, ResultStr: string;
hWnd: Integer;
ResultCode: Integer;
s, ResultStr: string;
res:Integer;
StaticText: TNewStaticText;
BitmapImage, SplashImage: TBitmapImage;
CancelButton: TButton;


begin
Result := false;
if RegQueryStringValue(HKEY_LOCAL_MACHINE, 'SOFTWARE\Valve\Half-Life\cstrike', 'InstallPath', ResultReg) then begin
if MsgBox('Counter-Strike уже установлен на Вашем компьютере.'#13#13'Вы желаете запустить Counter-Strike?', mbConfirmation, MB_YESNO) = IDYES then begin
RemoveQuotes(ResultReg);
if not Exec(ResultReg + '\hl.exe', '-game cstrike -steam -console', '', SW_SHOW, ewNoWait, ResultCode) then MsgBox('Ошибка', mbError, MB_OK);
end
end else Result := true;



begin
If RunTask('Steam.exe', false) or RunTask('hl.exe', False) or RunTask('cstrike.exe', False) or RunTask('cs.exe', False) or RunTask('hlds.exe', False) or RunTask('counter-strike.exe', False) or RunTask('tier0_a.dll', False) then
begin
if MsgBox('Для корректной установки корневой базы игры, мастер установки автоматически закроет все приложения, относящиеся к игровому двигателю - "Gold Source" - [HL - 1]' #13#13 'Внимание !!! После того, как Вы нажмёте "Да", начнётся процесс распаковки временных файлов...' #13#13 'Приложение может зависнуть на несколько секунд, поэтому прошу, немного подождать...' #13#13#13 'Продолжить?', mbInformation, mb_YesNo) = idYes then
begin
KillTask('Steam.exe');
KillTask('hl.exe');
KillTask('cstrike.exe');
KillTask('cs.exe');
KillTask('hlds.exe');
KillTask('counter-strike.exe');
KillTask('tier0_a.dll');
end else
Exit;
end;
end;
Result := True;
begin
MyArray := ['A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M',
'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z',
'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm',
'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z',
'1', '2', '3', '4', '5', '6', '7', '8', '9', '0',
'!', '@', '#', '$', '%', '^', '&', '*', '(', ')'];
Result := True;
end;
begin
if RegQueryStringValue(HKLM, 'Software\Valve\Half-Life\cstrike', 'UnInst', ResultStr)
then
begin
if ResultStr <> ''
then
begin
ResultStr := RemoveQuotes(ResultStr);
if MessageBox(hWnd, '{#MyGameName} уже установлен на Вашем компьютере.' #10#10 'Рекомендуется удалить, существующую копию, перед новой установкой.' #10#10'Удалить копию, установленную на Вашем компьютере ранее?', 'Предупреждение !!!', MB_YESNO or $10) = idYes
then
if not Exec(ResultStr, '', '', SW_SHOWNORMAL, ewWaitUntilTerminated, ResultCode)
then
MessageBox(hWnd, 'Ошибка при деинсталляции.' #13#13 '' + SysErrorMessage(ResultCode) + '.' #13#13 'Вероятно, деинсталлятор был перемещен, удален или переименован.', 'Внимание!', MB_OK or $10);
end;
end;
begin
ExtractTemporaryFile('russian.ini');
isxdl_SetOption('language',ExpandConstant('{tmp}\russian.ini'));
isxdl_SetOption('title','Установка - загрузка дополнительного контента');
isxdl_SetOption('resume','false');
Modifying := ExpandConstant('{param:modify|0}') = '1';
FilesDownloaded := False;
ISToolPathRead := False;

end;
end;

begin
ExtractTemporaryFile('Nord MC - У тебя есть судьба.mp3');
ExtractTemporaryFile('Alex - Counter-Strike Sound.mp3');
ExtractTemporaryFile('David Guetta - Love is Gone.mp3');
ExtractTemporaryFile('Unnamed - Counter-Strike remix.mp3');
ExtractTemporaryFile('Benny Benassi - Change Style.mp3');
ExtractTemporaryFile('Дерево жизни - Горят мосты.mp3');
ExtractTemporaryFile('Баста - Моя игра.mp3');
ExtractTemporaryFile('K Maro - Lets go.mp3');
ExtractTemporaryFile('NZ - Немного пьяный.mp3');
ExtractTemporaryFile('System of a Down - Aerials.mp3');
ExtractTemporaryFile('Dj Mixon - SummerZ-06.mp3');
ExtractTemporaryFile('Pakito & Dj Markus - Вас не слышно.mp3');
ExtractTemporaryFile('Lil Wayne Ft. Static Major - Lollipop.mp3');
ExtractTemporaryFile('Dj Fat - Alkaruno.mp3');
ExtractTemporaryFile('bass.dll');
Result:= True;
end;

begin
ExtractTemporaryFile('Forslay.bmp');
ExtractTemporaryFile('SmallImageForm.bmp');

Splash := CreateCustomForm();
Form := CreateCustomForm();

try

Splash.BorderStyle := bsNone;

SplashImage := TBitmapImage.Create(Splash);
SplashImage.Parent := Splash;
SplashImage.AutoSize := True;
SplashImage.Align := alClient;
SplashImage.Stretch := True;
SplashImage.Bitmap.LoadFromFile(ExpandConstant('{tmp}\Forslay.bmp'));

Splash.Width := SplashImage.Width;
Splash.Height := SplashImage.Height;
Splash.Center();
Splash.Show();

SetWindowLong(Splash.Handle, GWL_EXSTYLE, GetWindowLong(Splash.Handle, GWL_EXSTYLE) or WS_EX_LAYERED);
SetLayeredWindowAttributes(Splash.Handle, $00ff00, 255, LWA_COLORKEY);

Form.Caption := ExpandConstant('{cm:WaitCaption}');
Form.BorderIcons := [biSystemMenu];
Form.ClientWidth := 400;
Form.ClientHeight := 120;
Form.Left := GetSystemMetrics(16) - Form.ClientWidth - 8;
Form.Top := GetSystemMetrics(17) - Form.ClientHeight - 8;
Form.OnClose := @FormOnClose;

CancelButton := TButton.Create(Form);
CancelButton.Parent := Form;
CancelButton.SetBounds( Form.ClientWidth - 85, Form.ClientHeight - 33, 75, 23 );
CancelButton.Caption := ExpandConstant('{cm:CancelButtonCaption}');
CancelButton.ModalResult := mrCancel;
CancelButton.Cancel := True;

BitmapImage := TBitmapImage.Create(Form);
BitmapImage.Parent := Form;
BitmapImage.SetBounds(8, 8, 56, 56);
BitmapImage.Bitmap.LoadFromFile(ExpandConstant('{tmp}\SmallImageForm.bmp'));

StaticText := TNewStaticText.Create(Form);
StaticText.Parent := Form;
StaticText.Top := BitmapImage.Top + BitmapImage.Height / 3;
StaticText.Left := BitmapImage.Left + BitmapImage.Width + 8;
StaticText.Caption := ExpandConstant('{cm:InstallationPreparing, {#SetupSetting("AppName")}}');
StaticText.AutoSize := True;

ProgressBar := TNewProgressBar.Create(Form);
ProgressBar.Parent := Form;
ProgressBar.SetBounds( BitmapImage.Left, CancelButton.Top + 4, 280, 14 )
ProgressBar.Min := 0;
ProgressBar.Max := {#MaxPosition};
ProgressBar.Position := 0;

pfunc := WrapTimerProc(@OnTimer, 4);
TimerID := SetTimer(0, 0, {#TimeToElapse}, pfunc);

Form.ShowModal();

except
MsgBox(ExpandConstant('{cm:FormErrorMsg}'), mbCriticalError, mb_Ok);
finally
if ProgressBar.Position >= ProgressBar.Max then
Result := True;
Form.Free();
Splash.Free();

end;

end;
end;


var
MouseLabel, SiteLabel: TLabel;

procedure SiteLabelOnClick(Sender: TObject);
var
ErrorCode: Integer;
begin
ShellExec('open', 'http://reallite.cs2.ru', '', '', SW_SHOWNORMAL, ewNoWait, ErrorCode)
end;

procedure SiteLabelMouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
begin
SiteLabel.Font.Color := clred
end;

procedure SiteLabelMouseUp(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
begin
SiteLabel.Font.Color := clgreen
end;

procedure SiteLabelMouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer);
begin
SiteLabel.Font.Color := clblue
end;

procedure SiteLabelMouseMove2(Sender: TObject; Shift: TShiftState; X, Y: Integer);
begin
SiteLabel.Font.Color := clteal
end;


procedure PrintButtonClick(Sender: TObject);
var WordpadLoc: String;
RetCode: Integer;
begin

if MsgBox( 'Произвести печать лицензионного соглашения?', mbConfirmation, MB_YESNO ) = IDYES then
begin


RegQueryStringValue( HKLM, 'SOFTWARE\Microsoft\Windows\CurrentVersion\App Paths\WORDPAD.EXE',
'', WordpadLoc);


StringChange( WordpadLoc, '%ProgramFiles%', ExpandConstant('{pf}') );

StringChange( WordpadLoc, '"', '');

try
ExtractTemporaryFile('License.rtf');

if not Exec( WordPadLoc, ' /p ' + ExpandConstant('{tmp}\License.rtf') ,
ExpandConstant('{tmp}'), SW_HIDE, ewNoWait , RetCode ) then
MsgBox('Problems printing License file !' + IntToStr(RetCode), mbError, mb_Ok) ;

except
RaiseException('Problem printing license '+#13#13 +
'(Error ''' + GetExceptionMessage + ''' occurred)');
end;
end;
end;[/more]
Автор: htuos
Дата сообщения: 14.04.2008 15:02
Forslay
1. добрался до компа, посмотрел RemoveQuotes - функция
2. попробуй [more=так]
Result := false;
if RegQueryStringValue(HKEY_LOCAL_MACHINE, 'SOFTWARE\Valve\Half-Life\cstrike', 'InstallPath', ResultReg) then begin
if MsgBox('Counter-Strike уже установлен на Вашем компьютере.'#13#13'Вы желаете запустить Counter-Strike?', mbConfirmation, MB_YESNO) = IDYES then
if not Exec(RemoveQuotes(ResultReg) + '\hl.exe', '-game cstrike -steam -console', '', SW_SHOW, ewNoWait, ResultCode) then begin
MsgBox('Ошибка', mbError, MB_OK);
Exit;
end;
end else Result := true;
[/more] все равно ересь получается - если тебе удастся запустить игру (т.е. не будет ошибки), то инсталляция продолжится
3. можно написать [more=так] Result := false;
if RegQueryStringValue(HKEY_LOCAL_MACHINE, 'SOFTWARE\Valve\Half-Life\cstrike', 'InstallPath', ResultReg) then begin
if MsgBox('Counter-Strike уже установлен на Вашем компьютере.'#13#13'Вы желаете запустить Counter-Strike?', mbConfirmation, MB_YESNO) = IDYES then
if not Exec(RemoveQuotes(ResultReg) + '\hl.exe', '-game cstrike -steam -console', '', SW_SHOW, ewNoWait, ResultCode) then MsgBox('Ошибка', mbError, MB_OK);
Exit;
end else Result := true;[/more] тогда установка прекратится независимо от того, запустилась игра или нет (вылезло сообщение об ошибке). но это все равно фигня, т.к. если пользователь скажет, что не хочет запускать установленную ранее игру, то установка опять таки продолжится
4. Если у тебя по нескольким признакам прерывается установка, то можно завести несколько переменных Flag1, Flag2 ... : boolean и работать не с Result, а с этими флагами, а в конце Result:=Flag1 and Flag2 and ...

конкретизируй задачу, я не очень понимаю, что ты хочешь сделать
Автор: Forslay
Дата сообщения: 14.04.2008 15:37
htuos Ну например если игра установлена, то что бы пользователь не смог установить её, а просто выдавалось сообщение играть или не играть...., вот чего я хочу... Тоесть пользователь не должен иметь возможности установить игру два раза, предварительно её не удалив...

Добавлено:
Боже мой, веть всё работает !


Код: begin
Result := false;
if RegQueryStringValue(HKEY_LOCAL_MACHINE, 'SOFTWARE\Valve\Half-Life\cstrike', 'InstallPath', ResultReg) then begin
if MsgBox('Counter-Strike уже установлен на Вашем компьютере.'#13#13'Вы желаете запустить Counter-Strike?', mbConfirmation, MB_YESNO) = IDYES then
if not Exec(RemoveQuotes(ResultReg) + '\hl.exe', '-game cstrike -steam -console', '', SW_SHOW, ewNoWait, ResultCode) then MsgBox('Ошибка', mbError, MB_OK);
Exit;
end else Result := true;
Автор: Single Feniks
Дата сообщения: 14.04.2008 16:49
Вот еще вопрос! (Мне оно не меншает... другу надо) - как вообще убрать сообщение при клике на кнопку отмена (Закрыть)? чтобы сразу вырубался установочник! =)
Автор: elapse
Дата сообщения: 14.04.2008 18:30
Single Feniks

Код:
procedure CancelButtonClick(CurPageID: Integer; var Cancel, Confirm: Boolean);
begin
Confirm := False;
end;

Страницы: 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667

Предыдущая тема: Поиск в WinDjView


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