Если невозможна установка языкового пакета в систему, а ругаться надо на родном языке для пользователя, то можно воспользоваться специальными диалоговыми окнами.
Диалоговые окна с приставкой «W» работают с юникодом. Например MessageBoxW
Если язык не установлен, то специальные символы можно передать в виде кода.
MessageBoxW(Handle, PWChar('Copyright'+ #0169 ), PWChar('Copyright' + #0169), MB_ICONERROR);
Для удобства написал модуль замены из текста кодов вида #0000; в юникод-строку. Используется библиотека RegExp
function addSplash(t: string): string;
var
mess: string;
i: integer;
begin
mess := '';
for i := 1 to length(t) do
if (t[i]<>#13) and (t[i]<>#10) then
mess := mess + '\'+t[i]
else
mess := mess + t[i];
Result := t;
end;
function replaceSpecChar(inp: widestring): widestring;
var
i, cnt: integer;
r: TRegExpr;
chars : TStringList;
mess, mess2 : WideString;
ch: WideChar;
code: string;
begin
r:= TRegExpr.Create;
chars := TStringList.Create;
r.Expression := '(\#.*?\;)';
if r.Exec(inp) then
begin
chars.Add(r.Match[0]);
if r.ExecNext then
begin
chars.Add(r.Match[0]);
end;
end;
mess := inp;
for i := 0 to chars.Count - 1 do
begin
code := copy(chars[i
], 2, length(chars[i])-2);
mess := ReplaceRegExpr(addSplash(chars[i]), mess, '|', true);
end;
mess2 := '';
cnt := 0;
for i := 1 to length(mess) do
begin
if mess[i] <> '|' then
mess2 := mess2 + mess[i]
else
begin
code := copy(chars[cnt], 2, length(chars[cnt])-2);
mess2 := mess2 + widechar(strtoint(code));
cnt := cnt + 1;
end;
end;
Result:=mess2;
end;
Пример использования:
MessageBoxW(Handle, replaceSpecChar('Copyright#0169;' ), replaceSpecChar('Copyright#0169;'), MB_ICONERROR);