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

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

Автор: elapse
Дата сообщения: 03.03.2008 19:53
Raf_SE, опять хм, у меня там немного другой код, непонятно почему iTASmania_Inc выложил "такой" вариант. Хотя знаю. Найди строку:
if ExpandConstant('{language}') = 'Russian' then
и замени на:
if ExpandConstant('{language}') = 'ru' then
Автор: Raf_SE
Дата сообщения: 03.03.2008 19:58
elapse
Пассибо!
Автор: Vitalliano
Дата сообщения: 03.03.2008 20:22
Вот на счет своего вопроса.
Сделал такое решение проблемы, мож подскажете по лучше?

[more]
function InitializeSetup(): Boolean;
var
ResultCode: Integer;
version,StrName,FileName,MD5,ResultStr:string;
hWnd: Integer;
begin
Result:= True;
RegQueryStringValue(HKLM, 'SOFTWARE\proga, 'InstallVers', version)
if version <> '1.00'
then
if version <> '1.01'
then
if version <> '1.02'
then
if version <> '1.03'
then
if version <> '1.04'

then
begin
MsgBox('Данное обновление уже установлено или включено в более позднее, ранее установленное обновление.' #13#10 , mbInformation, mb_Ok);
Result:= False;
exit;
end;
[/more]
Автор: omals
Дата сообщения: 03.03.2008 20:33
возможно кто-то знает ответ на мой вопрос
http://forum.ru-board.com/topic.cgi?forum=5&topic=24767&start=940#9
Автор: elapse
Дата сообщения: 03.03.2008 20:45
Vitalliano, попробуйте [more=так]
function InitializeSetup(): Boolean;
var
Version: String;
begin
if not RegQueryStringValue(HKLM, 'SOFTWARE\Application', 'InstallVers', Version) then
MsgBox('Программа не установлена!', mbInformation, mb_Ok)
else
if Version > '1.04' then
MsgBox('Патч ставится на версии ниже или равные 1.04.' #13#10 'Ваша версия - ' + Version, mbInformation, mb_Ok)
else
Result := True;
end;
[/more].
Автор: argnistkroleg
Дата сообщения: 03.03.2008 21:28
elapse
Спасибо тебе огромное!
Ты гуру!
Мне сложное наложение и не требовалось (ибо устраивает и этот примитивный вариант). Понадобилось для более сильной аутентичности цветовой гаммы инсталлятора.
Дизайн еще буду пересматривать

З.Ы. А с деинсталятором такое намутить реально? (Думаю, ответ отрицательный)
Автор: elapse
Дата сообщения: 03.03.2008 21:33
omals
А почему бы не использовать вариант от Genri, то есть при деинсталляции вызывать также, как и при инсталляции?
Автор: Vitalliano
Дата сообщения: 04.03.2008 00:04
elapse

Огромное спасибо, так лучше!
Автор: elapse
Дата сообщения: 04.03.2008 01:13
Помогите, пожалуйста: как при мульти-выборе из lpstrFile[0] "вытащить" имена файлов в папке lpstrFile. [more=Сам пример]
[Код]
type
TOpenFileName = record
lStructSize: Longint;
hwndOwner: Longint;
hInstance: Longint;
lpstrFilter: PChar;
lpstrCustomFilter: PChar;
nMaxCustFilter: Longint;
nFilterIndex: Longint;
lpstrFile: PChar;
nMaxFile: Longint;
lpstrFileTitle: PChar;
nMaxFileTitle: Longint;
lpstrInitialDir: PChar;
lpstrTitle: PChar;
Flags: Longint;
nFileOffset: Word;
nFileExtension: Word;
lpstrDefExt: PChar;
lCustData: Longint;
lpfnHook: Longint;
lpTemplateName: PChar;
end;

function GetOpenFileName(var lpofn: TOpenFileName): Boolean;
external 'GetOpenFileNameA@comdlg32.dll';

procedure InitializeWizard();
var
F: TOpenFileName;
lpstrFile, lpstrFilter, lpstrTitle, lpstrInitialDir: String;

begin
F.hwndOwner := StrToInt(ExpandConstant('{wizardhwnd}'));

lpstrFile := 'config.ini';
F.lpstrFile := lpstrFile;

F.lStructSize := 76;
SetLength(lpstrFile, 512);
F.nMaxFile := Length(lpstrFile);

lpstrFilter := 'INI Files (*.ini)' + #0 + '*.ini' + #0 + 'All Files (*.*)' + #0 + '*.*' + #0;
F.lpstrFilter := lpstrFilter;

lpstrTitle := 'Открыть файл';
F.lpstrTitle := lpstrTitle;

lpstrInitialDir := ExpandConstant('{src}');
F.lpstrInitialDir := lpstrInitialDir;

F.Flags := $80204;

if GetOpenFileName(F) then
MsgBox('Файл выбран: '+ #13 + #13 + lpstrFile, mbInformation, mb_Ok);
end;
[/more]. Извиняюсь за кривизну постановки вопроса, но в формальных определениях я разбираюсь плохо. Заранее спасибо.
Автор: Caps Losk
Дата сообщения: 04.03.2008 01:43

Цитата:
2 Caps Losk
в хелпе см. ExtractTemporaryFile


ExtractTemporaryFile - это извлечение ФАЙЛА во временную папку....а мне надо КАТАЛОГ!
Автор: omals
Дата сообщения: 04.03.2008 09:09
2 elapse
больше спасибо
Автор: Unc1e
Дата сообщения: 04.03.2008 11:29
Caps Losk, как вариант можно создать sfx архив который распаковывать во временную папку, а оттуда уже запускать с соответствующим параметром. Хотя такой способ тебя может не устроить...
Автор: argnistkroleg
Дата сообщения: 04.03.2008 23:29
Раздирает невыносимое любопытство...
Можно ли перекрасить Window Caption в другой цвет, если да, то как?

При использовании WizardForm.BorderStyle := bsNone; получается то же самое по размеру окно со смещением всех элементов ближе к верхнему краю окна.

Я вот подумал, реально ли пририсовать полоску заданного цвета на место window caption, чтоб все надписи, естественно сместились на высоту полосы?
Бред, однако но вдруг есть таки решение
Автор: Caps Losk
Дата сообщения: 05.03.2008 04:10
Unc1e

Цитата:
как вариант можно создать sfx архив который распаковывать во временную папку, а оттуда уже запускать с соответствующим параметром. Хотя такой способ тебя может не устроить...

Не мог бы ты скинуть пример с извлечением этого архива во временную папку и последующем запуске из нее файла.ехе ??
Автор: yanget
Дата сообщения: 05.03.2008 10:47
Как сделать что бы в процессе инсталляции запускались другие инсталляции созданные как MSI?
Автор: dron0000
Дата сообщения: 05.03.2008 11:35
Подкажите можно ли в процессе инсталяции запускать bat файлы? Можно как-нибудь в эти bat файлы подставлять переменные из скрипта? Например папку которую выбрал пользователь, путь до system.
Автор: omals
Дата сообщения: 05.03.2008 11:48
2 yanget
можно
в {sys} есть msiexec.exe
для него параметры можно узнать msiexec.exe /?
Автор: yanget
Дата сообщения: 05.03.2008 12:14
omals
Спасибо все получилось.
Автор: omals
Дата сообщения: 05.03.2008 12:17
2 dron0000
да можно
запустить BAT файл можно в коде используя функции Exec или ShellExec.

ну шото такое
передаем путь к папке где происталирована прога и к system32

Params:=ExpandConstant('{app}') + ' ' + ExpandConstant('{sys}');
Exec('mybat.bat', Params, '', SW_HIDE, ewNoWait, ResultCode);

в батнике
переменные %1 и %2 будут иметь значения {app} и {sys} соответсвенно
ну типа запустил из cmd
mybat.bat "C:\Program files\My program" "C:\Windows\System32"

пример mybat.bat
echo off
echo %1
echo %2


Добавлено:
2Caps Losk
в
[Files]
Source: "MySFXarchive.exe"; DestDir: "{tmp}"; Flags: dontcopy;

а в
[Code]
...
ExtractTemporaryFile('MySFXarchive.exe');
Params:='-s'; //silent mode
Exec(ExpandConstant('{tmp}\MySFXarchive.exe'), Params, '', SW_HIDE, ewNoWait, ResultCode);
...

приблизительно так


Автор: Diawer
Дата сообщения: 05.03.2008 13:27
elapse

Так внимание лучше обращают, код ещё не пробовал,
дома попробую, визуально вроде нормально, спасибо.
Автор: htuos
Дата сообщения: 06.03.2008 11:24
argnistkroleg

Цитата:
Я вот подумал, реально ли пририсовать полоску заданного цвета на место window caption, чтоб все надписи, естественно сместились на высоту полосы?
Бред, однако но вдруг есть таки решение

а в чем проблема-то?
[more][Коде]
var
CaptionPanel:Tpanel;

procedure InitializeWizard;
begin
CaptionPanel:=TPanel.Create(WizardForm);
with CaptionPanel do begin
Parent:=WizardForm;
Height:=25;
Align:=alTop;
ParentColor:=False;
Color:=$403030;
BevelInner:=bvNone;
BevelOuter:=bvNone;
end;
with TLabel.Create(WizardForm) do begin
Parent:=CaptionPanel;
Top:=5;
Left:=5;
Font.Color:=clWhite;
Font.Style:=[fsBold];
Caption:=WizardForm.Caption;
end;
with WizardForm do begin
BorderStyle:=bsNone;
Width:=Width+5;
OuterNotebook.Left:=OuterNotebook.Left+5;
Bevel.Visible:=False;
Color:=$404040;
OuterNotebook.Top:=OuterNotebook.Top+CaptionPanel.Height;
CancelButton.Top:=CancelButton.Top+CaptionPanel.Height;
NextButton.Top:=NextButton.Top+CaptionPanel.Height;
BackButton.Top:=BackButton.Top+CaptionPanel.Height;
end;
end;[/more]
кнопки "закрыть","свернуть" дорисовать не сложно
ну и иконку в новый caption можно запихать
Автор: The_Club
Дата сообщения: 06.03.2008 13:11
Помогите, пожалуйста, сделать такое сообщение.

Если на жёстком нету 3190 MB, то появляется такое сообщение.
Спасибо.
Автор: elapse
Дата сообщения: 06.03.2008 16:09
htuos, очень интересует:

Цитата:
"свернуть" дорисовать не сложно

Дорисовать, конечно, без проблем - а как можно заставить форму сворачиваться в панель задач?
Приведите, пожалуйста, пример, если не сложно. Очень актуально для меня.
Автор: htuos
Дата сообщения: 06.03.2008 21:18
elapse

Цитата:
Дорисовать, конечно, без проблем - а как можно заставить форму сворачиваться в панель задач?
Приведите, пожалуйста, пример, если не сложно. Очень актуально для меня.

разве это очень сложно?
вот дописал в предыдущий пример кнопки "закрыть" и "свернуть"
[more]
[Коде]
var
CaptionPanel:Tpanel;
MinimizeBtn,CloseBtn:TButton;

const
d=6;

procedure MinimizeBtnClick(Sender:TObject);
begin
SendMessage(WizardForm.Handle,$0112,61472,0);
end;

procedure CloseBtnClick(Sender:TObject);
begin
//SendMessage(WizardForm.Handle,$0112,61536,0);
WizardForm.Close;
end;

procedure InitializeWizard;
begin
CaptionPanel:=TPanel.Create(WizardForm);
with CaptionPanel do begin
Parent:=WizardForm;
Height:=30;
Align:=alTop;
ParentColor:=False;
Color:=$800000;
BevelInner:=bvNone;
BevelOuter:=bvNone;
end;
with TLabel.Create(CaptionPanel) do begin
Parent:=CaptionPanel;
Top:=CaptionPanel.Height div 2-Height div 2;
Left:=d;
Font.Color:=clWhite;
Font.Style:=[fsBold];
Caption:=WizardForm.Caption;
end;
CloseBtn:=TButton.Create(CaptionPanel);
with CloseBtn do begin
Parent:=CaptionPanel;
Height:=22;
Width:=23;
Top:=CaptionPanel.Height div 2-Height div 2;
Left:=CaptionPanel.Width-Width div 2-d;
Caption:='X';
OnClick:=@CloseBtnClick;
end;
MinimizeBtn:=TButton.Create(CaptionPanel);
with MinimizeBtn do begin
Parent:=CaptionPanel;
Height:=22;
Width:=23;
Top:=CaptionPanel.Height div 2-Height div 2;
Left:=CaptionPanel.Width-Width div 2-CloseBtn.Width-2-d;
Caption:='_';
OnClick:=@MinimizeBtnClick;
end;
with WizardForm do begin
BorderStyle:=bsNone;
Width:=Width+d;
OuterNotebook.Left:=OuterNotebook.Left+d;
Bevel.Visible:=False;
Color:=$404040;
OuterNotebook.Top:=OuterNotebook.Top+CaptionPanel.Height;
CancelButton.Top:=CancelButton.Top+CaptionPanel.Height;
NextButton.Top:=NextButton.Top+CaptionPanel.Height;
BackButton.Top:=BackButton.Top+CaptionPanel.Height;
end;
end;
[/more]
Вобщем-то действие в одну строчку
ну а bmp-шку сверху натянуть вроде все уже умеют (по крайней мере примеры здесь уже были)
Автор: elapse
Дата сообщения: 06.03.2008 21:26
htuos, угу, спасибо. Чувствую себя идиотом.
Автор: htuos
Дата сообщения: 06.03.2008 21:35

Цитата:
htuos, угу, спасибо. Чувствую себя идиотом.

а че так кисло? все чему-то учатся всю жизнь, либо мысля нужная вовремя не приходит

вот и я сейчас сижу и думаю, почему вот так пришлось писать?

with CloseBtn do begin
. . .
Left:=CaptionPanel.Width-Width div 2-d;
. . .
end;

по идее правильно должно быть так
Left:=CaptionPanel.Width-Width-d;

вот это я вообще не понял
Автор: elapse
Дата сообщения: 06.03.2008 22:11
htuos,

Код: Left := CaptionPanel.Width - Width + d;
Автор: htuos
Дата сообщения: 06.03.2008 22:37

Цитата:
Код:
Left := CaptionPanel.Width - Width + d;

Разве так не правильнее?

так тоже работает, но не пойму почему
если написать
Left := CaptionPanel.Width - Width;
то кнопка по идее должна прилепиться к правому краю панели без "отступа", но этого почему-то не происходит. и не пойму я где собака порылась
Автор: elapse
Дата сообщения: 06.03.2008 22:46
htuos, думаю, лучше [more=так]
const
d = 6;
var
CaptionPanel: TPanel;
CloseBtn: TButton;

procedure CloseBtnClick(Sender:TObject);
begin
WizardForm.Close;
end;

procedure InitializeWizard;
begin
CaptionPanel := TPanel.Create(WizardForm);
with CaptionPanel do begin
Parent := WizardForm;
Height := 30;
ParentColor := False;
Color := $800000;
BevelInner := bvNone;
BevelOuter := bvNone;
end;

with TLabel.Create(CaptionPanel) do begin
Parent:=CaptionPanel;
Top:=CaptionPanel.Height div 2-Height div 2;
Left:=d;
Font.Color:=clWhite;
Font.Style:=[fsBold];
Caption:=WizardForm.Caption;
end;

with WizardForm do begin
BorderStyle := bsNone;
OuterNotebook.Left := OuterNotebook.Left + d;
Width := Width + d;
Bevel.Visible := False;
Color := $404040;
OuterNotebook.Top := OuterNotebook.Top+CaptionPanel.Height;
CancelButton.Top := CancelButton.Top+CaptionPanel.Height;
NextButton.Top := NextButton.Top+CaptionPanel.Height;
BackButton.Top := BackButton.Top+CaptionPanel.Height;
CaptionPanel.Width := Width;
end;

CloseBtn := TButton.Create(CaptionPanel);
with CloseBtn do begin
Parent := CaptionPanel;
Height := 22;
Width := 23;
Top := (CaptionPanel.Height - Height) / 2;
Left := CaptionPanel.Width - Width;
Caption := 'X';
OnClick := @CloseBtnClick;
end;

end;
[/more] сделать. Тогда Left := CaptionPanel.Width - Width; ведёт себя хорошо.


Добавлено:
P.S.: а где константы к SendMessage можно поглядеть? Что-то плохо ищутся. Ни в Гугле, на у мелкомягких не увидел.
Автор: htuos
Дата сообщения: 06.03.2008 23:48
торможу я что-то сильно
надо было сначала менять размер формы, а потом уже координаты остальным компонентам задавать, да и d не методом тыка подбирать
[more]
[Коде]
var
CaptionPanel:Tpanel;
MinimizeBtn,CloseBtn:TButton;

procedure MinimizeBtnClick(Sender:TObject);
begin
SendMessage(WizardForm.Handle,$0112,61472,0);
end;

procedure CloseBtnClick(Sender:TObject);
begin
WizardForm.Close;
end;

procedure InitializeWizard;
var
d:integer;
begin
d:=WizardForm.Width-WizardForm.ClientWidth;
with WizardForm do begin
BorderStyle:=bsNone;
Width:=Width+d;
OuterNotebook.Left:=OuterNotebook.Left+d;
Bevel.Visible:=False;
Color:=$404040;
end;
CaptionPanel:=TPanel.Create(WizardForm);
with CaptionPanel do begin
Parent:=WizardForm;
Height:=34;
Width:=WizardForm.Width;
Align:=alTop;
ParentColor:=False;
Color:=$800000;
BevelInner:=bvNone;
BevelOuter:=bvNone;
end;
with TLabel.Create(CaptionPanel) do begin
Parent:=CaptionPanel;
Top:=(CaptionPanel.Height-Height) div 2;
Left:=d;
Font.Color:=clWhite;
Font.Style:=[fsBold];
Caption:=WizardForm.Caption;
end;
CloseBtn:=TButton.Create(CaptionPanel);
with CloseBtn do begin
Parent:=CaptionPanel;
Height:=22;
Width:=23;
Top:=(CaptionPanel.Height-Height) div 2;
Left:=CaptionPanel.Width-Width-d;
Caption:='X';
OnClick:=@CloseBtnClick;
end;
MinimizeBtn:=TButton.Create(CaptionPanel);
with MinimizeBtn do begin
Parent:=CaptionPanel;
Height:=22;
Width:=23;
Top:=(CaptionPanel.Height-Height) div 2;
Left:=CaptionPanel.Width-Width-CloseBtn.Width-d-2;
Caption:='_';
OnClick:=@MinimizeBtnClick;
end;
with WizardForm do begin
OuterNotebook.Top:=OuterNotebook.Top+CaptionPanel.Height;
CancelButton.Top:=CancelButton.Top+CaptionPanel.Height;
NextButton.Top:=NextButton.Top+CaptionPanel.Height;
BackButton.Top:=BackButton.Top+CaptionPanel.Height;
end;
end;
[/more]

ЗЫ долго страницу не обновлял ты уже ответил

Добавлено:

Цитата:
P.S.: а где константы к SendMessage можно поглядеть? Что-то плохо ищутся. Ни в Гугле, на у мелкомягких не увидел.

тебе Microsoft WIN32 SDK нужен
или здесь ищи http://msdn2.microsoft.com/ru-ru/default.aspx

Страницы: 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667

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


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