论坛风格切换切换到宽版
  • 2871阅读
  • 2回复

检查卸载旧版本与水波特效不能共存的问题 [复制链接]

上一主题 下一主题
离线axlswd
 

发帖
95
金钱
910
威望
91
只看楼主 倒序阅读 0 发表于: 2013-11-06

说明一下:第二次安装(第一次不卸载) 在检查时 点击 否 会出错:
procedure DeinitializeSetup();
begin
  disablewater();
  bmp.Free;//这里出错了
end;
由于自己不会写判断,所以特来请教高手!!代码如下:
检查卸载旧版本与水波特效不能共存的问题.rar (31 K) 下载次数:1


[Setup]
AppId=1234
AppName=我的程序
AppVerName=我的程序 版本 1.5
DefaultDirName={pf}\我的程序
DefaultGroupName=我的程序
UninstallDisplayIcon={app}\MyProg.exe
Compression=lzma


[Files]
Source: "waterctrl.dll"; Flags: dontcopy
Source: "WizModernImage-Is.bmp"; Flags: dontcopy


[code]

function enablewater(ParentWnd: HWND; Left, Top: integer; Bmp: HBITMAP;
     WaterRadius, WaterHeight: integer): BOOL; external 'enablewater@files:waterctrl.dll stdcall';
//ParentWnd     放置特效窗口的父窗口句柄。
//Left          左位置
//Top           上位置
//Bmp           位图句柄。
//WaterRadius   水纹半径,会令到水纹看起来范围更广。
//WaterHeight   水纹高度,会令到水纹看起来更深。
//注意,水纹插件自动根据图片来设定高度和宽度,
//另外水纹底图必须是翻转的图片,显示的时候会翻转图片来显示。

function waterblob(x, y: integer; radius, height: integer): BOOL; external 'waterblob@files:waterctrl.dll stdcall';
// 在 x,y 点产生半径为radius, 高度为height 的水纹。

function flattenwater(): BOOL; external 'flattenwater@files:waterctrl.dll stdcall';
// 平伏所有水纹。

function disablewater(): BOOL; external 'disablewater@files:waterctrl.dll stdcall';
//释放水纹插件

function setwaterparent(ParentWnd: HWND): BOOL; external 'setwaterparent@files:waterctrl.dll stdcall';
//v2 新增,设置水纹插件的父句柄

var
  bmp: TBitmap;

procedure InitializeWizard();
begin
  ExtractTemporaryFile('WizModernImage-Is.bmp');
  bmp := TBitmap.create;
  bmp.LoadFromFile(ExpandConstant('{tmp}\WizModernImage-Is.bmp'));

  enablewater(WizardForm.WelcomePage.Handle, 0, 0, bmp.Handle, 3, 50);
end;

function InitializeSetup: Boolean;
var
ResultStr: String;
ResultCode: Integer;
begin
    if RegQueryStringValue(HKLM, 'SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\1234_is1', 'UninstallString', ResultStr) then
    begin
    if msgbox('检测到旧版本,点击"确定"将自动卸载旧版本,点击"取消"退出安装',mbInformation,MB_OKCANCEL)=idok then
      begin
      ResultStr := RemoveQuotes(ResultStr);
      Exec(ResultStr, '/VERYSILENT', '', SW_SHOWNORMAL, ewWaitUntilTerminated, ResultCode);
      Result := true;
      end else
      begin
      Result := False;
      end
    end else
    begin
    Result := true;
    end
end;

procedure CurPageChanged(CurPageID: Integer);
begin
  if CurPageID = wpWelcome then
  begin
    setwaterparent(WizardForm.WelcomePage.Handle);
    waterblob(70, 198, 10, 1000);
  end else
  if CurPageID = wpFinished then
  begin
    setwaterparent(WizardForm.FinishedPage.Handle);
    waterblob(70, 198, 10, 1000);
  end else
    flattenwater();
end;

procedure DeinitializeSetup();
begin
  disablewater();
  bmp.Free;
end;
本帖提到的人: @gnatix @qiuquan @z454892031
离线gnatix

发帖
7696
金钱
-8279
威望
-828
只看该作者 1 发表于: 2013-11-06
最简单的方法是这样调整一下。

procedure InitializeWizard();
begin
  // ExtractTemporaryFile('WizModernImage-Is.bmp');
  // bmp := TBitmap.create;
  // bmp.LoadFromFile(ExpandConstant('{tmp}\WizModernImage-Is.bmp'));

  enablewater(WizardForm.WelcomePage.Handle, 0, 0, bmp.Handle, 3, 50);
end;

function InitializeSetup: Boolean;
var
ResultStr: String;
ResultCode: Integer;
begin
    ExtractTemporaryFile('WizModernImage-Is.bmp');
    bmp := TBitmap.create;
    bmp.LoadFromFile(ExpandConstant('{tmp}\WizModernImage-Is.bmp'));

    if RegQueryStringValue(HKLM, 'SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\1234_is1', 'UninstallString', ResultStr) then
    begin
    if msgbox('检测到旧版本,点击"确定"将自动卸载旧版本,点击"取消"退出安装',mbInformation,MB_OKCANCEL)=idok then
      begin
      ResultStr := RemoveQuotes(ResultStr);
      Exec(ResultStr, '/VERYSILENT', '', SW_SHOWNORMAL, ewWaitUntilTerminated, ResultCode);
      Result := true;
      end else
      begin
      Result := False;
      end
    end else
    begin
    Result := true;
    end
end;
离线axlswd

发帖
95
金钱
910
威望
91
只看该作者 2 发表于: 2013-11-06
回 1楼(gnatix) 的帖子
gnatix:最简单的方法是这样调整一下。procedure InitializeWizard();begin  // ExtractTemporaryFile('WizModernImage-Is.bmp');....... (2013-11-06 04:36) 

原来在安装程序初始化时调用就行,看来我想复杂了,呵呵!谢谢虎版!!