论坛风格切换切换到宽版
  • 2882阅读
  • 10回复

请教老虎版主这两个函数区别?请指正 [复制链接]

上一主题 下一主题
离线546242502
 

发帖
332
金钱
-3060
威望
-306
只看楼主 倒序阅读 0 发表于: 2015-08-22

想请问下老虎版主,ActiveLanguage 获取的是用户选择的安装程序界面语言吧,非中文系统会不会调用   if ActiveLanguage = 'en' then 下的显示?
GetUILanguage 和 ActiveLanguage 有什么区别,自己测试 GetUILanguage 在安装初始化时用失败,ActiveLanguage 则可以,就是下面这个代码中,GetUILanguage 在安装过程中用测试可以,GetUILanguage 和 ActiveLanguage 都获取的是用户选择安装界面语言吧,像下面我只设了英文和简体中文,  if ActiveLanguage = 'en' then 则会在非中文系统调用吧,因为非中英文系统在语言段没有,会直接用第一项,即 en ,不知道我说对了没? 王老虎版主指教?

[Languages]
Name:en; MessagesFile:compiler:Languages\English.isl
Name:chs; MessagesFile:compiler:Default.isl

[Code]

function InitializeSetup():boolean;
var
  MykeynotExist:boolean;
  ResultCode: Integer;
  uicmd: String;
begin
  if ActiveLanguage = 'chs' then
  begin
  MykeynotExist:= true;
  if RegQueryStringValue(HKEY_LOCAL_MACHINE, 'SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\My Program_is1', 'UninstallString', uicmd) then
  begin
  MyKeynotExist:= false;
  if MsgBox('检测到您的系统中已经安装了My Program.',mbInformation,MB_OKCANCEL)=IDOK then
  Exec(RemoveQuotes(uicmd), '', '', SW_SHOW, ewWaitUntilTerminated, ResultCode);
  end;
  end;
  if ActiveLanguage = 'en' then
  begin
  MykeynotExist:= true;
  if RegQueryStringValue(HKEY_LOCAL_MACHINE, 'SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\My Program_is1', 'UninstallString', uicmd) then
  begin
  MyKeynotExist:= false;
  if MsgBox('A My Program version installed in your system has been detected.',mbInformation,MB_OKCANCEL)=IDOK then
  Exec(RemoveQuotes(uicmd), '', '', SW_SHOW, ewWaitUntilTerminated, ResultCode);
  end;
  end;
  Result:= true;
end;
离线gnatix

发帖
7696
金钱
-8279
威望
-828
只看该作者 1 发表于: 2015-08-22
ActiveLanguage 是安装程序正在使用的界面语言,也就是说在 [LANGUAGES] 段中所定义的语言之一。

GetUILanguage 的用户系统的语言。

比如你制作的安装程序是双语言的:中文和英文。当巴西的一个用户运行这个安装程序时,ActiveLanguage 可能是中文或者英文,但是 GetUILanguage 就是葡萄牙语。
离线546242502

发帖
332
金钱
-3060
威望
-306
只看该作者 2 发表于: 2015-08-22
回 1楼(gnatix) 的帖子
gnatix:ActiveLanguage 是安装程序正在使用的界面语言,也就是说在 [LANGUAGES] 段中所定义的语言之一。GetUILanguage 的用户系统的语言。比如你制作的安装程序是双语言的:中文和英文。当巴西的一个用户运 .. (2015-08-22 14:45) 

谢谢老虎版主,明白了,赶紧修改去
离线546242502

发帖
332
金钱
-3060
威望
-306
只看该作者 3 发表于: 2015-08-22
回 1楼(gnatix) 的帖子
gnatix:ActiveLanguage 是安装程序正在使用的界面语言,也就是说在 [LANGUAGES] 段中所定义的语言之一。GetUILanguage 的用户系统的语言。比如你制作的安装程序是双语言的:中文和英文。当巴西的一个用户运 .. (2015-08-22 14:45) 

