Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  

Показать сообщение отдельно

Аватара для El Sanchez

Ветеран


Contributor


Сообщения: 1273
Благодарности: 1030

Профиль | Отправить PM | Цитировать


Qu@dr0,
Код: Выделить весь код
[code]
const
    CP_ACP = 0;
    CP_UTF8 = 65001;

var
    RevEmuPage: TInputQueryWizardPage;
    ConvertCheckBox: TCheckBox;

function MultiByteToWideChar(CodePage: UINT; dwFlags: DWORD; lpMultiByteStr: PAnsiChar; cbMultiByte: Integer; lpWideCharStr: PAnsiChar; cchWideChar: Integer): Longint;
external 'MultiByteToWideChar@kernel32.dll stdcall';
function WideCharToMultiByte(CodePage: UINT; dwFlags: DWORD; lpWideCharStr: PAnsiChar; cchWideChar: Integer; lpMultiByteStr: PAnsiChar; cbMultiByte, lpDefaultChar, lpUsedDefaultChar: Integer): Longint;
external 'WideCharToMultiByte@kernel32.dll stdcall';

function StringToWideString(const aStr: String; codePage: Word): String;
var
    len: Integer;
begin
    len := MultiByteToWideChar(codePage, 0, aStr, -1, '', 0);
    if len > 0 then
    begin
        SetLength(Result, (len*2)-2);
        MultiByteToWideChar(codePage, 0, aStr, -1, Result, Length(Result));
    end;
end;

function WideStringToString(const wStr: String; codePage: Word): String;
var
    len: Integer;
begin
    len := WideCharToMultiByte(codePage, 0, wStr, -1, '', 0, 0, 0);
    if len > 0 then
    begin
        SetLength(Result, len-1);
        WideCharToMultiByte(codePage, 0, wStr, -1, Result, Length(Result), 0, 0);
    end;
end;

function SetNickname(Nickname: String; IsConvert: Boolean): String;
begin
    Result := Nickname;
    if IsConvert then Result := WideStringToString(StringToWideString(Result, CP_ACP), CP_UTF8);
end;

procedure NicknameOnChange(Sender: TObject);
begin
    WizardForm.NextButton.Enabled := RevEmuPage.Values[0] <> '';
end;

//
procedure InitializeWizard();
begin
    RevEmuPage := CreateInputQueryPage(wpInfoAfter, 'Настройка RevEmu', '', 'Пожалуйста, введите данные профиля и нажмите Далее.');
    with RevEmuPage do
    begin
        Add('Ник:', False);
        Edits[0].OnChange := @NicknameOnChange;
    end;
    ConvertCheckBox := TCheckBox.Create(WizardForm);
    with ConvertCheckBox do
    begin
        Parent := RevEmuPage.Surface;
        SetBounds(RevEmuPage.Edits[0].Left, RevEmuPage.Edits[0].Top + ScaleY(40), ScaleX(200), ScaleY(17));
        Caption := 'Сохранить в UTF-8';
    end;
end;

procedure CurPageChanged(CurPageID: Integer);
begin
    if CurPageID = RevEmuPage.ID then WizardForm.NextButton.Enabled := RevEmuPage.Values[0] <> '';
    if CurPageID = wpFinished then SetIniString('steamclient', 'PlayerName', SetNickname(RevEmuPage.Values[0], ConvertCheckBox.Checked), ExpandConstant('{app}\rev.ini'));
end;

Последний раз редактировалось El Sanchez, 23-09-2011 в 13:30.

Это сообщение посчитали полезным следующие участники:

Отправлено: 08:33, 23-09-2011 | #3199