2017-05-26 8 views
0

をマークとしてキリル文字列が現れる:今Inno Setupの質問は、私はこのコードを実行している

function CmdLineParamExists(const Value: string): Boolean; 
var 
    I: Integer; 
begin 
    Result := False; 
    for I := 1 to ParamCount do 
    begin 
    if CompareText(Copy(ParamStr(I), 1, Length(Value)), Value) = 0 then 
    begin 
     Result := True; 
     Exit; 
    end; 
    end; 
end; 

function GetAppName(Value: string): string; 
begin 
    if CmdLineParamExists('/COMPONENTS=prog2') then 
    begin 
    Result := 'Программа 2'; //<----This shows up as ????????? 2 
    end 
    else 
    begin 
    Result := '{#SetupSetting("AppName")}'; 
    end; 
end; 

procedure CurPageChanged(CurPageID: Integer); 
var 
    S: string; 
Begin 
if CurPageID = wpSelectDir then 
    begin 
    S := SetupMessage(msgSelectDirLabel3); 
    StringChange(S, '[name]', GetAppName('')); 
    WizardForm.SelectDirLabel.Caption := S; 
    end; 
end; 

を、私は私がここで間違ってやっているかわからないんだけど。 GetAppNameの結果を使用する場合を除いて、他の文字列がすべて正しく表示されます。ある時点で何かをAnsiStringに変換する必要がありますか?

答えて

2

私はあなたがInno SetupのAnsiバージョンを使用していると仮定しています。 Unicodeバージョンでは、Unicode文字列リテラルはサポートされていないためです。

Ansiバージョンでは、原因はおそらくStringChangeで、Ansi以外の文字セットではうまくいきません。 StringChangeExを試してみてください。


とにかくUnicodeバージョンのInno Setupを使用する必要がありますが、

ものの、文書化、neither Unicode version of Inno Setup supports Unicode string literals

Unicodeのコンパイラで使用される新しいRemObjects社pascalscriptというバージョンがなく、その入力ソースの、Unicodeをサポートしています。つまり、Unicode文字列型を使用しますが、スクリプト内のすべてのUnicode文字はANSIに変換されます。これは、Unicode文字列を表示できないことを意味しません。たとえば、Unicode文字列(S := #$0100 + #$0101 + 'Aa';など)を作成する場合や、LoadStringsFromFileを使用してファイルから文字列を読み込む場合や、{cm:...}定数を使用する場合などです。


だから何を行うことができます:

  • #$041F#$0440#$043E#$0433#$0440#$0430#$043C#$043C#$0430 + ' 2' 
    
  • か、のような文字列をエンコードし、実際に最も正しい方法は、新しいカスタムメッセージを追加することです言語ファイル(Russian.islなど):

    [CustomMessages] 
    Program2=Программа 2 
    

    そして、それが好きなロード:

    CustomMessage('Program2') 
    
+0

OK ...それは驚きです。とにかく、 'CustomMessage'の代わりにコンポーネント記述をコードに読み込むことはできますか?例えばこの場合、私のコンポーネント名は 'prog2'で、記述は'Программа2'です。私はそれを二度定義することを避けたい。 –

+0

'{cm:Program2}' –

+0

のような説明を定義してください。ですから、私は問題をいつも別の方法でappproachするべきです。やってみよう。 –

関連する問題