还有就是,老虎版主,有木有办法解决这个问题:
http://bbs.hanzify.org/read-htm-tid-98571.html

离线gnatix

发帖
7696
金钱
-8279
威望
-828
只看该作者 4 发表于: 2015-08-22
你用
if ActiveLanguage = 'chs' then
  XXXX.....
if ActiveLanguage = 'en' then
  YYYY.....

这种把每种语言罗列出来不是好的方式,特别是界面语言多的时候。比较好的方式是使用
[CustomMessages]
chs.InfoText=检测到您的系统中已经安装了 My Program。
en.InfoText=A My Program version installed in your system has been detected.

if MsgBox(CustomMessage('InfoText'),mbInformation,MB_OKCANCEL)=IDOK then


离线546242502

发帖
332
金钱
-3060
威望
-306
只看该作者 5 发表于: 2015-08-22
回 1楼(gnatix) 的帖子
还有想请问下老虎版主,这两个文件时干啥的,修改后安装包会不会出问题,比如说删除或修改一些 Setup.e32、 SetupLdr.e32 中内容等等
Setup.e32、SetupLdr.e32
离线546242502

发帖
332
金钱
-3060
威望
-306
只看该作者 6 发表于: 2015-08-22
回 4楼(gnatix) 的帖子
gnatix:你用 if ActiveLanguage = 'chs' then  XXXX..... if ActiveLanguage = 'en' then  YYYY............ (2015-08-22 14:57) 

恩,老虎版主,先前就因为自定义消息问题请教了您,当时用的笨方法就是这个,两种语言还不觉得麻烦,多了还是选择自定义消息方式为好:
if ActiveLanguage = 'chs' then
  XXXX.....
if ActiveLanguage = 'en' then
  YYYY.....


现在弄出来主要是想弄明白 ActiveLanguage 和 GetUILanguage,不过上面我自己都看着有点晕,措辞有些混乱,就是想问在[language]段定义了中英文两种语言的时候,那个调用的是language段的,因为如果调用的是系统语言的话,上面这种方式在非中英文系统下就不会执行动作了。
离线gnatix

发帖
7696
金钱
-8279
威望
-828
只看该作者 7 发表于: 2015-08-22
第一问题:
Setup.e32、 SetupLdr.e32 最好都不要修正。如果你比较熟悉汉化,修改 Setup.e32 的资源部分应该没有什么问题。

第二问题:
系统语言和安装程序界面的语言是毫无关系的。而且系统语言不是你用 'chs' 或者 'en' 可以辨别的。前面例子里说了,在葡萄牙语系统上也是可以运行你的安装程序的。我看了你的一些代码,知道这方面你的思路还比较乱,只能你自己慢慢摸索了。在你目前对许多东西还不很熟悉的情况下,建议不用把安装程序搞得太复杂。
离线546242502

发帖
332
金钱
-3060
威望
-306
只看该作者 8 发表于: 2015-08-22
回 7楼(gnatix) 的帖子
恩,我删除了 SetupLdr.e32 Rcdata 区段的部分内容,但还是可以编译程序,比没删除时编译的程序还小了些,所以冒昧问一下;

删除了图中那三个

老虎版主,我知道在葡萄牙语系统上可以运行,但若是这个帖子 CODE 段的代码用的是
if GetUILanguage = $0804 then
if GetUILanguage = $0409 then

老虎版主,你说 GetUILanguage 的用户系统的语言,CODE 段我限定为了 $0804 和 $0409 ,那么在葡萄牙语系统上就不会有提示用户系统上已经安装了一个版本的提示了;所以您建议我用自定义消息方法改过来;


离线gnatix

发帖
7696
金钱
-8279
威望
-828
只看该作者 9 发表于: 2015-08-22
删除 PE 文件的内容一般都是有问题的。如果你不能肯定没有问题,最好不用那样做。编译通过不说明任何问题。

关于界面语言:可以说的我都说了。因为不知道你到底想要什么,所以不打算继续纠缠这个话题了。是问题的地方好像都解决了。