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

Статус
В этой теме нельзя размещать новые ответы.

Mailchik

Старожил
Проверенный
Shift85, мне казалось, что комментарии автора в этом модуле написаны на русском языке..
и чем вам мешают прототипы функций то?
 

YURSHAT

Тех. админ
Администратор
Shift85
Примерно такой минимум нужен для простой отрисовки изображений посредством botva2 + b2p
 

Tixo

Новичок
искал код для вставки сплеша в инсталл, так и не смог что-то найти нормально на руборде.
думаю есть у кого-то)
 

EvilAlex

Старожил
искал код для вставки сплеша в инсталл, так и не смог что-то найти нормально на руборде.
думаю есть у кого-то)
Код:
[Setup]
AppName=Splash
AppVerName=Splash
CreateAppDir=false
DisableDirPage=true
DisableProgramGroupPage=true
UninstallDisplayName=Splash

[Files]
Source: compiler:WizModernImage.bmp; DestDir: {tmp}; DestName: Splash.bmp; Flags: dontcopy

[Code_]
procedure InitializeWizard();
var
  SplashImage: TBitmapImage;
  SplashForm: TForm;
  SplashFileName: String;
  I: Integer;

begin

  SplashFileName := ExpandConstant('{tmp}\splash.bmp');
  ExtractTemporaryFile(ExtractFileName(SplashFileName));
  SplashForm := TForm.create(nil);
  with SplashForm do
   begin
    BorderStyle := bsNone;
    Position := poScreenCenter;//poDesigned poDefault poDefaultPosOnly poDefaultSizeOnly
    ClientWidth := 405;	// Минимальный размер 320х200 !
    ClientHeight := 310;
   end;
  SplashImage := TBitmapImage.Create(SplashForm);
  with SplashImage do
    begin
    Bitmap.LoadFromFile(SplashFileName);
    Stretch := false;
    Align := alClient;
    Parent := SplashForm;
    end;

  with SplashForm do
   begin
     Show;
     for I := 1 to 1 do
      begin
       Repaint;
       Sleep(1000); // показ изображения в милисекундах
      end;
//     Close;
//     Free;
   end;
end;
 

sergey3695

Ветеран
Модератор
Shift85, если учесть что в твоем примере библа используется, а у EvilAlex стандартные функции.
Код:
[Setup]
AppName=Splash
AppVerName=Splash
CreateAppDir=false
DisableDirPage=true
DisableProgramGroupPage=true
UninstallDisplayName=Splash

[Files]
Source: WizModernImage.bmp; DestDir: {tmp}; DestName: Splash.bmp; Flags: dontcopy

[Code ]
function SetWindowLong(hWnd: HWND; nIndex: Integer; dwNewLong: Longint): Longint; external 'SetWindowLongW@user32.dll stdcall';
function GetWindowLong(hWnd: HWND; nIndex: Integer): Longint; external 'GetWindowLongW@user32.dll stdcall';
function SetLayeredWindowAttributes(hwnd: HWND; crKey: TColor; bAlpha: BYTE; dwFlags: DWORD): Boolean; external 'SetLayeredWindowAttributes@user32.dll stdcall';

var
  SplashImage: TBitmapImage;
  SplashFileName: String;
  SplashForm: TForm;
  SplashTimer1: TTimer;
  SplashTimer2: TTimer;
  b: integer;
  s: boolean;

procedure ShowForm(Sender: TObject);
begin
  b:=b+50;
  SetWindowLong(SplashForm.Handle,-20,GetWindowLong(SplashForm.Handle,-20) or $80000);
  SetLayeredWindowAttributes(SplashForm.Handle,$000008,b,1 or 2);
if b=255 then
begin
  SplashTimer1.Enabled:=false;
  Sleep(1000);
  SplashTimer2.Enabled:=True;
end;
end;

procedure HideForm(Sender: TObject);
begin
  b:=b-50;
  SetWindowLong(SplashForm.Handle,-20,GetWindowLong(SplashForm.Handle,-20) or $80000);
  SetLayeredWindowAttributes(SplashForm.Handle,$000008,b,1 or 2);
if b=5 then
begin
  SplashForm.Close;
  s:= true;
end;
end;

function Splash: boolean;
begin
  b:=55;
  SplashFileName := ExpandConstant('{tmp}\splash.bmp');
  ExtractTemporaryFile(ExtractFileName(SplashFileName));
  SplashForm := TForm.create(nil);
