Карта сайта Kansoftware
НОВОСТИУСЛУГИРЕШЕНИЯКОНТАКТЫ
KANSoftWare

Увеличение высоты поля ввода в Inno Setup с CreateInputQueryPage

Delphi , Программа и Интерфейс , Инсталяция

Увеличение высоты поля ввода в Inno Setup с CreateInputQueryPage

При создании страницы в Inno Setup с помощью CreateInputQueryPage по умолчанию высота поля ввода (TEdit) составляет одну строку. В этой статье мы рассмотрим, как увеличить высоту поля ввода и добавить поддержку нескольких строк.

По умолчанию, когда вы добавляете TEdit на страницу в Inno Setup, его высота составляет одну строку. Как увеличить высоту поля ввода?

Вот соответствующий фрагмент файла ISS:

ContractConfigPage := CreateInputQueryPage(ServerConfigPage.ID,
  'Map contract as JSON', 'Please enter the map contract to use in JSON format', '');
ContractConfigPage.Add('JSON', False);
ContractConfigPage.Edits[0].Height := 100; { не имеет никакого эффекта }

Редактирование:now I am able to have a bigger edit but I can not have multiple lines

ContractConfigPage := CreateInputQueryPage(ServerConfigPage.ID,
  'Map contract as JSON', 'Please enter the map contract to use in JSON format', '');
ContractConfigPage.Add('JSON', False);
ContractConfigPage.Edits[0].AutoSize := False;
ContractConfigPage.Edits[0].Height := 100;
ContractConfigPage.Edits[0].Width := 100;
{ теперь поле ввода больше, но все еще нельзя иметь несколько строк }

Альтернативный ответ:

К сожалению, стиль ES_MULTILINE, который делает поля ввода многострочными, не может быть добавлен к контролу без его пересоздания. Кроме того, Inno Setup внутренне переопределяет тип на класс TPasswordEdit при обработке элементов страницы ввода. Таким образом, остается только удалить этот элемент и создать и обработать контроль TNewMemo самостоятельно.

Решение:

Чтобы увеличить высоту поля ввода и добавить поддержку нескольких строк, вам необходимо заменить TPasswordEdit на TNewMemo. Вот пример кода на Object Pascal:

var
  JsonMemo: TNewMemo;

procedure InitializeWizard();
var
  ContractConfigPage: TInputQueryWizardPage;
  JsonIndex: Integer;
  JsonEdit: TCustomEdit;
begin
  { Создание новой страницы }
  ContractConfigPage := CreateInputQueryPage(wpWelcome,
    'Map contract as JSON', 'Please enter the map contract to use in JSON format', '');

  { Добавление TPasswordEdit. Мы используем его только для создания метки-подсказки и }
  { расчета правильного расположения контрола поля ввода }
  JsonIndex := ContractConfigPage.Add('JSON', False);
  JsonEdit := ContractConfigPage.Edits[JsonIndex];

  { Создание TNewMemo (многострочное поле ввода) на том же родительском контроле и }
  { том же расположении (кроме высоты), что и исходное однострочное TPasswordEdit }
  JsonMemo := TNewMemo.Create(WizardForm);
  JsonMemo.Parent := JsonEdit.Parent;
  JsonMemo.SetBounds(JsonEdit.Left, JsonEdit.Top, JsonEdit.Width, ScaleY(100));

  { Скрытие исходного однострочного поля ввода }
  JsonEdit.Visible := False;

  { Связывание метки с новым полем ввода }
  { (имеет практический эффект только в том случае, если на метке был установлен акселератор клавиатуры) }
  ContractConfigPage.PromptLabels[JsonIndex].FocusControl := JsonMemo;
end;

Теперь вы не можете использовать ContractConfigPage.Edits для доступа к TNewMemo и его значению (он ссылается на исходное скрытое TPasswordEdit). Вам придется использовать глобальную переменную JsonMemo.

Вы также можете создать страницу полностью самостоятельно, начиная с чистой страницы с помощью CreateCustomPage. Это может быть более чистым решением, но более трудоемким.

Альтернативный ответ:

Вот код, который я finally использовал для своих нужд:

var
  ContractConfigPage: TWizardPage;
  ContractMemo: TNewMemo;

procedure InitializeWizard();
begin
  ContractConfigPage := CreateCustomPage(ServerConfigPage.ID,
    'Map contract as JSON', 'Please enter the map contract to use in JSON format WITHOUT DOUBLE QUOTES');
  ContractMemo := TNewMemo.Create(WizardForm);
  ContractMemo.Parent := ContractConfigPage.Surface;
  ContractMemo.SetBounds(0, 0, 410, 210);
  ContractMemo.ScrollBars := ssBoth;
  ContractMemo.WordWrap := False;
  ContractMemo.Text := '{'+#13#10+
    '  name:''map'''+#13#10+
    '}';
end;

Пожалуйста, обратите внимание, что внутри JSON я использую '' вместо ", так как значение будет помещено в xml, поэтому это легче прочитать.

Создано по материалам из источника по ссылке.

Контекст: Статья описывает, как увеличить высоту поля ввода и добавить поддержку нескольких строк в Inno Setup при использовании CreateInputQueryPage.


Комментарии и вопросы

Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS




Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.


:: Главная :: Инсталяция ::


реклама


©KANSoftWare (разработка программного обеспечения, создание программ, создание интерактивных сайтов), 2007
Top.Mail.Ru

Время компиляции файла: 2024-08-19 13:29:56
2024-11-21 11:57:23/0.005486011505127/1