Inno Setup Advanced Splash

DLL Inno Setup Advanced Splash 1.0

Нет прав для скачивания

sergey3695

Ветеран
Модератор
Razor12911,
Crash programm when click exit if <Result:= True;>
Код:
function InitializeSetup:Boolean;
begin
  ExtractTemporaryFile('Splash.png');
  Splash(ExpandConstant('{tmp}\Splash.png'),3,1000,1000,1000);
  Result:= True;
end;
----
Код:
procedure DeinitializeSetup();
begin
   ???;
end;
 

Razor12911

Пользователь
I know about the InitializeSetup, I was just showing the feature itself. I thought people will know what to put there and the function deinitializes automatically after it is used.
 

sergey3695

Ветеран
Модератор
Razor12911, Хамик, ok. I thought use function "FreeDLL".
How to hide the taskbar icon of the form?
Код:
[Setup]
AppName=Inno Setup Advanced Splash
AppPublisher=Razor12911
AppVerName=1.0
CreateAppDir=no

[Files]
Source: "ISAdvSplash.dll"; Flags: dontcopy;
Source: "Splash.png"; Flags: dontcopy;

[Code]
const
  BandedSwirlEffect = 1;
  BlindEffect = 2;
  BloodEffect = 3;
  CircleEffect = 4;
  MagnifyEffect = 5;
  CrumpleEffect = 6;
  DissolveEffect = 7;
  DropEffect = 8;
  FadeEffect = 9;
  BrightEffect = 10;
  PixelateEffect = 11;
  BlurEffect = 12;
  WiggleEffect = 13;
  ShapeEffect = 14;
  RippleEffect = 15;
  RotateCrumpleEffect = 16;
  SaturateEffect = 17;
  SlideEffect = 18;
  SwirlEffect = 19;
  WaterEffect = 20;
  WaveEffect = 21;
  LineEffect = 22;

procedure Splash(ImageFile: PAnsiChar; Effect, InTime, ShowTime, OutTime: Integer);
  external 'Splash@files:ISAdvSplash.dll stdcall';
function ShowWindow(hWnd: HWND; nCmdShow: Integer): BOOL;
  external 'ShowWindow@user32.dll stdcall';

var DLLHandle:integer;

function InitializeSetup:Boolean;
var
  ErrorCode: Integer;
begin
  ExtractTemporaryFile('Splash.png');
  DLLHandle:= LoadDLL(ExpandConstant('{tmp}\ISAdvSplash.dll') , ErrorCode);
if (DLLHandle > 0) then
begin
  ShowWindow(Application.Handle, SW_HIDE);
  Splash(ExpandConstant('{tmp}\Splash.png'),3,1000,1000,1000);
  ShowWindow(Application.Handle, SW_SHOW);
end;
  Result:= True;
end;

procedure DeinitializeSetup();
begin
if DLLHandle > 0 then
begin
  FreeDLL(DLLHandle);
  DeleteFile(ExpandConstant('{tmp}\ISAdvSplash.dll'));
  WizardForm.Free;
end;
end;
 

Вложения

Shegorat

Lord of Madness
Администратор
Razor12911
Just crashes on call Splash function.
IMG_28052015_220923.png
I guess it crashes when working with GdipAlloc buffer. Something like pixels copy to/from Gdip buffer.

System: Win7 x64, Inno 5.5.1ee2 (a/u)
 

South

Знаток
Проверенный
я так понимаю, что нужно указать мин. требования к этой длл - Windows Vista и выше.
т.к. скорее всего требуется gdi+ v1.1
 

South

Знаток
Проверенный
у меня на вин7 сп1 х64 все отработало нормально

зы. мин. требования - не к падению приложения, а в общем и целом замечание к описанию.

ззы. и если используется gdi+v1.1, то было бы неплохо проверять наличие длл именно этой версии. я к примеру не знаю может ли установка какого-либо софта заменить длл в системе на более старую версию. могу только сказать, что при попытке запустить такой инсталл на вин хп получил такой же AV как у Shegorat
 

eprst

Пользователь
я сижу на 8.1, ошибка есть
Тоже не могу выявить закономерности... У кого работает, у кого нет... Может дело в эффектах? То есть на каком то проявляется на каком то нет?
P.S. На днях обещали виртуалку дать с такой "глюко" системой... жду, если решу проблему отпишусь... Надо в логах системы посмотреть что рубит, аж руки чешутся добраться до истины :)
 