with SplashForm do
begin
  BorderStyle := bsNone;
  Position := poScreenCenter;
  ClientWidth := ScaleX(405);
  ClientHeight := ScaleX(310);
end;
  SplashImage := TBitmapImage.Create(SplashForm);
with SplashImage do
begin
  Bitmap.LoadFromFile(SplashFileName);
  Stretch := false;
  Align := alClient;
  Parent := SplashForm;
end;
  SplashTimer1:=TTimer.Create(nil);
with SplashTimer1 do begin
  Interval:=100;
  OnTimer:=@ShowForm;
end;
  SplashTimer2:=TTimer.Create(nil);
with SplashTimer2 do begin
  Interval:=100;
  OnTimer:=@HideForm;
  Enabled:=false;
end;
with SplashForm do
begin
  b:= 55;
  SetWindowLong(Handle,-20,GetWindowLong(Handle,-20) or $80000);
  SetLayeredWindowAttributes(Handle,$000008,b,1 or 2);
  ShowModal;
  Repaint;
end;
  Result:=s;
end;

function InitializeSetup(): Boolean;
begin
  Result:= Splash;
end;
 
Последнее редактирование:

vint56

Ветеран
Проверенный
Tixo если компилято unicode то сплеша не будет вот эту строчку замени
procedure ShowSplashScreen(p1:HWND;p2:Ansistring;p3,p4,p5,p6,p7:integer;p8:boolean;p9:Cardinal;p10:integer);
external 'ShowSplashScreen@files:isgsg.dll stdcall delayload';
 

Tixo

Новичок
пошло)
объясни в чем было дело?
в названии процедуры однотипном?
 
Последнее редактирование:

Shift85

Старожил
в названии процедуры однотипном
Ну типа да...

procedure InitializeWizard; (два раза нельзя использовать,если присутствует еще такая процедура просто переименуем)

Типа так :

Код:
procedure RunSplash();
begin
 ExtractTemporaryFile('Splash.png');
 ShowSplashScreen(WizardForm.Handle,ExpandConstant('{tmp}')+'\Splash.png',{#SplS},{#SplR},{#SplE},0,255,False,$FFFFFF,10);
end;
И подстроим под procedure InitializeWizard; так:

Код:
procedure InitializeWizard;
begin
RunSplash(); // Splash
end;
 
Последнее редактирование:
  • Like
Реакции: Tixo

legik2003

Мимокрокодил
подскажите а можно ли в инсталляторе сделать 2-а ComponentsList и что бы каждый из них работал самостоятельно
 

Mailchik

Старожил
Проверенный
Shift85, пример...
 

ilzok17

Новичок
Shift85, пример...
Тоже попробовал внедрить этот код в чистый ISDone 6 Final,так прогресс бар стал появляться на долю секунды в самом начале установки, а дальше установка идёт вообще без него и даже кнопка "Отмена"стала не активной.Пытаюсь разобраться в чём дело
 

Shift85

Старожил
Mailchik, Спасибо большое :up: а как еще проценты туда добавить...

Тоже попробовал внедрить этот код в чистый ISDone 6 Final,так прогресс бар стал появляться на долю секунды в самом начале установки, а дальше установка идёт вообще без него и даже кнопка "Отмена"стала не активной.Пытаюсь разобраться в чём дело
ilzok17, Значит неправильно внедрял...:)
 
Последнее редактирование:

Edison007

Ветеран
Модератор
Mailchik, Данный пример не будет отображать реальный процесс удаления
 

legik2003

Мимокрокодил
Подскажите пожалуйста, как сделать выбор компонентов установки через checkbox, что бы программа инсталировала те фаилы которые будут указаны флажками checkbox. (Интересует не через стандартную SelectComponentsPage а именно отдельными checkbox)
 

Mailchik

Старожил
Проверенный
legik2003, код...
 
Последнее редактирование:

Shift85

Старожил
Как на отдельный чекбокс наложить картинку bmp или только на компонент лист можно...

И еще при использовании скина как сделать,чтобы при выходе инсталл плавно закрывался без дополнительной формы аеро ( на Win7)...

Заранее спасибо...

Как обьединить функции или же их нужно по отдельности использовать...

Код:
function WrapCallback(callback:TCallback; paramcount:integer):longword;
  external 'wrapcallback@files:ISDone.dll stdcall delayload';

function WrapCallback(Callback:TProc; NumParam:integer): longword;
  external 'WrapCallback@files:isslideshow.dll stdcall';
 
Статус
В этой теме нельзя размещать новые ответы.
Сверху