1. Уважаемые гости и пользователи форума.
    Администрация настоятельно рекомендует не регистрировать несколько аккаунтов для одного пользователя. При выявлении наличия мультиаккаунтов будут заблокированы все учетные записи данного пользователя.
    Аккаунты, зарегистрированные на временную почту будут также заблокированы.

Вопрос Как записать текст из TNewEdit в переменную и передать его в реестр?

Тема в разделе "Inno Setup", создана пользователем AlexS, 4 авг 2018.

  1. Пользователь

    Регистрация:
    1 фев 2017
    Сообщения:
    15
    Симпатии:
    0
    Пол:
    Мужской
    Доброго времени суток! Мужики помогите пожалуйста решить вопрос.
    Есть на кастомной странице TNewEdit, по умолчанию текст в его поле берется и отображается из константы {username}, в дальнейшем текст из TNewEdit записывается в реестр...
    Не могу никак сделать, чтобы при изменении текста в поле, в реестр записывался новый (введенный вместо {username}) текст.
    Понимаю, что это дело реализуется через запись текста из поля в переменную и вписывается затем в реестр, но вот с переменными у меня отношения не задались...

    Код (Text):

    [Setup]
    AppName=MyProg
    AppVersion= 1.5
    CreateAppDir=no
    OutputBaseFilename=setup

    [Registry]
    Root: HKCU; SubKey: Software\My Program; Flags: uninsdeletekey
    Root: HKCU; SubKey: Software\My Program\Settings; ValueType: string; ValueName: Registered; ValueData: {code:edtText}; Flags: uninsclearvalue

    [Code]
    var
      Panel: TPanel;
      NewEdit: TNewEdit;

    procedure edtText (Sender: TObject);
    begin
    // Текст значения берется отсюда, но тут я споткнулся...
    // По умолчанию текст поля должен браться из константы {username} и соответственно записываемое значение в реестре тоже {username}.
    // Если вводится другой тест в поле NewEdit, то записываемое значение в реестре уже берется из нового текста...
    end;

    procedure InitializeWizard();
    begin
      begin
      Panel:= TPanel.Create(WizardForm);
      Panel.Parent:= WizardForm.ReadyPage;
      Panel.SetBounds(ScaleX(0),ScaleY(24),ScaleX(417),ScaleY(205));
      end;

      begin
      NewEdit:= TNewEdit.Create(WizardForm);
      NewEdit.Parent:= Panel;
      NewEdit.SetBounds(ScaleX(24),ScaleY(80),ScaleX(369),ScaleY(21));
      NewEdit.Text:= ExpandConstant('{username}');
      end;
    end;
     
     
  2. Пользователь

    Регистрация:
    27 мар 2014
    Сообщения:
    348
    Симпатии:
    75
    Пол:
    Мужской
    AlexS,
    Код (Inno):
    [Setup]
    AppName=MyProg
    AppVersion= 1.5
    CreateAppDir=no
    OutputBaseFilename=setup

    [Registry]
    Root: HKCU; SubKey: Software\My Program; Flags: uninsdeletekey
    Root: HKCU; SubKey: Software\My Program\Settings; ValueType: string; ValueName: Registered; ValueData: {code:edtText}; Flags: uninsclearvalue

    [Code]
    var
      Panel: TPanel;
      NewEdit: TNewEdit;

    function edtText(s: string):string;
    begin
      Result := NewEdit.Text;
    end;

    procedure InitializeWizard();
    begin
      begin
      Panel:= TPanel.Create(WizardForm);
      Panel.Parent:= WizardForm.ReadyPage;
      Panel.SetBounds(ScaleX(0),ScaleY(24),ScaleX(417),ScaleY(205));
      end;

      begin
      NewEdit:= TNewEdit.Create(WizardForm);
      NewEdit.Parent:= Panel;
      NewEdit.SetBounds(ScaleX(24),ScaleY(80),ScaleX(369),ScaleY(21));
      NewEdit.Text:= ExpandConstant('{username}');
      end;
    end;
     
    YURSHAT, Nemko и AlexS нравится это.
  3. Пользователь

    Регистрация:
    1 фев 2017
    Сообщения:
    15
    Симпатии:
    0
    Пол:
    Мужской
    Как же все просто оказалось. А я голову ломаю. Спасибо большое за помощь.
     
  4. Пользователь

    Регистрация:
    1 фев 2017
    Сообщения:
    15
    Симпатии:
    0
    Пол:
    Мужской
    Мужики, помогите пожалуйста решить следующую задачу. Нужно сделать ввод текста через ключ тихой установки. То есть при обычной установке в реестр записывается текст из константы по умолчанию либо введённый текст, а при тихой установке, если нет ключа (R:=regname) текст из константы по умолчанию, если же есть ключ, то текст из него. Что-то типа MyProg.exe /VERYSILENT /R:=regname.
     
  5. Пользователь

    Регистрация:
    27 мар 2014
    Сообщения:
    348
    Симпатии:
    75
    Пол:
    Мужской
    По простому как-то так
    Код (Inno):
    [Setup]
    AppName=MyProg
    AppVersion= 1.5
    CreateAppDir=no
    OutputBaseFilename=setup

    [Registry]
    Root: HKCU; SubKey: Software\My Program; Flags: uninsdeletekey
    Root: HKCU; SubKey: Software\My Program\Settings; ValueType: string; ValueName: Registered; ValueData: {code:edtText}; Flags: uninsclearvalue

    [Code]
    var
      Panel: TPanel;
      NewEdit: TNewEdit;

    function edtText(s:string):string;
    var
    tmp, str, par:string;
    begin
      Result := NewEdit.Text;
      par := '/R:=';
      tmp := GetCmdTail;
      if Pos(par, tmp) > 0 then
        begin
          str := Copy(tmp, Pos(par, tmp)+Length(par)+1, Length(tmp));
          result := Copy(str, 0, pos('"', str)-1);
        end;
    end;

    procedure InitializeWizard();
    begin
      Panel:= TPanel.Create(WizardForm);
      Panel.Parent:= WizardForm.ReadyPage;
      Panel.SetBounds(ScaleX(0),ScaleY(24),ScaleX(417),ScaleY(205));

      NewEdit:= TNewEdit.Create(WizardForm);
      NewEdit.Parent:= Panel;
      NewEdit.SetBounds(ScaleX(24),ScaleY(80),ScaleX(369),ScaleY(21));
      NewEdit.Text:= ExpandConstant('{username}');
    end;
     

    указывать так:
     
    AlexS нравится это.
  6. Пользователь

    Регистрация:
    1 фев 2017
    Сообщения:
    15
    Симпатии:
    0
    Пол:
    Мужской
    Хамик, благодарю за помощь. Всё отлично работает. :good:
     

Поделиться этой страницей