论坛风格切换切换到宽版
  • 1937阅读
  • 3回复

请教老虎版主这个类型不匹配问题,该怎么修改? [复制链接]

上一主题 下一主题
离线546242502
 

发帖
332
金钱
-3060
威望
-306
只看楼主 倒序阅读 0 发表于: 2015-08-23
用户被禁言,该主题自动屏蔽!
离线gnatix

发帖
7696
金钱
-8279
威望
-828
只看该作者 1 发表于: 2015-08-24
提醒过你了,你是直接从网页上复制代码的,而代码中使用了 i 这个计数变量,现在的网页程序会“吃掉”某些代码。从前的网页程序没有这个问题,所以当时在提供代码时也就没有考虑这个问题了。现在在网页上发代码,一般都会避免使用 i 这个变量。看到用斜体字体显示的网页内容,通常说明代码被吃掉的情况。这种情况下,你不要盲目使用复制的代码,先要把代码进行复原。
离线gnatix

发帖
7696
金钱
-8279
威望
-828
只看该作者 2 发表于: 2015-08-24
正确的代码如下,随便还给你一个示例。


[Setup]
AppName=My Program
AppVerName=My Program version 1.5
DefaultDirName={pf}\My Program
DefaultGroupName=My Program

[code]
procedure DecodeVersion(verstr: String; var verint: array of Integer);
var
  n,p: Integer; s: string;
begin
  verint := [0,0,0,0];
  n := 0;
  while ( (Length(verstr) > 0) and (n < 4) ) do
  begin
    p := pos('.', verstr);
    if p > 0 then
    begin
      if p = 1 then s:= '0' else s:= Copy( verstr, 1, p - 1 );
      verint[n] := StrToInt(s);
      n := n + 1;
      verstr := Copy( verstr, p+1, Length(verstr));
    end
    else
    begin
      verint[n] := StrToInt( verstr );
      verstr := '';
    end;
  end;
end;

function CompareVersion(ver1, ver2: String) : Integer;
var
  verint1, verint2: array of Integer;
  n: integer;
begin
  SetArrayLength( verint1, 4 );
  DecodeVersion( ver1, verint1 );
  SetArrayLength( verint2, 4 );
  DecodeVersion( ver2, verint2 );
  Result := 0;
  n := 0;
  while ( (Result = 0) and ( n < 4 ) ) do
  begin
    if verint1[n] > verint2[n] then
      Result := 1
    else
      if verint1[n] < verint2[n] then
        Result := -1
      else
        Result := 0;
    n := n + 1;
  end;
end;

function InitializeSetup(): boolean;
var
  oldVersion: string;
begin
  if Not RegValueExists(HKLM, 'Software\Microsoft\DirectX', 'Version') then
    begin
      MsgBox('安装程序检测到您的系统内没有安装 ActiveX。安装无法继续。', mbInformation, MB_OK);
      Exit;
    end;
  if RegQueryStringValue(HKLM, 'Software\Microsoft\DirectX', 'Version', oldVersion) then
    if CompareVersion(oldVersion, '5.0.0.0') >= 0 then
      begin
      MsgBox('安装程序检测到您的 ActiveX 版本为 ' + oldVersion + ',满足要求。安装可以继续。', mbInformation, MB_OK);
      result := true;
      end
    else
      begin
      MsgBox('安装程序检测到您的 ActiveX 版本为 ' + oldVersion + ',不满足要求。安装无法继续。', mbInformation, MB_OK);
      result := false;
      end;
end;
离线546242502

发帖
332
金钱
-3060
威望
-306
只看该作者 3 发表于: 2015-08-24
用户被禁言,该主题自动屏蔽!