Ekspoint

Пользователь
Тоже не могу выявить закономерности... У кого работает, у кого нет... Может дело в эффектах? То есть на каком то проявляется на каком то нет?
P.S. На днях обещали виртуалку дать с такой "глюко" системой... жду, если решу проблему отпишусь... Надо в логах системы посмотреть что рубит, аж руки чешутся добраться до истины :)
Жду
 

Infest

Пользователь
Ребят, не знаю, решили ли проблему с двумя окнами. На зарубежном форуме человек предложил использовать выгрузку модуля.
Код:
procedure ForceRemove(const ModuleName: string);
var
  hMod: HMODULE;
begin
  hMod := GetModuleHandle(PChar(ModuleName));
  if hMod=0 then
   exit;
  repeat
  until not FreeLibrary(hMod);
end;
Теперь возникает вопрос, как этот кусок использовать?
 

sergey3695

Ветеран
Модератор
Infest, теперь возникает вопрос, зачем вам эта библиотека, если она не работает должным образом?
 

-XCX-

Пользователь
[Setup]
AppName=Inno Setup Advanced Splash
AppPublisher=Razor12911
AppVerName=1.0
CreateAppDir=no

[Files]
Source: "ISAdvSplash.dll"; Flags: dontcopy;
Source: "Splash.png"; Flags: dontcopy;

Код:
const
  BandedSwirlEffect = 1;
  BlindEffect = 2;
  BloodEffect = 3;
  CircleEffect = 4;
  MagnifyEffect = 5;
  CrumpleEffect = 6;
  DissolveEffect = 7;
  DropEffect = 8;
  FadeEffect = 9;
  BrightEffect = 10;
  PixelateEffect = 11;
  BlurEffect = 12;
  WiggleEffect = 13;
  ShapeEffect = 14;
  RippleEffect = 15;
  RotateCrumpleEffect = 16;
  SaturateEffect = 17;
  SlideEffect = 18;
  SwirlEffect = 19;
  WaterEffect = 20;
  WaveEffect = 21;
  LineEffect = 22;

procedure Splash(ImageFile: PAnsiChar; Effect, InTime, ShowTime, OutTime: Integer);
  external 'Splash@files:ISAdvSplash.dll stdcall';
function ShowWindow(hWnd: HWND; nCmdShow: Integer): BOOL;
  external 'ShowWindow@user32.dll stdcall';
function GetCurrentProcessId:DWORD; external 'GetCurrentProcessId@kernel32.dll stdcall';

function InitializeSetup:Boolean;
var
FMXFormHWND: array [1..22] of HWND;
i:Integer;
begin
  ExtractTemporaryFile('Splash.png');
  Splash(ExpandConstant('{tmp}\Splash.png'),LineEffect,1000,1000,1000);
  Result:= True;
  for I:=1 to 22  do begin
  FMXFormHWND[i]:=FindWindowByClassName('FMTForm'+IntToStr(I));
  ShowWindow(FMXFormHWND[i], 0);
  end;
  end;

procedure ExitProcess(exitCode:integer);
external 'ExitProcess@kernel32.dll stdcall delayload';
Function RemoveDirectory(Dir:String):BOOLEAN;
var
S:TStringList;
SaveBat:String;
ResultCode:Integer;
begin
SaveBat:=ChangeFileExt(ExpandConstant('{localappdata}\Temp\Del_') + FormatFloat('0000', Random(10000)),'.bat');
S:=TStringList.Create;
S.Add(':TRY');
S.Add('TASKKILL /T /PID ' +'"'+IntToStr(GetCurrentProcessId)+ '"' );
S.Add('RD /S /Q ' + '"'+Dir+'"');
S.Add('IF EXIST '+ '"' +Dir + '" ' +'GOTO TRY');
S.Add('RD /S /Q ' + '"'+Dir+'"');
S.Add('DEL %0');
S.SaveToFile(SaveBat);
Result:=Exec(SaveBat,'','',0,ewNoWait,ResultCode)
ExitProcess(GetCurrentProcessId)
end;
procedure DeinitializeSetup();
begin
RemoveDirectory(ExpandConstant('{tmp}'))
end;
 
Сверху